pablobonfim13 commited on
Commit
a2065d8
·
verified ·
1 Parent(s): 6c67517

Upload 7 files

Browse files

Sistema 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 ADDED
@@ -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
+ }
model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8e40368f0a4bfe548a832ae2fd76089d0ad33e6989123bf0cca909c37a383511
3
+ size 267906392
special_tokens_map.json ADDED
@@ -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
+ }
tokenizer.json ADDED
The diff for this file is too large to render. See raw diff
 
tokenizer_config.json ADDED
@@ -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
+ }
training_args.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9bcc6dddbf044de8483724051ce297d580f6d6ff5873b682274c8b412c36d674
3
+ size 5777
vocab.txt ADDED
The diff for this file is too large to render. See raw diff