Como criar uma classificadora de texto em Azure AI & Machine Learning
Este tutorial mostra como criar uma classificadora de texto usando Azure AI & Machine Learning para categorizar mensagens ou avaliações. Aprender a treinar, registar e expor um modelo como endpoint é útil para automatizar a triagem de conteúdos, o suporte ao cliente ou a análise de feedback.
Pré-requisitos
- Conta Azure com permissões para criar recursos (Azure Machine Learning Workspace).
- Azure CLI e extensão Azure ML instalada ou acesso ao Azure Machine Learning studio.
- Python 3.8+ e pip; pacotes: azure-ai-ml, scikit-learn, pandas.
- Conjunto de dados simples de texto com coluna "text" e coluna "label" (CSV).
Passo 1: Preparar o ambiente e o dataset
Porquê: é importante ter um ambiente replicável e um conjunto de dados limpo. Vamos criar um virtualenv, instalar dependências e preparar um CSV com exemplos rotulados.
python -m venv venv
source venv/bin/activate # ou venv\Scripts\activate no Windows
pip install --upgrade pip
pip install azure-ai-ml scikit-learn pandas joblib
# Exemplo mínimo de dataset (criar text_labels.csv):
# text,label
# "Entrega atrasada",complaint
# "Excelente produto",praise
Passo 2: Treinar um modelo localmente (exemplo com scikit-learn)
Porquê: treinar localmente permite iterar rapidamente. Usamos um Pipeline com CountVectorizer e LogisticRegression e guardamos o modelo com joblib.
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import LogisticRegression
import joblib
df = pd.read_csv('text_labels.csv')
X_train, X_test, y_train, y_test = train_test_split(df['text'], df['label'], test_size=0.2, random_state=42)
model = make_pipeline(CountVectorizer(), LogisticRegression(max_iter=1000))
model.fit(X_train, y_train)
print('Acurácia:', model.score(X_test, y_test))
joblib.dump(model, 'text_classifier.joblib')
Passo 3: Registar o modelo no Azure Machine Learning
Porquê: registar modelos facilita a gestão de versões e a implantação. Vamos usar azure-ai-ml para registar o ficheiro do modelo salvo.
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
from azure.ai.ml.entities import Model
# Defina estas variáveis de ambiente ou substitua diretamente
subscription_id = ''
resource_group = ''
workspace_name = ''
ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group, workspace_name)
model = Model(path='text_classifier.joblib', name='text-classifier', description='Classifier scikit-learn simple')
registered_model = ml_client.models.create_or_update(model)
print('Model registered:', registered_model.name, registered_model.version)
Passo 4: Criar uma imagem de contentor ou endpoint em tempo real
Porquê: expor o modelo como endpoint permite invocar previsões a partir de aplicações. Aqui descrevo de forma simples como criar um endpoint em tempo real com um script de scoring mínimo.
# scoring_script.py (mínimo)
import json
import joblib
model = None
def init():
global model
model = joblib.load('text_classifier.joblib')
def run(raw_data):
data = json.loads(raw_data)
texts = data.get('texts', [])
preds = model.predict(texts)
return json.dumps({'predictions': preds.tolist()})
Depois, no Azure ML, cria-se um Deployment (real-time) apontando para o modelo registado e para o script de scoring. No studio ou via CLI/azure-ai-ml, configure a imagem/contentor com dependências (scikit-learn) e suba o ficheiro do modelo e o scoring.
Passo 5: Testar o endpoint com uma requisição
Porquê: validar o endpoint garante que o pipeline fim a fim funciona. Usamos curl ou requests em Python para enviar textos e obter classes.
# Exemplo em Python usando requests (obter URL e chave do endpoint no Azure ML)
import requests
import json
endpoint_url = 'https:///score'
api_key = ''
headers = {'Content-Type': 'application/json', 'Authorization': f'Bearer {api_key}'}
payload = json.dumps({'texts': ['Entrega atrasada e sem resposta', 'Adorei a qualidade']})
resp = requests.post(endpoint_url, headers=headers, data=payload)
print(resp.json())
Verificar o resultado
Confirme que o modelo responde ao endpoint e que as previsões fazem sentido: a resposta JSON deve conter as labels esperadas. Verifique métricas locais (accuracy, matriz de confusão) e os logs do deployment para erros comuns como falta de dependências ou caminhos incorretos.
Conclusão
Agora tem um fluxo básico: treinar localmente, registar o modelo no Azure Machine Learning e expor como endpoint em tempo real. Próximos passos: melhorar o conjunto de dados, usar validação cruzada, experimentar modelos pré-treinados de NLP ou converter o pipeline para um Job no Azure ML para treino automatizado. Dica: comece por rotular bem os exemplos mais frequentes para obter ganhos rápidos no desempenho.