Trabajo:Análisis de sesgos sobre un algoritmo de medición de toxicidad - colaboración con Newtral

De FdIwiki ELP
Saltar a: navegación, buscar
Análisis de sesgos sobre un algoritmo de medición de toxicidad
Autores: Grupo 4
Pablo Daurell Marina (GII 4º A) (2021/22)
Belén García Puente (GII 4º A) (2021/22)
Ela Katherine Shepherd Arévalo (GII 4º A) (2021/22)
Miquel Vera Ramis (GII 4º A) (2021/22)
Alberto García Doménech (GII 4º A) (2021/22)
Fernando Bellot Rodríguez (GIS 4º A) (2021/22)
Mateo González de Miguel (GIC 4º A) (2021/22)
Información general:
Repositorio: Github
Licencia del proyecto: MIT License
Colaboradores: Newtral



Introducción

El objetivo de este proyecto de impacto social es ayudar a una entidad que haga una labor social como es el caso de la detección y concienciación de las fake news. Dicha entidad, con la que hemos tenido la suerte de colaborar, ha sido con una de los medios de comunicación de fact-checking más famosos de este ámbito en España: Newtral.

¿Qué es Newtral?

Newtral es medio de comunicación digital fundado en 2018 centrado en fact-checking, aunque también realizan otras tareas centradas en la transparencia de la información. Hace poco comenzaron con una iniciativa de investigación basada en los protocolos de Inteligencia Artificial, que es el proyecto en el que hemos estado colaborando.

Primer contacto con Newtral

Al principio creímos que sería algo difícil contactar con ellos pero una vez nos decidimos a hacerlo, nos respondieron de forma cordial y rápida. Nuestro primer contacto con Newtral fue vía email con la rama de Newtral Educación, donde comentamos quiénes éramos y nos redirigieron con el apartado Tecnológico de Newtral. Tras contactar con ellos realizamos una reunión en la que comentamos de qué iba nuestro trabajo social, presentando nuestros conocimientos a nivel de informática. A partir de ahí nos comentaron que estaban desarrollando un modelo de Machine Learning para detectar toxicidad en Tweets de políticos españoles, y que les vendría bien contar con un equipo externo que les ayudase a encontrar diferentes sesgos en el mismo.

Trabajo a realizar

Inicialmente nos hablaron sobre un modelo de Google similar: Perspective API sobre el que ya se había realizado alguna investigación similar para encontrar sesgos, como HateCheck: Functional Tests for Hate Speech Detection Models.

A partir de aquí, tras hojear el paper para tener ideas iniciales, nos compartieron el dataset en formato csv con más de 13,000 tweets ya clasificados tanto por el algoritmo de Newtral como por la Perspective API, para que empezásemos a hacer pruebas.

Con todo esto, el objetivo era buscar los sesgos que pueda tener el algoritmo a la hora de clasificar la toxicidad de los tweets.

Originalidad

Proyecto en desarrollo pionero en detección de toxicidad en redes sociales

Impacto

Al trabajar con Newtral, el impacto es directo al ayudar directamente a una empresa dándoles feedback para poder mejorar su algoritmo. A su vez, Newtral tiene mucho más impacto en la sociedad del que podríamos tener nosotros realizando cualquier otro tipo de trabajo genérico.

Evolución del proyecto

Decidimos realizar reuniones semanales con Newtral con el fin de concretar nuestros avances de esa semana y que nos retribuyesen sus opiniones y posibles problemas y soluciones que podríamos explorar.

Primera parte - Análisis del dataset

Inicialmente empezamos a analizar los datos inmediatos que podíamos sacar del csv que nos proporcionaron, para tener una información orientativa a la hora de buscar los sesgos posteriormente.

El csv tenía las siguientes columnas:

  • twitter_id: ID de Twitter correspondiente al tweet. Se puede usar como identificador único del tweet. No debería haber repetidos.
  • text: texto del tweet. Son todos tweets originales, con lo cual en ningún caso está el texto de una respuesta, un retweet o un quote.
  • toxicity: predicción de toxicidad de Perspective API entre 0 y 1. La solemos binarizar en 0.5 por defecto.
  • sev_toxicity: predicción de toxicidad severa de Perspective API entre 0 y 1. No la hemos usado.
  • profanity: predicción de “profanity” de Perspective API entre 0 y 1. No estamos muy seguros de su definición.
  • threat: predicción de amenaza de Perspective API entre 0 y 1.
  • degree1, degree2, degree3: cada uno de las tres anotaciones realizadas por anotadores humanos en Newtral respecto al problema que tenemos definido como Decibelios (valoración del grado de crispación, agresividad, confrontación, en el discurso político). Sus posibles valores son:
    • 0: el tweet no contiene crispación.
    • 1: el tweet contiene algo de crispación, pero no está acompañado por unas formas agresivas, violentas, etc.
    • 2: el tweet contiene crispación y su contenido es agresivo, violento, etc.
  • degree_final: etiqueta final que utilizamos en nuestros modelos agregando las anotaciones anteriores de 3 personas. Sus valores también son 0, 1, 2. Se asigna el valor mayoritario siempre que lo hay. La única excepción es 0-1-2 (cada persona otorga un valor distinto), entonces se asigna un 1 por ser el valor medio.
  • degree_predicted: predicción de Decibelios que hace nuestro modelo. Sus valores posibles son 0, 1, 2.
  • degree_confidence: confianza en la predicción de Decibelios de “degree_predicted”. Es un valor entre 0 y 1 que, cuanto más alto, más seguro está el modelo del valor predicho. Lo calculamos haciendo unas transformaciones sobre los logits de salida de la red neuronal. Somos conscientes de que, por el funcionamiento del modelo que usamos y cómo produce las probabilidades, la mayoría están en valores cercanos al 99% y eso dificulta su interpretación.
  • annotation_date: fecha en la que fue anotado el tweet respecto a la definición de Decibelios.
  • slug: nombre normalizado del político autor del tweet.
  • twitter_url: URL del político autor del tweet.
  • party_slug: nombre normalizado del partido político al que pertenece el autor del tweet.
  • parliamentary_group_slug: nombre normalizado del grupo parlamentario al que pertenece el autor del tweet. No siempre hay una asignación 1 a 1 entre partido y grupo parlamentario. Por ejemplo, existen el grupo mixto y el grupo plural en el que se juntan diferentes partidos que no han obtenido suficiente representación para obtener grupo propio. También puede haber casos raros de personas que abandonan su partido y se integran en el grupo mixto, por ejemplo


