replicate-HatEval-robertuito-base-uncased

Réplica del experimento de detección de discurso de odio en español de Pérez et al. (2022): fine-tuning de RoBERTuito sobre HatEval 2019 (SemEval-2019 Task 5), Subtarea A, español, con las particiones oficiales del shared task y 10 corridas con distintas semillas.

Macro-F1 (test oficial ES)
Reportado en el paper (media de 10 corridas) 0.801
Esta réplica (media de 10 corridas) 0.8018 ± 0.0108

Modelo con fines pedagógicos. Fue entrenado como ejemplo de fine-tuning y de replicación de resultados para un curso de posgrado. No está pensado para moderación de contenido ni para ningún uso en producción. Ver Sesgos, riesgos y limitaciones.

Detalles del modelo

  • Desarrollado por: [Germán Rosati / CONICET - factor_data - EIDAES - UNSAM]
  • Tipo de modelo: RoBERTa base (12 capas, 12 cabezas, dimensión oculta 768, vocabulario SentencePiece de 30K, ~108M parámetros) con cabeza de clasificación de secuencias, 2 clases
  • Idioma: Español (variedad de Twitter; el corpus original tiene foco en España)
  • Licencia: CC-BY-NC-4.0, heredada de HatEval. El uso comercial no está permitido.
  • Fine-tuneado a partir de: pysentimiento/robertuito-base-uncased

Fuentes

Usos

Uso directo

Clasificación binaria de tuits en español como Hateful / Not hateful, siguiendo el esquema de anotación de HatEval: odio dirigido a mujeres o personas migrantes.

Usos fuera de alcance

  • Moderación de contenido o cualquier decisión automatizada sobre personas. El modelo se equivoca en aproximadamente uno de cada cinco tuits del test, y los errores no se distribuyen de manera uniforme entre grupos.
  • Otros blancos de odio. HatEval anota únicamente misoginia y xenofobia. Contenido homofóbico, antisemita, capacitista o racista contra otros grupos no fue anotado como odio durante el entrenamiento y el modelo tenderá a no detectarlo.
  • Otras variedades del español o textos que no sean tuits. El corpus proviene principalmente de Twitter en España, entre 2018 y 2019.
  • Uso comercial, por la licencia de los datos.

Sesgos, riesgos y limitaciones

  • El modelo aprende tema, no postura. El corpus se recolectó filtrando por palabras clave, así que los mensajes que hablan sobre migración o feminismo están sobrerrepresentados en ambas clases. Es esperable que el contradiscurso, la cita de mensajes de odio y la discusión neutral sobre esos temas produzcan falsos positivos.
  • Sobre-predicción sistemática de odio. En las 10 corridas, la precisión sobre la clase positiva (0.727 ± 0.022) es unos 12 puntos menor que el recall (0.845 ± 0.019). Cerca de uno de cada cuatro tuits marcados como odio no lo es según los anotadores. Además, la precisión es la métrica más inestable de todas: su desvío duplica al del macro-F1.
  • Generalización limitada. El macro-F1 cae de 0.885 en validación a 0.802 en test —8.3 puntos— pese a que ambas particiones tienen proporciones de clase similares (44.4% y 41.3%). La caída no se explica por desbalance sino por diferencias de contenido. Es razonable esperar caídas iguales o mayores en cualquier corpus distinto de HatEval.
  • "Discurso de odio" no es una categoría natural. El modelo reproduce el esquema de anotación de HatEval, con sus criterios y sus desacuerdos, no una definición universal.
  • Odio implícito. Ironía, eufemismos y dog whistles sin insultos explícitos se detectan mucho peor que el odio explícito.
  • Desfase temporal. Los datos son de 2018-2019; el vocabulario del discurso de odio online cambia rápido.
  • Calibración. El entrenamiento continúa varias épocas más allá del mínimo de la loss de validación. Las probabilidades están sobreconfiadas: sirven para ordenar ejemplos, no como estimaciones calibradas.
  • Contenido. Los datos de entrenamiento contienen lenguaje abusivo real y sin filtrar.

Recomendaciones

Cualquier uso debería incluir supervisión humana, evaluación previa sobre datos de la población objetivo, y análisis de errores desagregado por subgrupo. El umbral de decisión es una elección de despliegue, no una propiedad del modelo: dado el desbalance sistemático entre precisión y recall, conviene ajustarlo según el costo relativo de cada tipo de error.

Cómo empezar

from transformers import pipeline
from pysentimiento.preprocessing import preprocess_tweet

pipe = pipeline("text-classification",
                model="[COMPLETAR: usuario]/replicate-HatEval-robertuito-base-uncased")

texto = "Andate a tu país"
pipe(preprocess_tweet(texto, lang="es"))

