Classificador de Intenções - Atendimento ao Cliente

Modelo híbrido BERT + Random Forest para classificação automática de intenções em mensagens de atendimento ao cliente em português brasileiro.

Descrição

Sistema completo de classificação automática de intenções que combina:

  • BERT português (neuralmind/bert-base-portuguese-cased) para embeddings semânticos
  • Random Forest para classificação final
  • 16 categorias de intenções de atendimento ao cliente

Métricas de Performance

  • Acurácia: 67.4%
  • Acurácia CV: 66.7% ± 1.9%
  • 16 categorias de intenção
  • Dataset: Mensagens reais de atendimento

Categorias Suportadas

Categoria Nome Legível Exemplo
duvida_produto Dúvida sobre Produto "Este produto é resistente à água?"
rastreamento_pedido Rastreamento de Pedido "Onde está meu pedido #123?"
agradecimento Agradecimento "Muito obrigada pela ajuda!"
saudacao Saudação "Bom dia, como estão?"
troca_devolucao Troca/Devolução "Quero trocar por outro tamanho"
problema_tecnico Problema Técnico "O app não está funcionando"
solicitacao_informacao Solicitação de Informação "Preciso de mais detalhes"
reacao_emocional Reação Emocional "Que decepção!"
interesse_produto Interesse em Produto "Gostaria de saber mais sobre..."
solicitacao_contato Solicitação de Contato "Podem me ligar?"
mensagem_sistema Mensagem do Sistema "Mensagem enviada automaticamente"
nao_identificado Não Identificado Mensagens ambíguas
reposicao_estoque Reposição de Estoque "Quando volta ao estoque?"
confirmacao Confirmação "Sim, pode prosseguir"
parceria_comercial Parceria Comercial "Interesse em revenda"
evento_presencial Evento Presencial "Quando será o evento?"

Como Usar

import pickle
import torch
import numpy as np
from transformers import AutoTokenizer, AutoModel

class ClassificadorIntencoes:
    def __init__(self):
        # Carregar BERT
        self.tokenizer = AutoTokenizer.from_pretrained("neuralmind/bert-base-portuguese-cased")
        self.bert = AutoModel.from_pretrained("neuralmind/bert-base-portuguese-cased")
        
        # Carregar modelo treinado
        with open('modelo_classificacao_intencoes.pkl', 'rb') as f:
            self.classificador = pickle.load(f)
    
    def gerar_embedding(self, texto):
        inputs = self.tokenizer(texto, return_tensors="pt", padding=True, 
                               truncation=True, max_length=128)
        with torch.no_grad():
            outputs = self.bert(**inputs)
            embedding = outputs.last_hidden_state.mean(dim=1).numpy()
        return embedding
    
    def classificar(self, mensagem):
        embedding = self.gerar_embedding(mensagem)
        
        predicao = self.classificador.predict(embedding)[0]
        probabilidades = self.classificador.predict_proba(embedding)[0]
        
        return {
            'intencao': predicao,
            'confianca': float(probabilidades.max()),
            'intencao_legivel': self.get_readable_name(predicao)
        }
    
    def get_readable_name(self, categoria):
        mapping = {
            "duvida_produto": "Dúvida sobre Produto",
            "solicitacao_informacao": "Solicitação de Informação",
            "reacao_emocional": "Reação Emocional",
            "interesse_produto": "Interesse em Produto",
            "agradecimento": "Agradecimento",
            "rastreamento_pedido": "Rastreamento de Pedido",
            "saudacao": "Saudação",
            "solicitacao_contato": "Solicitação de Contato",
            "mensagem_sistema": "Mensagem do Sistema",
            "troca_devolucao": "Troca/Devolução",
            "problema_tecnico": "Problema Técnico",
            "nao_identificado": "Não Identificado",
            "reposicao_estoque": "Reposição de Estoque",
            "confirmacao": "Confirmação",
            "parceria_comercial": "Parceria Comercial",
            "evento_presencial": "Evento Presencial"
        }
        return mapping.get(categoria, categoria)

# Exemplo de uso
classificador = ClassificadorIntencoes()
resultado = classificador.classificar("Muito obrigada pela ajuda!")
print(f"Intenção: {resultado['intencao_legivel']}")
print(f"Confiança: {resultado['confianca']:.3f}")

Exemplo Rápido

mensagens_teste = [
    "Bom dia, como posso ser ajudado?",
    "Onde está meu pedido?", 
    "Muito obrigada!",
    "Quero trocar este produto"
]

for msg in mensagens_teste:
    resultado = classificador.classificar(msg)
    print(f"'{msg}' → {resultado['intencao_legivel']} ({resultado['confianca']:.3f})")

Arquitetura do Sistema

[Mensagem] → [BERT Embeddings] → [Random Forest] → [Classificação + Confiança]

Componentes:

  1. Tokenização: BERT tokenizer português
  2. Embeddings: Média dos hidden states do BERT
  3. Classificação: Random Forest com 200 árvores
  4. Balanceamento: class_weight='balanced' para classes desbalanceadas

Dataset

  • Fonte: Mensagens reais de atendimento ao cliente
  • Tamanho: 1.440+ exemplos
  • Idioma: Português brasileiro
  • Média: 8.4 palavras por mensagem
  • Divisão: 80% treino, 20% teste

Performance por Categoria

Melhores Performances (F1 > 0.80):

  • Saudação: 0.90
  • Agradecimento: 0.83
  • Parceria Comercial: 0.83

Performance Moderada (F1: 0.50-0.80):

  • Reação Emocional: 0.84
  • Problema Técnico: 0.80
  • Dúvida sobre Produto: 0.67

Desafios:

  • Categorias com poucos exemplos (<20)
  • Sobreposição semântica entre algumas classes
  • Mensagens muito curtas (ambiguidade)

Requisitos

  • Python 3.8+
  • PyTorch 1.9+
  • Transformers 4.20+
  • Scikit-learn 1.0+
  • NumPy 1.21+

Limitações

  1. Desbalanceamento: Algumas categorias têm poucos exemplos
  2. Contexto: Funciona melhor com mensagens de 5+ palavras
  3. Domínio: Treinado especificamente para atendimento ao cliente
  4. Língua: Otimizado para português brasileiro

Casos de Uso

  • Chatbots: Roteamento automático de mensagens
  • CRM: Categorização de tickets de suporte
  • Analytics: Análise de sentimentos e intenções
  • Automação: Respostas automáticas baseadas em intenção

Citação

@misc{nsync_classificador_intencoes,
  title={Classificador de Intenções para Atendimento ao Cliente},
  author={NSYNC Team},
  year={2024},
  publisher={Hugging Face},
  url={https://huggingface.co/itman-inteli/nsync-sprint2-classificador-intencoes}
}

Licença

MIT License - Uso livre para projetos comerciais e acadêmicos.

Downloads last month
3
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support