task_categories:text-classification task_categories:text2text-generation size_categories:n<1K language:es license:apache-2.0 hate region:us
---
dataset_info:
  features:
  - name: sintetico
    dtype: string
  - name: text
    dtype: string
  - name: intervencion
    dtype: string
  - name: tipo_discriminacion
    dtype: string
  - name: resultado
    dtype: string
  splits:
  - name: train
    num_bytes: 1569183.3
    num_examples: 1791
  - name: test
    num_bytes: 87614.92462311558
    num_examples: 100
  - name: valid
    num_bytes: 86738.77537688443
    num_examples: 99
  download_size: 936705
  dataset_size: 1743537.0000000002
task_categories:
- text-classification
- text2text-generation
language:
- es
tags:
- hate
size_categories:
- n<1K
license: apache-2.0
---
### Resumen del dataset

Se trata de un dataset en español, extraído del centro de documentación de la Fundación Secretariado Gitano, en el que se presentan distintas situaciones discriminatorias acontecidas por el pueblo gitano. Puesto que el objetivo del modelo es crear un sistema de generación de actuaciones que permita minimizar el impacto de una situación discriminatoria, se hizo un scrappeo y se extrajeron todos los PDFs que contuvieron casos de discriminación con el formato (HECHOS, INTERVENCIÓN, RESULTADO). Para extraer la información se hizo un scrappeo de la página, a continuación se limpió y se unificó todo el dataset con un script de preprocesamiento para que todo el dataset tuviera el mismo formato.


### Tareas admitidas y tablas de clasificación