Importante. Este modelo requiere el preprocesamiento de RoBERTuito. Sin él, la entrada no coincide con el formato de entrenamiento y el rendimiento cae. Ver Preprocesamiento.

Detalles de entrenamiento

Datos

HatEval 2019, Subtarea A, subconjunto en español, particiones oficiales del shared task (valeriobasile/HatEval en el Hub, filtrando language == "es").

Partición Instancias % clase Hateful
Entrenamiento 4.500 41.3%
Validación 500 44.4%
Test 1.599 41.3%

Etiqueta HS: 1 si el tuit contiene discurso de odio contra mujeres o personas migrantes, 0 en caso contrario. El test oficial tiene 1.600 instancias; la copia del Hub contiene 1.599.

Procedimiento

Preprocesamiento

Se aplicó pysentimiento.preprocessing.preprocess_tweet(texto, lang="es") antes de tokenizar, que es la normalización usada durante el preentrenamiento de RoBERTuito:

  • handles de usuario → @usuario
  • hashtags → token hashtag seguido del texto segmentado
  • emojis → descripción textual entre tokens emoji
  • repeticiones de caracteres limitadas a tres

Tokenización posterior con truncado y padding a max_length=128.

Hiperparámetros

Learning rate 2e-5, schedule lineal
Warmup 10% de los pasos (141 de 1.410)
Batch size (train / eval) 16 / 64
Épocas 5 (1.410 pasos de optimización)
Weight decay 0.01
Precisión fp16 mixta
Optimizador AdamW (default de Trainer)
Selección de época Mejor macro-F1 en validación (load_best_model_at_end)
Semillas 0, 1, 7, 13, 42, 100, 123, 2024, 31337, 65535
Framework transformers v5, PyTorch

Difiere de la receta del paper original, que usa learning rate 5e-5. El resto (5 épocas, warmup del 10%, selección del mejor checkpoint por época según la métrica de la tarea) coincide.

Evaluación

Métricas

La métrica oficial de SemEval-2019 Task 5 es macro-F1, elegida porque la accuracy premia al clasificador trivial de clase mayoritaria en un corpus desbalanceado. Se reportan además el F1, la precisión y el recall sobre la clase positiva.

Resultados: 10 corridas sobre el test oficial (1.599 instancias)

Semilla Dev macro-F1 Test macro-F1 Accuracy F1 (odio) Precisión Recall
0 0.8889 0.8078 0.8111 0.7824 0.7459 0.8227
1 0.8766 0.8074 0.8105 0.7828 0.7429 0.8273
7 0.8765 0.8127 0.8161 0.7873 0.7535 0.8242
13 0.8791 0.8002 0.8024 0.7796 0.7222 0.8470
42 0.8891 0.8066 0.8093 0.7841 0.7357 0.8394
100 0.8893 0.7975 0.7992 0.7788 0.7143 0.8561
123 0.8897 0.7970 0.7980 0.7825 0.7042 0.8803
2024 0.8910 0.8136 0.8161 0.7921 0.7427 0.8485
31337 0.8812 0.7989 0.8011 0.7776 0.7221 0.8424
65535 0.8836 0.7765 0.7774 0.7623 0.6814 0.8652

La fila resaltada es el checkpoint publicado.

Resumen estadístico (test)

Métrica Media ± desvío Rango
Macro-F1 0.8018 ± 0.0108 [0.7765, 0.8136]
Accuracy 0.8041 ± 0.0115 [0.7774, 0.8161]
F1 (clase odio) 0.7810 ± 0.0078 [0.7623, 0.7921]
Precisión (clase odio) 0.7265 ± 0.0222 [0.6814, 0.7535]
Recall (clase odio) 0.8453 ± 0.0185 [0.8227, 0.8803]

Esta es la cifra que reporta el experimento: 0.8018 ± 0.0108, no la del checkpoint publicado.

Selección del checkpoint publicado

Se publica la semilla con mejor macro-F1 en validación (semilla 2024, dev 0.8910). El conjunto de test no participó de esta decisión, de modo que la cifra de test del modelo publicado (0.8136) no está sesgada por selección.

Advertencia sobre el número del modelo publicado. El test macro-F1 de esta semilla, 0.8136, es también el máximo de las 10 corridas. Es coincidencia: la correlación entre dev y test en estas 10 corridas es prácticamente nula (Pearson r = −0.02, Spearman ρ = −0.14). Elegir por dev no ayuda a conseguir un buen test, solo evita el sesgo de haber elegido por test. Nótese que el máximo en test está 1.2 puntos por encima de la media: ese es exactamente el sesgo que se habría introducido al seleccionar por test.

