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.

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
Safetensors
Model size
0.1B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for fr4nZzz/roberta-hate-speech

Dataset used to train fr4nZzz/roberta-hate-speech

Paper for fr4nZzz/roberta-hate-speech