Upload 7 files
Browse filesSistema de Classificação de Intenção com IA (NLP Transformer)
1. Contexto de Negócio (O Problema Resolvido)
O objetivo deste projeto foi desenvolver o "cérebro" central de um sistema de atendimento ao cliente automatizado (como um chatbot ou um roteador de e-mails).
O sistema lê uma mensagem de texto livre de um usuário (ex: "Quero saber o preço do voo") e classifica automaticamente a intenção dessa mensagem (ex: Solicitação de Tarifa). Isso permite que a empresa direcione instantaneamente o cliente para o departamento correto (Vendas, Suporte, etc.), economizando milhares de horas de triagem manual e melhorando a experiência do cliente.
2. Tecnologias Utilizadas
Python e Pandas (para manipulação de dados).
Hugging Face (transformers, datasets): A plataforma padrão da indústria para modelos de IA baseados em Transformers.
DistilBERT: O modelo de Transformer (baseado no artigo "Attention Is All You Need") que usamos como "cérebro" pré-treinado.
PyTorch: A biblioteca de deep learning que rodou o treinamento na GPU.
Weights & Biases (wandb): Ferramenta profissional de MLOps usada para monitorar e registrar os KPIs de performance do modelo durante o treinamento.
3. Metodologia de Desenvolvimento (O Processo)
O projeto foi executado em três fases principais:
Fase 1: Preparação e "Tradução" dos Dados (Tokenização) O primeiro desafio é que a IA não lê texto, ela lê números. Usamos um Tokenizer (um "tradutor" específico do DistilBERT) para converter todo o nosso histórico de frases (o dataset ATIS) em um formato numérico padronizado (input_ids e attention_mask) que o modelo Transformer pudesse entender.
Fase 2: Treinamento por Transferência (O "Fine-Tuning") Esta é a parte central. Em vez de construir um modelo do zero (o que levaria meses e milhões de reais), aplicamos a técnica de Transfer Learning:
Contratamos o "Gênio": Carregamos o modelo DistilBERT, que já foi pré-treinado pelo Google/Hugging Face em bilhões de textos da internet. Ele já é um "gênio" em entender inglês.
Especializamos o "Gênio": O modelo "gênio" (pré-treinado) não sabia nada sobre as nossas 26 intenções de negócio (flight, airfare, etc.). O processo de fine-tuning (afinar) foi um treinamento curto e focado (rodado em GPU) onde "congelamos" o cérebro do gênio e treinamos apenas um novo "cabeçote" de classificação. Nós o especializamos para a nossa tarefa específica.
Fase 3: Monitoramento e Avaliação (A Prova de Valor) Durante o treino, usamos o wandb para garantir que o modelo estava aprendendo corretamente, monitorando o "Nível de Erro" (Loss) a cada época. Ao final, rodamos uma avaliação final no conjunto de "teste" (dados que o modelo nunca tinha visto) para validar a performance no mundo real.
4. Resultados e Impacto (O Valor Gerado)
KPI de Performance: O modelo final atingiu 97.31% de acurácia no conjunto de teste. Isso prova que o sistema é altamente confiável para classificar corretamente as solicitações dos clientes.
O Entregável Funcional: O resultado não foi apenas um número, mas um pipeline de inferência funcional. Testamos o modelo com frases novas (ex: "i need a flight to new york") e ele classificou a intenção corretamente (flight) com 99,9% de confiança.
Portfólio Público (A Prova): O modelo treinado (o "cérebro" especialista que criamos) foi publicado com sucesso no meu perfil profissional do Hugging Face, onde pode ser testado e verificado publicamente.
- config.json +80 -0
- model.safetensors +3 -0
- special_tokens_map.json +7 -0
- tokenizer.json +0 -0
- tokenizer_config.json +56 -0
- training_args.bin +3 -0
- vocab.txt +0 -0
|
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"activation": "gelu",
|
| 3 |
+
"architectures": [
|
| 4 |
+
"DistilBertForSequenceClassification"
|
| 5 |
+
],
|
| 6 |
+
"attention_dropout": 0.1,
|
| 7 |
+
"dim": 768,
|
| 8 |
+
"dropout": 0.1,
|
| 9 |
+
"dtype": "float32",
|
| 10 |
+
"hidden_dim": 3072,
|
| 11 |
+
"id2label": {
|
| 12 |
+
"0": "abbreviation",
|
| 13 |
+
"1": "aircraft",
|
| 14 |
+
"2": "aircraft+flight+flight_no",
|
| 15 |
+
"3": "airfare",
|
| 16 |
+
"4": "airfare+flight",
|
| 17 |
+
"5": "airfare+flight_time",
|
| 18 |
+
"6": "airline",
|
| 19 |
+
"7": "airline+flight_no",
|
| 20 |
+
"8": "airport",
|
| 21 |
+
"9": "capacity",
|
| 22 |
+
"10": "cheapest",
|
| 23 |
+
"11": "city",
|
| 24 |
+
"12": "day_name",
|
| 25 |
+
"13": "distance",
|
| 26 |
+
"14": "flight",
|
| 27 |
+
"15": "flight+airfare",
|
| 28 |
+
"16": "flight+airline",
|
| 29 |
+
"17": "flight_no",
|
| 30 |
+
"18": "flight_no+airline",
|
| 31 |
+
"19": "flight_time",
|
| 32 |
+
"20": "ground_fare",
|
| 33 |
+
"21": "ground_service",
|
| 34 |
+
"22": "ground_service+ground_fare",
|
| 35 |
+
"23": "meal",
|
| 36 |
+
"24": "quantity",
|
| 37 |
+
"25": "restriction"
|
| 38 |
+
},
|
| 39 |
+
"initializer_range": 0.02,
|
| 40 |
+
"label2id": {
|
| 41 |
+
"abbreviation": 0,
|
| 42 |
+
"aircraft": 1,
|
| 43 |
+
"aircraft+flight+flight_no": 2,
|
| 44 |
+
"airfare": 3,
|
| 45 |
+
"airfare+flight": 4,
|
| 46 |
+
"airfare+flight_time": 5,
|
| 47 |
+
"airline": 6,
|
| 48 |
+
"airline+flight_no": 7,
|
| 49 |
+
"airport": 8,
|
| 50 |
+
"capacity": 9,
|
| 51 |
+
"cheapest": 10,
|
| 52 |
+
"city": 11,
|
| 53 |
+
"day_name": 12,
|
| 54 |
+
"distance": 13,
|
| 55 |
+
"flight": 14,
|
| 56 |
+
"flight+airfare": 15,
|
| 57 |
+
"flight+airline": 16,
|
| 58 |
+
"flight_no": 17,
|
| 59 |
+
"flight_no+airline": 18,
|
| 60 |
+
"flight_time": 19,
|
| 61 |
+
"ground_fare": 20,
|
| 62 |
+
"ground_service": 21,
|
| 63 |
+
"ground_service+ground_fare": 22,
|
| 64 |
+
"meal": 23,
|
| 65 |
+
"quantity": 24,
|
| 66 |
+
"restriction": 25
|
| 67 |
+
},
|
| 68 |
+
"max_position_embeddings": 512,
|
| 69 |
+
"model_type": "distilbert",
|
| 70 |
+
"n_heads": 12,
|
| 71 |
+
"n_layers": 6,
|
| 72 |
+
"pad_token_id": 0,
|
| 73 |
+
"problem_type": "single_label_classification",
|
| 74 |
+
"qa_dropout": 0.1,
|
| 75 |
+
"seq_classif_dropout": 0.2,
|
| 76 |
+
"sinusoidal_pos_embds": false,
|
| 77 |
+
"tie_weights_": true,
|
| 78 |
+
"transformers_version": "4.57.1",
|
| 79 |
+
"vocab_size": 30522
|
| 80 |
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:8e40368f0a4bfe548a832ae2fd76089d0ad33e6989123bf0cca909c37a383511
|
| 3 |
+
size 267906392
|
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"cls_token": "[CLS]",
|
| 3 |
+
"mask_token": "[MASK]",
|
| 4 |
+
"pad_token": "[PAD]",
|
| 5 |
+
"sep_token": "[SEP]",
|
| 6 |
+
"unk_token": "[UNK]"
|
| 7 |
+
}
|
|
The diff for this file is too large to render.
See raw diff
|
|
|
|
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"added_tokens_decoder": {
|
| 3 |
+
"0": {
|
| 4 |
+
"content": "[PAD]",
|
| 5 |
+
"lstrip": false,
|
| 6 |
+
"normalized": false,
|
| 7 |
+
"rstrip": false,
|
| 8 |
+
"single_word": false,
|
| 9 |
+
"special": true
|
| 10 |
+
},
|
| 11 |
+
"100": {
|
| 12 |
+
"content": "[UNK]",
|
| 13 |
+
"lstrip": false,
|
| 14 |
+
"normalized": false,
|
| 15 |
+
"rstrip": false,
|
| 16 |
+
"single_word": false,
|
| 17 |
+
"special": true
|
| 18 |
+
},
|
| 19 |
+
"101": {
|
| 20 |
+
"content": "[CLS]",
|
| 21 |
+
"lstrip": false,
|
| 22 |
+
"normalized": false,
|
| 23 |
+
"rstrip": false,
|
| 24 |
+
"single_word": false,
|
| 25 |
+
"special": true
|
| 26 |
+
},
|
| 27 |
+
"102": {
|
| 28 |
+
"content": "[SEP]",
|
| 29 |
+
"lstrip": false,
|
| 30 |
+
"normalized": false,
|
| 31 |
+
"rstrip": false,
|
| 32 |
+
"single_word": false,
|
| 33 |
+
"special": true
|
| 34 |
+
},
|
| 35 |
+
"103": {
|
| 36 |
+
"content": "[MASK]",
|
| 37 |
+
"lstrip": false,
|
| 38 |
+
"normalized": false,
|
| 39 |
+
"rstrip": false,
|
| 40 |
+
"single_word": false,
|
| 41 |
+
"special": true
|
| 42 |
+
}
|
| 43 |
+
},
|
| 44 |
+
"clean_up_tokenization_spaces": false,
|
| 45 |
+
"cls_token": "[CLS]",
|
| 46 |
+
"do_lower_case": true,
|
| 47 |
+
"extra_special_tokens": {},
|
| 48 |
+
"mask_token": "[MASK]",
|
| 49 |
+
"model_max_length": 512,
|
| 50 |
+
"pad_token": "[PAD]",
|
| 51 |
+
"sep_token": "[SEP]",
|
| 52 |
+
"strip_accents": null,
|
| 53 |
+
"tokenize_chinese_chars": true,
|
| 54 |
+
"tokenizer_class": "DistilBertTokenizer",
|
| 55 |
+
"unk_token": "[UNK]"
|
| 56 |
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:9bcc6dddbf044de8483724051ce297d580f6d6ff5873b682274c8b412c36d674
|
| 3 |
+
size 5777
|
|
The diff for this file is too large to render.
See raw diff
|
|
|