Vamos mostrar como implementar um modelo de classificação de texto usando Natural Language Processing (NLP) e Scikit-learn. Vamos dividir o processo em duas partes:
- Criar um arquivo CSV com os dados de exemplo.
- Escrever o código Python para carregar os dados, treinar o modelo e fazer previsões.
Parte 1: Criar o Arquivo CSV
Primeiro, vamos criar um arquivo CSV chamado data.csv
com dados de exemplo. Este arquivo conterá duas colunas: text
e target
.
text,target
"Eu adoro o serviço prestado, muito bom!",positivo
"Esse produto é horrível e não vale o preço.",negativo
"Excelente qualidade e atendimento rápido.",positivo
"Não gostei, a entrega foi atrasada e o produto veio com defeito.",negativo
"Ótimo custo-benefício, recomendaria para amigos.",positivo
"Não recomendo, tive uma péssima experiência.",negativo
"Produto fantástico, atende todas as expectativas!",positivo
"Serviço ruim e atendimento ao cliente não responde.",negativo
Salve o arquivo.
Parte 2: Código Python para Treinamento e Previsão
Agora, vamos escrever o código para carregar os dados, treinar um modelo de classificação de texto e fazer previsões.
import pandas as pd
from sklearn.model_selection import train_test_split, StratifiedShuffleSplit
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import make_pipeline
from sklearn.metrics import classification_report
# Carregar os dados
df = pd.read_csv('data.csv')
# Verificar os dados
print("Primeiras linhas dos dados:")
print(df.head())
print("\nDistribuição das classes:")
print(df['target'].value_counts())
# Separar características e alvo
X = df['text']
y = df['target']
# Dividir os dados em conjuntos de treino e teste com preservação das classes
splitter = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=42)
for train_index, test_index in splitter.split(X, y):
X_train, X_test = X.iloc[train_index], X.iloc[test_index]
y_train, y_test = y.iloc[train_index], y.iloc[test_index]
# Criar o pipeline
model = make_pipeline(TfidfVectorizer(), MultinomialNB(alpha=1.0))
# Treinar o modelo
model.fit(X_train, y_train)
# Fazer previsões
y_pred = model.predict(X_test)
# Avaliar o modelo
print("\nRelatório de Classificação:")
print(classification_report(y_test, y_pred, zero_division=1))
text_classification.py
O Que Fazer em Seguida?
- Certifique-se de que o arquivo
data.csv
está no mesmo diretório que o script de classificação. - Estando tudo no mesmo diretório e os arquivos salvos sem erros, vamos executá-lo:
python3 text_classification.py
O Que Esperar na Saída
- Distribuição das Classes: Mostra quantos exemplos existem para cada classe no seu conjunto de dados.
- Relatório de Classificação: Fornece métricas como
precision
, recall
, e f1-score
para cada classe. Se o modelo estiver funcionando corretamente, você deve ver valores diferentes de zero para essas métricas.
Exemplo da saída esperada:
Explicação do Exemplo:
- Precision, Recall, e F1-Score para Cada Classe (A e B): Avaliam o desempenho do modelo para cada classe individualmente.
- Accuracy (Precisão Geral): Proporção geral de previsões corretas em relação ao total de previsões.
- Macro Average: Média das métricas (precisão, revocação e F1-Score) calculadas para cada classe sem considerar o suporte.
- Weighted Average: Média das métricas (precisão, revocação e F1-Score) ponderada pelo suporte de cada classe.
Um pouco mais de detalhes de como se chegou nisso.
precision
, recall
, e f1-score
para cada classe. Se o modelo estiver funcionando corretamente, você deve ver valores diferentes de zero para essas métricas.Explicação do Exemplo:
- Precision, Recall, e F1-Score para Cada Classe (A e B): Avaliam o desempenho do modelo para cada classe individualmente.
- Accuracy (Precisão Geral): Proporção geral de previsões corretas em relação ao total de previsões.
- Macro Average: Média das métricas (precisão, revocação e F1-Score) calculadas para cada classe sem considerar o suporte.
- Weighted Average: Média das métricas (precisão, revocação e F1-Score) ponderada pelo suporte de cada classe.
1. Precision (Precisão)
Definição: A precisão é a proporção de verdadeiros positivos em relação ao total de previsões positivas feitas pelo modelo. Em outras palavras, de todas as vezes que o modelo previu uma determinada classe, quantas vezes ele estava correto?
Interpretação: Uma alta precisão significa que quando o modelo prevê uma classe, é mais provável que a previsão esteja correta. A precisão é importante quando o custo de uma previsão incorreta é alto.
2. Recall (Revocação) ou Sensitivity (Sensibilidade)
Definição: A revocação é a proporção de verdadeiros positivos em relação ao total de instâncias reais dessa classe. Ou seja, de todas as instâncias que realmente pertencem a uma classe, quantas o modelo conseguiu identificar corretamente?
Interpretação: Uma alta revocação indica que o modelo é bom em identificar todas as instâncias de uma determinada classe. A revocação é importante quando perder uma instância positiva é crítico.
3. F1-Score
Definição: O F1-Score é a média harmônica da precisão e da revocação. É uma métrica que combina ambas, fornecendo uma única pontuação que leva em conta tanto a precisão quanto a revocação.
Interpretação: O F1-Score é útil quando você precisa de um equilíbrio entre precisão e revocação e quando há uma distribuição desigual entre as classes.
Definição: O F1-Score é a média harmônica da precisão e da revocação. É uma métrica que combina ambas, fornecendo uma única pontuação que leva em conta tanto a precisão quanto a revocação.
4. Support (Suporte)
Definição: O suporte é o número de ocorrências de cada classe no conjunto de teste. Representa quantas instâncias de cada classe estão presentes na verdade.
Interpretação: O suporte ajuda a entender o quão bem o modelo está performando em cada classe com base no número real de instâncias dessa classe no conjunto de teste.
É isso.
O tema é bem complexo mesmo, mas achei legal trazer com um exemplo mais prático para vermos de forma simplificada e muito, mas muito macro de como funciona essa parte de análise de dados.
Até a próxima.
Abs
:wq!
Definição: O suporte é o número de ocorrências de cada classe no conjunto de teste. Representa quantas instâncias de cada classe estão presentes na verdade.
Interpretação: O suporte ajuda a entender o quão bem o modelo está performando em cada classe com base no número real de instâncias dessa classe no conjunto de teste.
O tema é bem complexo mesmo, mas achei legal trazer com um exemplo mais prático para vermos de forma simplificada e muito, mas muito macro de como funciona essa parte de análise de dados.
Abs
:wq!
Nenhum comentário:
Postar um comentário