roberta-hate-speech: detector de discurso de odio en español
Clasificador binario de texto que estima si un comentario en español contiene discurso de odio (clase 1) o
no (clase 0). Es un roberta-base-bne afinado (fine-tuning completo) sobre comentarios de Twitter.
- Modelo base:
PlanTL-GOB-ES/roberta-base-bne(Barcelona Supercomputing Center). Como sus pesos originales fueron retirados del Hub, se cargó desde una copia espejo:PeterPanecillo/PlanTL-GOB-ES-roberta-base-bne-copy. - Dataset:
piuba-bigdata/contextualized_hate_speech. - Autor: Francisco Zerpa (cédula 32111550), Redes Neuronales Profundas, UCV, 2026.
Cómo usarlo
from transformers import pipeline
clf = pipeline("text-classification", model="fr4nZzz/roberta-hate-speech", top_k=None)
print(clf("Escribe aquí un comentario en español"))
Datos
Según el artículo que presenta el dataset (arXiv:2210.00465): son respuestas de primer nivel en Twitter a noticias de diarios argentinos (La Nación, Clarín, Infobae, Perfil y Crónica), en español rioplatense, durante un año a partir de marzo de 2020 y con noticias relacionadas con la COVID-19. Las etiquetas las pusieron seis anotadores nativos. Se considera odio el rechazo intenso hacia una persona o grupo por una característica protegida; según los autores, un insulto por sí solo no basta. Alrededor del 15 % de los comentarios son odio.
Particiones usadas: se respetaron las originales (train, dev como validación y test). Antes de entrenar se eliminaron de validación y prueba los textos idénticos a alguno de train, porque inflaban la métrica.
| Partición | Textos tras la limpieza | % de odio |
|---|---|---|
| train | 36 420 | 15,2 % |
| validación | 8 578 | 15,3 % |
| prueba | 11 112 | 15,8 % |
Preprocesamiento y entrenamiento
| Elemento | Valor |
|---|---|
| Tokenizer | El del modelo base (BPE a nivel de bytes), truncado a 128 tokens, con padding dinámico por lote |
| Régimen | Fine-tuning completo (todos los parámetros entrenables, unos 124,6 millones) |
| Tasa de aprendizaje | 2e-5 |
| Épocas | 2 |
| Tamaño de lote | 16 |
| Semilla | 32111550 |
| Optimizador y planificador | Valores por defecto de Trainer (AdamW, decaimiento lineal, sin warmup, sin weight decay) |
| Precisión | fp16 (mixta) |
| Criterio de parada | La época con mayor F1 macro en validación (load_best_model_at_end) |
Resultados
Métrica principal: F1 macro, porque las clases están desbalanceadas. Todos los regímenes se evaluaron sobre las mismas particiones de validación y prueba.
| Régimen | Parámetros entrenables | Minutos (T4) | F1 macro validación | F1 macro prueba | Exactitud prueba |
|---|---|---|---|---|---|
| 1. Baseline (TF-IDF + regresión logística) | 10 000 | 0,4 | 0,6730 | 0,6762 | 0,8788 |
| 2. Feature extraction (backbone congelado) | 592 130 | 2,4 | 0,6062 | 0,5931 | 0,8506 |
| 3. Fine-tuning completo (este modelo) | 124 644 866 | 6,3 | 0,7940 | 0,7804 | 0,8937 |
| 4. Fine-tuning con tasa excesiva (2e-3) | 124 644 866 | 5,9 | 0,4585 | 0,4571 | 0,8421 |
Este modelo, sobre la partición de prueba (11 112 textos):
| Clase | Precisión | Recall | F1 |
|---|---|---|---|
| No odio (0) | 0,920 | 0,957 | 0,938 |
| Odio (1) | 0,709 | 0,555 | 0,623 |
Deja pasar 781 casos de odio (44,5 % de los reales) y marca por error 400 comentarios neutrales (4,3 %). Una referencia: predecir siempre "no odio" da exactitud 0,8421 y F1 macro 0,4571.
Uso previsto
Ayuda a priorizar comentarios para revisión humana en moderación de comunidades en español. No está pensado para sancionar o bloquear usuarios de forma automática sin que una persona revise el caso.
Limitaciones y sesgos
Derivadas de cómo se construyó el dataset (según sus autores) y del modelo base:
- Dominio estrecho: comentarios cortos en respuesta a noticias argentinas de 2020 sobre COVID-19. Puede rendir peor con otras variantes del español, otras plataformas, otros temas o textos largos.
- Sin contexto: el modelo ve solo el comentario. Los anotadores del dataset vieron la noticia a la que respondía, y los autores del dataset indican que el contexto ayuda a detectar odio.
- Etiquetas subjetivas: las pusieron seis personas y el acuerdo entre ellas fue moderado (alfa de Krippendorff de 0,579 para la etiqueta de odio). El modelo aprende ese criterio, incluida la definición de que un insulto no siempre es discurso de odio.
- Modelo base: su tarjeta indica que no se midieron sesgos ni toxicidad en el preentrenamiento.
- Recall bajo en la clase odio: el modelo detecta poco más de la mitad del odio real (recall 0,555).
- Ejemplos de textos confusos para el modelo:
"La bella y la Horrible (Etiqueta Real = Odio y Predicción = No odio)": Oración poco descriptiva, lo cual resulta en un mensaje implicito para el modelo. La falta de contexto limita la capacidad para inferir del modelo.
"Preso de por Vida!!! (Etiqueta real = No odio y Predicción = Odio)": Oración intrepretable como con entonación fuerte por los 3 signos de exclamación, pocas palabras en la oración. El modelo posiblemente asocie los "!!!" como una forma agresiva de dirigirse a alguien y la falta de contexto hacen que piense que es odio.
Citas
- Base del modelo: Gutiérrez Fandiño et al. (2022), MarIA: Spanish Language Models, Procesamiento del Lenguaje Natural, 68. doi:10.26342/2022-68-3
- Dataset: Assessing the impact of contextual information in hate speech detection, arXiv:2210.00465
- Downloads last month
- 61
Model tree for fr4nZzz/roberta-hate-speech
Base model
PlanTL-GOB-ES/roberta-base-bne