🧠 Text Emotion Classifier (TF-IDF + SGDClassifier)
Este projeto é um classificador real de emoções em texto, implementado em Python usando scikit-learn.
Ele aprende padrões linguísticos estatísticos a partir de texto — não usa regras fixas, nem apenas “repete” frases do dataset.
O modelo classifica frases em quatro emoções básicas:
- joy
- sadness
- anger
- neutral
🔬 Como o modelo funciona
O sistema é composto por duas partes principais:
1️⃣ Vetorização de texto (TF-IDF)
O texto é convertido em números usando TF-IDF (Term Frequency–Inverse Document Frequency).
Isso transforma palavras em vetores que representam:
- importância da palavra na frase
- raridade da palavra no dataset
Ou seja:
👉 palavras comuns pesam menos
👉 palavras emocionalmente fortes pesam mais
2️⃣ Classificação com SGDClassifier
Para cada emoção existe um classificador binário independente:
- joy → 0 ou 1
- sadness → 0 ou 1
- anger → 0 ou 1
- neutral → 0 ou 1
Todos usam SGDClassifier com log_loss, que é equivalente a uma regressão logística treinada por gradiente descendente.
Isso significa que o modelo aprende pesos reais para cada palavra.
🧠 Isso é um modelo real?
Sim.
Mas é importante entender qual tipo de modelo ele é.
✔️ O que ele faz
- Aprende associações estatísticas entre palavras e emoções
- Generaliza para frases parecidas (não precisa estar no dataset)
- Atualiza o aprendizado em tempo real (
partial_fit) - Produz probabilidades reais (0.0 → 1.0)
❌ O que ele não faz
- Não “entende” semântica profunda
- Não tem memória contextual
- Não é um modelo generativo
- Não é deep learning
Ele é um modelo linear clássico, não um LLM.
📊 Quantos “parâmetros” ele tem?
Traduzindo para linguagem de IA generativa 👇
- Cada palavra do vocabulário = um peso por emoção
- Com
max_features=5000:- ~5000 parâmetros por emoção
- 4 emoções → ~20.000 parâmetros
- 4 bias (um por classe)
🟢 Comparação:
- SpectriaClassificator-v1.0(Esse modelo): ~20k parâmetros
- MiniGPT 10M: 10.000.000 parâmetros
- LLaMA 7B: 7.000.000.000 parâmetros
- TellerAI-v1.0-0.0001B-Raw : 100k params
🔁 Treino incremental (online learning)
O modelo suporta aprendizado contínuo:
Digite 'treinar'
Digite a nova frase
Digite a emoção dominante
Isso atualiza os pesos imediatamente, sem reiniciar o treino.
⚠️ Observação:
Frases treinadas em tempo real não são salvas no dataset, apenas nos pesos em memória.
🧪 Exemplo de uso
Entrada:
não senti muita coisa especial
Saída:
neutral : 1.00 (Muito forte)
joy : 0.12
sadness : 0.00
anger : 0.00
O modelo generalizou corretamente a partir de frases similares, mas não idênticas ao dataset.
🛠️ Tecnologias usadas
Python 3.11
scikit-learn
pandas
TF-IDF
SGDClassifier
colorama (interface de terminal)
📌 Status do projeto
✔️ Funcional
✔️ Modelo treinável
✔️ Classificação probabilística
✔️ Código simples e extensível
Este projeto é ideal como:
base educacional
baseline de NLP
comparação com modelos neurais
experimento de aprendizado online
🧠 Filosofia do projeto
Este repositório não tenta fingir que é um LLM.
Ele mostra, de forma clara, que:
modelos simples ainda funcionam muito bem quando você entende o problema.
Clássico > mágico.
Feito por Arthur Samuel, um menino de 13 anos.