DOI: 10.6084/m9.figshare.25892815
title: Algoritmo de clasificación de expresiones de odio por intensidades en español (Algorithm for classifying hate expressions by intensities in Spanish)

description: Modelo de clasificación de intensidades de discurso de odioEste código implementa un sistema de clasificación de discurso de odio utilizando el modelo RoBERTuito (una versión en español de RoBERTa) para detectar intensidades de discurso de odio en tuits.Arquitectura del ModeloEl modelo se basa en <code>pysentimiento/robertuito-base-uncased</code> con las siguientes modificaciones:Se añadió una capa de clasificación densa con 4 salidas sobre el modelo base.Utiliza IDs de entrada y máscaras de atención como entradas.Genera una clasificación multiclase con 4 categorías (Incívicos, Malintencionado, Insulto, Amenaza).Datasets<b>Conjunto de Datos de Intensidades</b>: Este modelo utiliza un conjunto de datos personalizado para la clasificación de intensidades de discurso de odio, cargado desde <code>df_intensidades.csv</code>.Clasificación multiclase con las siguientes etiquetas:<code>0</code> = Intensidad 1 : Odio asociado a mensajes incívico<code>1</code> = MIntensidad 2 : Odio asociado a mensajes mal intencionados o con expresiones abusivas<code>2</code> = Intensidad 3 : Odio asociado a insultos<code>3</code> = Intensidad 4 : Odio asociado a amenazas veladas o explícitasProceso de EntrenamientoPre-entrenamientoBatch size: 16Epochs: 5Learning rate: 2e-5 with 10% warmup stepsEarly stopping with patience=2Fine-tuningBatch size: 128Epochs: 5Learning rate: 2e-5 with 10% warmup stepsEarly stopping with patience=2Métricas personalizadas (a definir según la tarea de clasificación multiclase).Métricas de EvaluaciónEl modelo se evalúa utilizando:Macro recall, precision, and F1-scoreOne-vs-Rest AUCAccuracyMétricas por claseMatriz de confusiónRequerimientosSe requiere los siguientes paquetes de Python (consulte requirements.txt para ver la lista completa):TensorFlowTransformersscikit-learnpandasdatasetsmatplotlibseabornUsoEl modelo espera datos de entrada con las siguientes especificaciones:<b>Formato de datos</b>:Archivo CSV o DataFrame de PandasNombre de columna obligatorio: <code>text</code> (tipo cadena)Nombre de columna opcional: <code>label</code> (tipo entero, 0, 1, 2 o 3) si está disponible para la evaluación<b>Preprocesamiento de texto</b>:El texto se convertirá automáticamente a minúsculas durante el procesamientoLongitud máxima: 128 tokens (los textos más largos se truncarán)Los caracteres especiales, las URL y los emojis deben permanecer en el texto (el tokenizador los gestiona)<b>Codificación de etiquetas</b>:<code>0</code> = Intensidad 1 : Odio asociado a mensajes incívico<code>1</code> = Intensidad 2 : Odio asociado a mensajes mal intencionados o con expresiones abusivas<code>2</code> = Intensidad 3 : Odio asociado a insultos<code>3</code> = Intensidad 4 : Odio asociado a amenazas veladas o explícitasEl proceso de creación de este algoritmo se expone en el informe técnico localizado en: Blanco-Valencia, X., De Gregorio-Vicente, O., Ruiz Iniesta, A., & Said-Hung, E. (2025). Algoritmos de detección de odio/no odio, tipo e intensidad – Hatemedia V.2.0 (Version 2). Hatemedia Project. https://doi.org/10.5281/zenodo.16996080Autores:Xiomara BlancoAlmudena RuizDaniel Pérez PalauOscar De GregorioJuan José CubillasElias Said-HungJulio Montero-DíazFinanciado por: MCIN/AEI /10.13039/501100011033Como citar: Blanco Valencia, X., Pérez Palau, D., Ruiz-Iniesta, A., De Gregorio Vicente, O., José Cubillas, J., Said-Hung, E. and Montero-Diaz, J. (2023), “Algorithm for classifying hate expressions by intensities in Spanish”, figshare. https://doi.org/10.6084/m9.figshare.25892815Más información:https://www.hatemedia.es/ o contactar con: elias.said@unir.netEste algoritmo está relacionado con el algoritmo de clasificación de odio/no odio, desarrollado también por los autores: https://github.com/esaidh266/Algorithm-for-detection-of-hate-speech-in-SpanishEste algoritmo está relacionado con el algoritmo de clasificación de expresiones de odio por tipo en español, desarrollado también por los autores: https://github.com/esaidh266/Algorithm-for-classifying-hate-expressions-by-type-in-SpanishHate Speech Intensity Classification ModelThis code implements a hate speech classification system using the RoBERTuito model (a Spanish version of RoBERTa) to detect hate speech intensities in tweets.##Model ArchitectureThe model is based on <code>pysentimiento/robertuito-base-uncased</code> with the following modifications:A dense classification layer with 4 outputs has been added over the base model.It uses input IDs and attention masks as inputs.It generates a multiclass classification with 4 categories (Uncivil, Malicious, Insult, Threat).##Datasets<b>Intensities Dataset</b>: This uses a custom dataset model for hate speech intensities classification, loaded from <code>df_intensidades.csv</code>.Multiclass classification with the following labels:<code>0</code> = Intensity 1: Hate associated with uncivil messages<code>1</code> = MIntensity 2: Hate associated with malicious messages or abusive language<code>2</code> = Intensity 3: Hate associated with insults<code>3</code> = Intensity 4: Hate associated with veiled or explicit threatsTraining ProcessPre-trainingBatch size: 16Epochs: 5Learning rate: 2e-5 with 10% warm-up stepsStop early with patience = 2Fine TuningBatch size: 128Epochs: 5Learning rate: 2e-5 with 10% warm-up stepsStop early with patience = 2Custom metrics (to be defined according to the training task) multiclass classification).Evaluation MetricsThe model is evaluated using:Macro recall, precision, and F1 scoreOne-versus-rest AUCAccuracyPer-class metricsConfusion matrixRequirementsThe following Python packages are required (see requirements.txt for the full list):TensorFlowTransformersscikit-learnpandasdatasetsmatplotlibseabornUsageThe model expects input data with the following specifications:<b>Data Format</b>:CSV file or Pandas DataFrameRequired column name: <code>text</code> (type string)Optional column name: <code>label</code> (type integer, 0, 1, 2, or 3) if available for evaluation<b>Text Preprocessing</b>:Text is automatically converted to lowercase during processingMaximum length: 128 tokens (longer texts will be truncated)Special characters, URLs, and emojis must remain in the text (the tokenizer handles them)<b>Label encoding</b>:<code>0</code> = Intensity 1: Hate associated with uncivil messages<code>1</code> = Intensity 2: Hate associated with malicious or abusive messages<code>2</code> = Intensity 3: Hate associated with insults<code>3</code> = Intensity 4: Hate associated with veiled or explicit threatsThe process of creating this algorithm is explained in the technical report located at: Blanco-Valencia, X., De Gregorio-Vicente, O., Ruiz Iniesta, A., & Said-Hung, E. (2025). Algoritmos de detección de odio/no odio, tipo e intensidad – Hatemedia V.2.0 (Version 2). Hatemedia Project. https://doi.org/10.5281/zenodo.16996080Authors:Xiomara BlancoAlmudena RuizDaniel Pérez PalauOscar De GregorioJuan José CubillasElias Said-HungJulio Montero-DíazFunded by: MCIN/AEI/10.13039/501100011033How to cites: Blanco Valencia, X., Pérez Palau, D., Ruiz-Iniesta, A., De Gregorio Vicente, O., José Cubillas, J., Said-Hung, E. and Montero-Diaz, J. (2023), “Algorithm for classifying hate expressions by intensities in Spanish”, figshare. https://doi.org/10.6084/m9.figshare.25892815More information:https://www.hatemedia.es/ or contact: elias.said@unir.netThis algorithm is related to the hate/non-hate classification algorithm, also developed by the authors: https://github.com/esaidh266/Algorithm-for-detection-of-hate-speech-in-SpanishThis algorithm is related to the algorithm for classifying hate expressions by types in Spanish, also developed by the authors: https://github.com/esaidh266/Algorithm-for-classifying-hate-expressions-by-type-in-Spanish