Comparación con la bibliografía

Todas las cifras corresponden al test oficial de HatEval en español.

Sistema Macro-F1
Mejor sistema de SemEval-2019 Task 5 0.730
BETO cased (Pérez et al. 2022, media de 10 corridas) 0.768
RoBERTuito uncased (Pérez et al. 2022, media de 10 corridas) 0.801
Esta réplica (media de 10 corridas) 0.8018 ± 0.0108

La media coincide con el valor publicado hasta el tercer decimal. La réplica usa learning rate 2e-5 en lugar del 5e-5 del trabajo original, lo que sugiere que el resultado no es especialmente sensible a ese hiperparámetro en este rango.

Baselines no incluidos. Esta ficha no reporta baselines (clase mayoritaria, TF-IDF + regresión logística). Sin ellos no es posible cuantificar cuánto aporta el fine-tuning de un modelo preentrenado respecto de métodos superficiales sobre este corpus.

Observaciones

  1. La variabilidad entre semillas es sustancial. El rango de macro-F1 en test abarca 3.7 puntos (0.7765 a 0.8136), con un desvío de 0.011. Cualquier diferencia menor a ~2 puntos entre configuraciones no es distinguible del ruido sin promediar varias corridas.
  2. La precisión es la métrica más inestable, con un desvío que duplica al del macro-F1. El recall se mantiene sistemáticamente alto: el modelo sobre-predice odio en todas las corridas.
  3. La brecha validación-test es de 8.3 puntos y consistente en las 10 corridas, con proporciones de clase similares en ambas particiones. La diferencia proviene del contenido, no del balance.
  4. Dev no predice test. Ver la advertencia arriba.

Impacto ambiental

  • Hardware: [COMPLETAR: p.ej. 1× NVIDIA T4 en Google Colab]
  • Horas de cómputo: ~0.7 h (10 corridas de ~4 minutos)
  • Proveedor / región: [COMPLETAR]
  • Emisiones estimadas: despreciables frente al preentrenamiento del modelo base, que requirió unas tres semanas de TPU v3-8.

Se puede estimar con la calculadora de impacto de ML de Lacoste et al. (2019).

Especificaciones técnicas

RoBERTa base preentrenado con MLM sobre unos 500 millones de tuits en español. Para esta tarea se agrega un clasificador lineal sobre la representación del token [CLS], entrenado con cross-entropy sobre dos clases.

Citación

Si usás este modelo, citá el modelo base y el corpus.

@inproceedings{perez2022robertuito,
  title     = {{RoBERTuito}: a pre-trained language model for social media text in {S}panish},
  author    = {P{\'e}rez, Juan Manuel and Furman, Dami{\'a}n A. and
               Alonso Alemany, Laura and Luque, Franco},
  booktitle = {Proceedings of the Thirteenth Language Resources and Evaluation Conference},
  pages     = {7235--7243},
  year      = {2022},
  address   = {Marseille, France},
  publisher = {European Language Resources Association}
}

@inproceedings{basile2019semeval,
  title     = {{SemEval}-2019 Task 5: Multilingual Detection of Hate Speech Against
               Immigrants and Women in {T}witter},
  author    = {Basile, Valerio and Bosco, Cristina and Fersini, Elisabetta and
               Nozza, Debora and Patti, Viviana and Rangel Pardo, Francisco Manuel and
               Rosso, Paolo and Sanguinetti, Manuela},
  booktitle = {Proceedings of the 13th International Workshop on Semantic Evaluation},
  pages     = {54--63},
  year      = {2019},
  publisher = {Association for Computational Linguistics}
}

Glosario

  • Macro-F1: promedio no ponderado del F1 de cada clase. A diferencia de la accuracy, penaliza fuertemente a los modelos que ignoran la clase minoritaria. Es la métrica oficial del shared task.
  • F1 (clase odio): F1 calculado únicamente sobre la clase positiva. En este modelo es sistemáticamente más bajo que el macro-F1 y no es comparable con las cifras publicadas.

Archivos adicionales

  • resultados_semillas.csv — métricas completas de las 10 corridas.

Autoría de la ficha

Germán Rosati

Contacto

german.rosati@gmail.com

Downloads last month
7
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 gefero/replicate-HatEval-robertuito-base-uncased

Finetuned
(17)
this model

Paper for gefero/replicate-HatEval-robertuito-base-uncased

Evaluation results

  • Macro F1 (media de 10 corridas) on HatEval 2019 (SemEval-2019 Task 5, Subtask A, Spanish)
    self-reported
    0.802
  • Macro F1 (checkpoint publicado) on HatEval 2019 (SemEval-2019 Task 5, Subtask A, Spanish)
    self-reported
    0.814