En esta fase analizamos el dataset, tanto con la información proporcionada por la Perspective API como por el modelo de Newtral, aunque en fases posteriores lo único que nos importa es el model de Newtral.

Lo primero que decidimos hacer fue calcular la toxicidad media de cada partido político según la Perspective API y la predicción del modelo de Newtral, para entender cómo trabajar con los datos y tener una idea inicial del comportamiento que tiene el algoritmo, permitiéndonos saber dónde podríamos encontrar los sesgos.

A partir de aquí, sacamos además la toxicidad media de cada político dentro de su correspondiente partido.

Como último punto en cuanto a esto, ordenamos los políticos por su toxicidad media, independientemente de su partido político.

A parte de este análisis político, queríamos ver cuáles eran las palabras que repetían más en los tweets que el modelo identificaba como tóxicos, para encontrar palabras clave que podrían generar un nivel de toxicidad más alto.

De aquí sacamos qué partidos puede ser que generen más toxicidad, y qué palabras pueden llevar a un tweet a ser clasificado como tóxico (insultos, temas controvertidos, ...). Esto nos ayudó para las siguientes fases.

Todo esto se lo hemos ido comentando a Newtral en las diversas reuniones.

Este trabajo se puede ver con más detalle, junto con los resultados obtenidos, en el Notebook del repositorio de Github.

Segunda parte - Pruebas con el modelo

Para la siguiente fase, nos proporcionaron el acceso a una API para poder acceder al modelo sin depender del dataset ya generado, lo que nos permitió realizar más pruebas con los textos que quisiéramos en cualquier momento.

A diferencia del dataset en el que nos pasaron anteriormente donde los tweets se clasificaban en toxic y very toxic, ahora el modelo nos devuelve un valor continuo para toxic y otro para very toxic.

Basándonos en los métodos que utilizaban en el paper de HateCheck, establecimos ciertos patrones que serían interesantes investigar:

  • Comparar uso con odio de insultos con uso sin odio
  • Diferenciar insultos de palabras malsonantes
  • Tener en cuenta erratas
  • Tener en cuenta negaciones
  • Diferenciar entre preguntas y afirmaciones
  • Diferenciar entre mensajes de odio o mensajes que hacen referencia a ese odio
  • Tener en cuenta las diferencias entre odio a grupos protegidos y no protegidos

Con ello, empezamos a hacer pruebas a mano escribiendo tweets artificiales con los diferentes sesgos que aparecían en el paper. Ahí encontramos los siguientes indicios de sesgo:

  • "Odio a (grupos desfavorecidos)" aparecía menos tóxico que a un grupos favorecidos(Grupos desfavorecidos: inmigrantes, mujeres, homosexuales, ...)
  • Añadir "comunista" o "fascista" a cualquier mensaje aumenta la toxicidad
  • Añadir "para la sociedad" aumenta la toxicidad
  • Añadir palabras como "lacra" u "obstáculo" aumenta la toxicidad
  • Añadir interrogaciones al final aumenta la toxicidad
  • Palabras como "no" y "más", así como las negaciones aumentan la toxicidad independientemente del contexto
  • Usar el femenino aumenta levemente la toxicidad
  • El algoritmo diferencia entre mayúscula, minúscula y palabras con tilde

Al retribuir la información a Newtral nos confirmaron que se cumplían sus principales sospechas, y junto a todo esto redirigimos el enfoque del trabajo a centrarnos en el contexto político, ya en la tercera fase.

Tercera parte - Creación de datos

Cuarta parte - Creación de datos

Análisis político

Análisis contextual

Emojis

Links

Conclusión

Agradecimientos

Al equipo de Newtral, sobre todo a los miembros con los que hemos tenido más contacto:

  • Rubén Míguez Pérez
  • Javier Beltrán Jorba
  • Sara Estévez Manteiga

Integrantes del grupo de trabajo

  • Pablo Daurell Marina
  • Belén García Puente
  • Ela Katherine Shepherd Arévalo
  • Miquel Vera Ramis
  • Alberto García Doménech
  • Fernando Bellot Rodríguez
  • Mateo González de Miguel