- `task-generation`: Dado el hecho generar la intervención y la etiqueta de resultado, para dar métodos para hacer la intervección y que sea efectiva. ([PAG-BERT](https://huggingface.co/hackathon-somos-nlp-2023/PAG-BERT))
- `task-classication`: Se puede entrenar un modelo de clasificación, dejamos a los usarios, predecir el tipo de descriminación de dependiedo del hecho

###  Idioma

Es un dataset con la variante español de España, el estilo empleado es formal y objetivo, limitándose a describir los hechos descritos por las personas afectadas.
## Estructura de los datos

### Instancias

A continuación se muestra una instancia de ejemplo del dataset:

```
{
 'sintetico': '0',
 'text': 'Una joven gitana comenzó a trabajar en una tienda de ropa, hace dos años, con contrato indefinido. Al mes de comenzar a trabajar, una compañera le preguntó, en presencia de su encargada, si era gitana, ella respondió que sí; desde entonces el trato de la encargada hacia la joven cambió, comenzó a tirar al suelo perchas, tierra, para luego acusarla de que no limpiaba el suelo, además de hacer continuamente comentarios generalizados refiriéndose a las mujeres gitanas, del tipo “¿Pero te dejan trabajar?” “¿Y estudiar?”, “tú tienes que saber cómo trabajar en la tienda porque como aprendéis en los mercadillos...” La víctima comentó que desde que la encargada se enteró de que era gitana le hizo la vida imposible, se sintió muy humillada. No aguantó más y presentó la baja voluntaria, aun siendo consciente de que perdía su derecho a la prestación por desempleo.',
 'intervencion': 'Se entrevistó a la joven. Se comprobó a través del testimonio de la víctima que desde que su encargada se enteró de que es mujer gitana, al mes de comenzar a trabajar aproximadamente, comenzó a sufrir discriminación. Se informó a la víctima del Servicio, del trabajo que realizamos y de sus derechos.\xa0',
 'tipo_discriminacion': 'Discriminación directa',
 'resultado': 'Negativo.'
}
```

### Campos de los datos

- `sintetico`: indica si los datos son relacionados con la intervención y el resultado son originales, es decir, proceden de la fuente "Fundación Secretariado Gitano" (valor 0); o si, por el contrario, los hemos generado sintéticamente (valor 1).
- `text`: expone los hechos descritos por la persona afectada.
- `intervencion`: presenta las medidas que se tomaron desde la Fundación para evitar que los hechos descritos en "text" se volvieran a repetir.
- `tipo_discriminacion`: etiqueta que identifica el tipo de discriminación. Puede tomar los valores **Acoso discriminatorio**, **Discriminación directa**, **Discriminación indirecta**, **Discriminación interseccional**, **Discurso de odio**, **Orden de discriminar**,, **Sin especificar**.
- `resultado`: presenta la repercusión que tuvo la intervención adoptada. Sus posibles valores son **Positivo**, **Negativo** y **Neutro**.

### División de los datos

El dataset cuenta con un total de 1990 instancias, repartidas del siguiente modo:

|                         |   train   | validation   |    test   |
|-------------------------|----------:|-------------:|----------:|
| Input Sentences         |   90%     |     5%       |   5%      |
| Average Sentence Length |   94.71   |    90.94     |   98.07   |


Cabe destacar que, teniendo en cuenta el resultado de las intervenciones (positivo, negativo o neutro), el dataset no está balanceado. En concreto, hay un total de 280 muestras positivas, 939 negativas y 771 neutras. En próximas actualizaciones del dataset trabajaremos para incrementar el tamaño del dataset de forma balanceada.


## Creación del dataset

### Justificación de la curación

El motivo por el que se creó este dataset es para conocer de una forma objetiva, si las medidas actuales que se están adoptando por parte de la Fundación han surtido efecto (en cuyo caso sería positivo), no ha surtido ningún efecto (negativo), o si por el contrario, las medidas propuestas no han incentivado al usuario a llevar a cabo ninguna acción.
Se ha optado por este dataset por el volumen de datos que contiene relativos a distintos escenarios, y por el formato que todos comparten de: HECHOS, INTERVENCIÓN Y RESULTADO.


### Fuente de los datos

Los datos utilizados para construir el modelo fueron extraídos de la página web de la Fundación Secretariado Gitano (<a href="https://informesdiscriminacion.gitanos.org">FSM</a>).  El FSM tiene una base de datos que contiene actos de discriminación que han sido reportados a la organización. Estos actos de discriminación fueron seleccionados para entrenar y evaluar el modelo.


#### Recogida inicial de datos y normalización

Los datos fueron extraídos de la sección de <a href = "https://informesdiscriminacion.gitanos.org/buscar-casos" >Buscador de casos</a>, donde se lleva un registro de todo los casos de descriminación.

Los campos que ofrece la página web para estetipo de informes son:
* `Hecho` que hace referencia al acto de descriminación.
* `Intervención` qué medidas tomo la FSG para solucionar el problema.
* `Resultado`: Descripción del resultado.
* Año que ocurrió el caso.
* Año del informe.
* Ámbito: Dado el caso de que la discrimnación haya sido una empresa gubernamenta, en cual derecho fundamental se presentó.
* Provincia: Lugar  donde ocurrió el acto.
* Tipo de discriminación.

En la extracción de datos solo tuvimos en cuenta los campos **hechos**, **intervención**, **resultados** y **tipo de discriminación**. El lenguaje usado en los informes es formal.

Originalmente, una elevado número de Hechos no contaban con una intervención y resultado (los campos estaban vacíos).


####  Limpieza de los datos

En la página web, el campo resultado contiene un breve explicación del los efectos obtenidos tras llevar a cabo la intervección. Usando la librería <a href="https://github.com/pysentimiento/pysentimiento">pysentimiento</a>, se clasificó el resultado entre negativo, neutro y positivo. 
Posterior mente se revisó la etiqueta y se ajustó para lo que se consideraba neutral, negativo o positivo

El 17% de los actos de discriminación en el dataset no contaban con intervención ni resultado. Para completar estos campos se aplicó la técnica few-show learning usando el modelo Bloom. De modo que dado algunos ejemplos de **hechos**, **intervención** y **resultado**, seríamos capaces de generar **intervenciones** y **resultados** de forma automática. El output del modelo Bloom se revisó manualmente para corregir errores.

El 41% de los textos del campo **hechos** eran demasiado largos para ser utilizado en BLOOM aplicando la técnica de few-shot learning. Para resolver este problema, se decidió resumirlos, para esto se utilizó la función `segmenter.split_single` de la librería <a href="https://github.com/fnl/segtok" >segtok</a>, que divide el texto en oraciones y las separa por caracteres de nueva línea.
Se usaron dos modelos pre-etrenados para resumir cada sub-texto. El primero fue <a href="https://huggingface.co/mrm8488/bert2bert_shared-spanish-finetuned-summarization">mrm8488/bert2bert_shared-spanish-finetuned-summarization</a> y el segundo fue el <a href="https://huggingface.co/Narrativa/bsc_roberta2roberta_shared-spanish-finetuned-mlsum-summarization">Narrativa/bsc_roberta2roberta_shared-spanish-finetuned-mlsum-summarization</a>

En el repositorio https://github.com/Frorozcoloa/somos_nlp_hackaton se encuentran los scripts originales usados para el preprocesamiento. También puedes encontrar una copia de los mismos en este mismo repositorio.

### Anotación

Las anotaciones que se ralizaron fueron verificaciones a los datos de sintéticos generados con few-shot learning (intervenciones y resultados):
* Se rellenaron los valores nulos.
* Se hicieron resumenes de algunos textos (Hehos) aplicando modelos pre-entrenados.
* Se cambió el texto de resultado por etiquetas de POS, NEU, NEG.

#### Proceso de anotación

Para el proceso de etiquetado se utilizó Argilla para etiquetar la categoría de "Resultado", para ello se emplearon las siguientes etiquetas: "Positivo", "Negativo" y "Neutro". En el proceso de etiquetado lo que nos interesaba era etiquetar el resultado de las intervenciones para que el modelo aprendiera y pudiera generar texto para dar respuesta a la situación expuesta por el usuario, además de predecir con los datos etiquetados si la repercusión que pudiera tener la medida que propone el modelo sería "positiva"(surtiría efecto), "negativa"(no tendría ningún efecto) o "neutra"(si es posible que el usuario no llevara a cabo ninguna acción).
En concreto, tras descargar todos los datos disponibles en la web, los preprocesamos y unimos en un solo dataset que fue subido a Argilla. Una vez aquí, validamos cada una de las instancias del siguiente modo:
* Si la intervención y/o resultado están vacías, se anota como tal.
* Se comprueba que el resultado positivo, negativo o neutro es correcto. La mayoría de las incongruencias surgen entre los pares positivo/neutro y negativo/neutro.

Una vez validado el dataset con argilla, seleccionamos las muestras que fueron anotadas como "vacías" para proceder a completarlas. Para ello, hemos aplicado Few-Shot Learning usando el modelo [BLOOM](https://huggingface.co/bigscience/bloom).

Cabe destacar que algunos hechos del dataset eran demasiado largos y no podían ser procesados por BLOOM (generaba un error que indicaba que habíamos superado el número máximo de tokens), para solucionarlo, utilizamos los modelos <a href="https://huggingface.co/mrm8488/bert2bert_shared-spanish-finetuned-summarization">mrm8488/bert2bert_shared-spanish-finetuned-summarization</a> y <a href="https://huggingface.co/Narrativa/bsc_roberta2roberta_shared-spanish-finetuned-mlsum-summarization">Narrativa/bsc_roberta2roberta_shared-spanish-finetuned-mlsum-summarization</a> para resumir dichos hechos y minimizar así su tamaño.


### Información personal y sensible

En este caso no se ha necesitado utilizar ningún proceso de anonimización, ya que los datos procedentes de esta fuente no contienen ninguna información que vulnere los derechos de los afectados.

## Consideraciones sobre el uso de los datos

### Consideraciones sobre el uso de los datos

El impacto social de este dataset se dirige a ser una herramienta que sirva para implementar acciones que ayuden a combatir el racismo hacia la población gitana, además este dataset se podría utilizar para evaluar la repercusión de las distintas medidas adoptadas durante un período de tiempo, y aquellas medidas con una repercusión "negativa" o "neutra" investigarlas y mejorarlas con un trato más concienzudo hacia la población gitana.

### Debate sobre los prejuicios
Sé realizó un analisís exploratorio de los datos, para eso hemos realizado una nube de palabras para analizar los datos sintéticos y no sintéticos.

#### Datos no sintéticos

<img src="https://huggingface.co/datasets/hackathon-somos-nlp-2023/informes_discriminacion_gitana/resolve/main/imagenes/Hechos_normales.png">
Aquí podemos ver que muchos de los hechos se generaron en noticias, en mujeres, temas de vivienda, con la policia y la familia.
<img src="https://huggingface.co/datasets/hackathon-somos-nlp-2023/informes_discriminacion_gitana/resolve/main/imagenes/Intervenci%C3%B3n_normal.png">
Las intervenciones hablan de derechos, de cartas, de igualdad, asesorar a la persona y de presentar quejas.
<img src="https://huggingface.co/datasets/hackathon-somos-nlp-2023/informes_discriminacion_gitana/resolve/main/imagenes/etiqueta_normal.png">
Muchos de los resultados de las intervenciones fueron negativos o neutrales (Posiblemente sin respuesta) o de que no se logró lo propuesto (Negativo). Se puede observar el desbalance en los datos.

Por medio de la librería *pysentimiento* y usando el modelo `pysentimiento/pt_hate_speech`, se realizó una métrica para medir el discurso de odio en el `Hecho`.
Para eso análizaremos hateful, targeted y aggressive. La métrica va de 0 a 1, para cada una. Siendo la probabilidad de que esa caracteristica esté en el texto.

Se encotró lo siguiente
<img src="https://huggingface.co/datasets/hackathon-somos-nlp-2023/informes_discriminacion_gitana/resolve/main/imagenes/hate_normal.png">
<img src="https://huggingface.co/datasets/hackathon-somos-nlp-2023/informes_discriminacion_gitana/resolve/main/imagenes/hate_2_normal.png">
La distribución de los valores de hateful, targeted y aggressive presentan una cola alargada hacia la derecha, lo que indica que hay pocos casos en los que se detecta un mensaje de odio en los hechos.
Para el caso, donde no se generó la intervección y resultado se presenta un crecimiento en el tercer cuartil, esto quiere decir que hay mensajes que muestra un discurso de odio. Por ejemplo el hateful es de 0.4, targeted de 0.02 y aggresive de 0.03. En conclusión, como está escrito el hecho y como fue entrenado el modelo de *pysentimiento*, en general los hechos no tienen un mensaje de odio.

#### Datos sintéticos.
Se realizó el mismo análisis para los datos sintéticos
<img src="https://huggingface.co/datasets/hackathon-somos-nlp-2023/informes_discriminacion_gitana/resolve/main/imagenes/Hechos_sinteticos.png"/>
Cabe resltar que el hecho no fue generado. 
Es claro que el dataset está más sesgado a contener las palabras gitano, gitana, comunidad gitana, etnia gitana, familia, discriminación.
<img src="https://huggingface.co/datasets/hackathon-somos-nlp-2023/informes_discriminacion_gitana/resolve/main/imagenes/Intervenci%C3%B3n_sintetica.png"/>
Esta parte fue generada por el modelo *Bloom*. Puede comprobarse que con *few-shot* se logra captar más que todo la palabra `derecho`.
<img src="https://huggingface.co/datasets/hackathon-somos-nlp-2023/informes_discriminacion_gitana/resolve/main/imagenes/Etiquetas%20sinteticas.png">
Tambien hay un desbalance en las etiquetas generadas.

Por medio de la librería *pysentimiento* y usando el modelo `pysentimiento/pt_hate_speech` ,se realizó una métrica para medir el discurso de odio en el `Hecho`
Para eso análizaremos hateful, targeted y aggressive. La métrica va de 0 a 1, para cada una. Siendo la probabilidad de que esa caracteristica esté en el texto.

Se encotró lo siguiente

<img src="https://huggingface.co/datasets/hackathon-somos-nlp-2023/informes_discriminacion_gitana/resolve/main/imagenes/hate_sintetico.png">
<img src="https://huggingface.co/datasets/hackathon-somos-nlp-2023/informes_discriminacion_gitana/resolve/main/imagenes/hate_2_sintetico.png">
La distribución de los valores de hateful, targeted y aggressive presentan una cola alargada hacia la derecha, lo que indica que hay pocos casos en los que se detecta un mensaje de odio en los hechos.
Tanto la mediana como la media de los valores de hateful, targeted y aggressive están muy cerca de cero, lo que indica que la mayoría de los hechos no contienen mensajes de odio. Además, se observó que en el tercer cuartil, el 75% de los datos en la métrica de hateful es 0.3, para targeted es de 0.0089 y para aggressive es de 0.06, lo que refuerza la conclusión de que la mayoría de los datos no contienen un mensaje de odio en la descripción de los hechos.


## Información adicional

### Curadores del dataset

* <a href="https://www.linkedin.com/in/frorozcol/">Fredy Orozco</a>
* <a href="https://www.linkedin.com/in/mariajesusgs">María Jesús García</a>
* <a href="https://www.linkedin.com/in/ramonruedadelgado/">Ramón Rueda</a>