Clasificador de comentarios con Transformers: ¿positivo o negativo?
Descripción del modelo
Este modelo es un ejemplo pedagógico del Seminario de Actualización (IFTS N.º 18). Muestra todas las piezas que se publican cuando se comparte un modelo de Hugging Face Transformers: la arquitectura, los pesos y el tokenizer.
Clasifica comentarios cortos sobre departamentos como positivo o negativo.
Es un BERT diminuto entrenado desde cero con un vocabulario propio y muy chico. En un caso real no se entrena desde cero: se hace fine-tuning de un modelo preentrenado del Hub. Igual, los archivos que se publican son los mismos.
Objetivo
Clasificar un texto en una de dos clases. Es un problema de clasificación binaria, como el de la Clase 11, pero con texto como entrada.
Datos de entrenamiento
- Dataset: sintético, generado en
train.pya partir de 5 plantillas de frases y 16 adjetivos (8 positivos y 8 negativos). - Cantidad de registros: 368 comentarios. Se usan 294 para entrenar y 74 para evaluar.
- Entrada (X): el texto del comentario, por ejemplo "el departamento es muy luminoso".
- Salida (y): la etiqueta,
negativo(0) opositivo(1).
Entrenamiento
- Tipo de aprendizaje: supervisado.
- Problema: clasificación de texto (binaria).
- Arquitectura:
BertForSequenceClassificationcon 2 capas, 2 cabezas de atención, dimensión 32 y unos 20.500 parámetros. - Tokenizer: a nivel palabra (
WordLevel), con 37 tokens. Pasa todo a minúsculas y saca las tildes. - Función de pérdida: entropía cruzada. La calcula el modelo cuando recibe
labels. - Optimizador:
AdamW, con tasa de aprendizaje 0,001. - Épocas: 15, en lotes de 16.
- Biblioteca: Hugging Face Transformers, con PyTorch.
Evaluación
Se evaluó sobre 74 comentarios que el modelo no vio durante el entrenamiento.
| Métrica | Resultado |
|---|---|
| Accuracy | 1,000 |
Que acierte el 100 % no quiere decir que el modelo sea bueno. Los comentarios de test usan las mismas plantillas y los mismos adjetivos que los de entrenamiento: es un examen con las mismas preguntas que la práctica. Ver Limitaciones.
Archivos
| Archivo | Qué es |
|---|---|
config.json |
la arquitectura: capas, dimensiones, etiquetas (id2label) |
model.safetensors |
los pesos |
tokenizer.json |
el vocabulario y cómo se corta el texto en tokens |
tokenizer_config.json |
la configuración del tokenizer y sus tokens especiales |
train.py |
el código que lo entrenó |
predict.py |
cómo cargarlo y usarlo |
requirements.txt |
las dependencias |
README.md |
esta Model Card |
Modelo y tokenizer van juntos. Si el modelo se publica sin su tokenizer, no se puede usar: los números que entiende el modelo son posiciones del vocabulario de ese tokenizer y de ningún otro.
Cómo utilizar el modelo
Desde esta carpeta:
from transformers import pipeline
clasificador = pipeline("text-classification", model=".")
print(clasificador("el departamento es muy luminoso"))
# [{'label': 'positivo', 'score': 0.99...}]
Una vez publicado en el Hub, se cambia la carpeta por el nombre del repo:
clasificador = pipeline("text-classification", model="tu-usuario/nombre-del-repo")
Funciona con Transformers 4 (la versión de Colab) y con Transformers 5.
Limitaciones
- Tiene fines exclusivamente educativos.
- Solo conoce 37 palabras. Cualquier otra palabra se convierte en
[UNK](desconocida). Por ejemplo, "tiene una vista increíble" queda como[UNK] [UNK] [UNK] [UNK]. El modelo igual responde, y con seguridad alta: dicenegativo (1.00). Un modelo puede equivocarse con total confianza cuando le llega algo distinto de lo que vio al entrenar. - No entiende negaciones ("no es luminoso") ni ironía. Las frases de entrenamiento no las tienen.
- El dataset sale de plantillas, así que el accuracy de test es optimista.
- Para un uso real, conviene partir de un modelo preentrenado en español y hacerle fine-tuning con comentarios reales.
Autoría
Modelo desarrollado con fines educativos para el IFTS N.º 18. Docente: Cynthia M. Villagra.