Detección de "FAKE NEWS" mediante Procesamiento de Lenguaje Natural y modelos de Machine Learning
- Antonio Romero Camacho
- Oct 19, 2020
- 8 min read
Por primera vez en la historia de la red social, Twitter etiquetó en Mayo de 2020 los tweets de Donald Trump como 'fake news', al twitear que el voto por correo era fraudulento.
En concreto, el presidente de los Estados Unidos hablaba en esos tweets sobre el robo y la falsificación del voto por correo. Además, no dudaba en atacar abiertamente la iniciativa del gobernador de California de permitir a todos sus electores el uso del voto por correo, criticando que , según él, "No hay forma de que las papeletas por correo sean nada menos que sustancialmente fraudulentas. Los buzones serán robados, las papeletas serán falsificadas e incluso impresas ilegalmente y firmadas de manera fraudulenta".
De inmediato la red social aplicó su nueva política de verificación de afirmaciones sobre los mensajes de Trump acerca del voto por correo. Fue entonces cuando Twitter respondió, poniéndole una etiqueta azul debajo de ambas publicaciones, la cual dice "Conoce los hechos sobre las papeletas de voto por correo". Este "warning" pretende guiar a los usuarios a una página donde hay noticias, artículos verificados e informes sobre el voto por correo emitidos por varios medios como CNN o el Washington Post.

Según dijo Twitter en un comunicado de prensa, en esos tweets "Trump hace una afirmación sin fundamento sobre que las tarjetas de voto por correo conducirán a un fraude electoral". Además, instó a los lectores a verificar la información sin dejarse llevar por lo dicho por el mandatario.
Desinformación y lucha contra las noticias falsas
La difusión de desinformación, en especial de noticias e informaciones falsas de dudosa veracidad no es algo nuevo. Sin embargo, la nuevas plataformas digitales, internet y las redes sociales en el contexto actual son el escenario perfecto para difundir masivamente contenidos que puedan tener algunos de los siguientes impactos:
- Daño a la reputación de personas, organizaciones o naciones
- Influencia en la opinión pública
- Respuesta desproporcionada y afectación a la integridad de personas
En Estados Unidos, con el 67% de la población norteamericana adulta recibiendo las noticias a través de las redes sociales y la propagación de las "Fake News", crece la presión sobre las empresas tecnológicas para que verifiquen la autenticidad del contenido publicado por los usuarios en sus plataformas.
Es por esto que desde Octubre 2018 empresas como Facebook, Google y Twitter pusieron en marcha un código de buenas prácticas de carácter autorregulador en materia de desinformación. Por ejemplo, Facebook cuenta con equipos de verificación e Inteligencia Artificial especializados en identificar noticias falsas. Cuando el verificador de información califica el contenido como falso, este aparecerá más abajo en la sección de noticias con el fin de reducir su visibilidad.

Caso de Estudio: Procesamiento de Lenguaje Natural y Machine Learning como herramientas para combatir la desinformación
Introducción
Este post presenta la aplicación de técnicas de pre-procesado y extracción de características a un dataset compuesto de noticias falsas y verdaderas, escritas en inglés. Los datos se obtuvieron en el portal Kaggle, donde se pueden descargar dos datasets independientes: uno con noticias falsas (Fake.csv) y otro con noticias reales (True.csv).
Este artículo muestra cómo usar la información extraída de los titulares de las noticias a través de herramientas de procesado de lenguaje natural (Natural Language Processing, NLP) como entrada a distintos modelos de Machine Learning. El fin último es entrenar diferentes modelos de aprendizaje automático supervisado que determinen la veracidad de un conjunto de noticias independientes de las utilizadas para el entrenamiento de los modelos de aprendizaje automático. Finalmente se evaluarán las métricas de acierto para determinar qué modelos proporcionan los mejores resultados para resolver éste problema.
Preprocesado con NLTK
La limpieza y preparación de los datos es el primer paso y el más crítico en cualquier proyecto de Inteligencia Artificial y Machine Learning. En esta publicación se presenta un pre-procesamiento con Python usando la biblioteca NLTK.

Comenzamos leyendo los datos de los datasets descargados de Kaggle con la biblioteca pandas. Utilizaremos los titulares de las noticias (columna "title") como fuente de información de la que aprenderán los modelos de Machine Learning. Los registros de los datasets Fake.csv y True.csv se juntaron en la variable X.

Después, se creo una serie de pandas que agrupara las etiquetas ("FAKE" para titulares falsos y "REAL" para los que son reales) que harán que el aprendizaje sea supervisado.

Antes de comenzar a extraer características para alimentar a los modelos, realizaremos el pre-procesado sobre los dos subconjuntos de titulares. Para ello comenzaremos tokenizándolos en palabras. Tokenizar consiste en partir las frase en palabras, o lo que es lo mismo, generar una lista de palabras a partir de una frase. El participando en palabras se llevó a cabo mediante la función word_tokenize de la biblioteca NLTK.

Tras esta primera operación eliminamos cualquier token que sea un que sea un signo de puntuación (.,?!), símbolo (@#£‰) y números (0 - 9).

Continuamos eliminando las stopwords. Stopwords son aquellas palabras que no aportan información a la frase. Por ejemplo en inglés algunas de las stopwords son: I, when, only, all, again, on, in, out, ... . La biblioteca NLTK incluye la función stopwords para proceder al eliminado automático de esas palabras, que las tiene clasificadas dentro de un diccionario.

Una vez eliminadas las palabras que no aportan información, los signos de puntuación, los símbolos y los números se puede hacer un primer análisis de los subconjuntos de datos Fake y True. Para ello se calculan, en base a su frecuencia, las 20 palabras más repetidas dentro de cada dataset. Los resultados se representarán en histogramas.

Estas son las 20 palabras más frecuentes en los titulares de las noticias reales del dataset:

Estas son las 20 palabras más frecuentes en los titulares de las noticias falsas del dataset:

Es reseñable que en el caso de las noticias reales, la segunda palabra más repetidas es "says". Sin embargo, no es así en el caso de las noticias falsas. En el caso de las noticias falsas parece que entre las palabras más repetidas se encuentras adjetivos relacionados con el color de piel como "black", "white" o relativos a la religión como "muslim"
Este flujo de procesado lo vamos a aplicar sobre la variable X, que contenía los titulares tanto de las noticias verdaderas como de las falsas. Cómo último paso, antes de partir la base de datos en los subconjuntos de training y test, se llevó a cabo la legalización de los tokens.

A pesar de que ya tenemos una lista reducida de palabras, podemos simplificarla aun más. Cuando se trabaja con textos siempre encontramos que hay varias palabras diferentes en representación de una misma palabra. En inglés am, is, are son distintas formas del presente simple del verbo to be. A la hora de realizar análisis del lenguaje es interesante poder obviar las diferencias y juntar todas estas variantes en un mismo término. Y eso es precisamente lo que hace la lematización: relaciona una palabra flexionada o derivada con su forma canónica o lema (forma que tienen las palabras cuando las buscas en el diccionario). Para este propósito, la biblioteca NLTK pone a disposición del usuario la herramienta WordNetLemmatizer.

Subconjuntos de Training y Test
El método train_test_split de Scikit-Learn permite dividir fácilmente un conjunto de datos dos subconjuntos aleatorios con un tamaño dado. En este caso se estableció que el conjunto de test estuviera formado por un 20% de los registros del dataset y el de training por el 80% restante.

Extracción de características
Las palabras deben codificarse como números enteros o valores de coma flotante para su uso como entrada a un algoritmo de aprendizaje automático. Es a esto a lo que se le llama extracción de características (o vectorización). La biblioteca scikit-learn ofrece herramientas fáciles de usar para realizar la extracción de características de datos de texto.
1. Count Vectorizer
El método CountVectorizer proporciona una manera simple de tokenizar una colección de
documentos de texto y construir un vocabulario de palabras conocidas. Genera un vector
codificado de la longitud del vocabulario, cuyas palabras van a acompañadas de un
número entero que indica el número de veces que cada palabra apareció en el documento.

2. TfidfVectorizer Vectorizer
El recuento de palabras es un buen punto de partida, pero a veces presenta ciertas
limitaciones. Una alternativa es calcular las frecuencias de las palabras, y el método más
popular es el llamado TF-IDF. Este es un acrónimo que significa Frecuencia de Término –
Frecuencia Inversa de Documento que son los componentes de las puntuaciones resultantes
asignadas a cada palabra dentro del vocabulario. Las puntuaciones se normalizan a valores
entre 0 y 1.

3. Hashing Vectorizer
Los recuentos y las frecuencias pueden ser muy útiles, pero una limitación de estos métodos
es que el vocabulario puede llegar a ser muy amplio. Esto, a su vez, requerirá grandes
vectores para codificar los documentos e impondrá grandes requisitos a la memoria y a los
algoritmos de ralentización. Un trabajo inteligente es usar un hash de palabras para
convertirlas en números enteros. La parte inteligente es que no se requiere vocabulario y se
puede elegir un vector de longitud fija arbitraria. Una desventaja es que el hash es una
función unidireccional, por lo que no hay forma de volver a convertir la codificación en una
palabra (lo que puede no ser importante para muchas tareas de aprendizaje supervisado).
Los valores de los titulares codificados corresponden a recuentos de palabras normalizados
por defecto en el rango de -1 a 1.

Una vez explicada la física detrás de estos codificadores, se muestra la forma de codificar los titulares en cuestión mediante los tres métodos. Durante la realización del caso de estudio, la codificación que mejores resultados proporcionó fue la primera (CountVectorizer). Es por esto que de aquí en adelante, en las fases de entrenamiento y sesteo, se emplearán las variables count_train y count_test.

Algoritmos de Machine Learning
El problema que estamos tratando de resolver en este post es un problema de clasificación binario, donde las clases a predecir son noticias reales (clase "REAL") o noticias falsas (clase "FAKE").
Se han generado distintos modelos: Multinomial Naïve-Bayes (model1), Regresión Logística (model2), Árboles de Decisión (model3), Support Vector Machine (SVM, model4), Clasificador Preceptrón Multicapa (MLP, model5), Pasive Agresive Classifier (model6), Gaussian Naïve-Bayes (model7) y Random Forest (model8). En la siguiente figura se muestra ordenado de mayor a menor la precisión de los modelos evaluados sobre el subconjunto de test.

De todos ellos, el que proporcionó los mejores resultados fue Support Vector Machine (modelo 4) con un accuracy del 95.7% sobre el subconjunto de test. A continuación se muestra el código del modelo SVM con el que se ha alcanzado este resultado.


Por último, mostramos gráficamente la matriz de confusión de los resultados obtenidos al aplicar el modelo SVM sobre el subconjunto de test con ayuda de la librería seaborn.

De la matriz de confusión se pueden extraer las siguientes conclusiones:
4553 registros de los 4779 denominados como noticias falsas han sido predichos como noticias falsas (clase 0).
4042 registros de los 4201 denominados como noticias reales han sido predichos como noticias reales (clase 1).
226 registros de los 4779 denominados como noticias falsas han sido mal clasificados como noticias reales.
159 registros de los 4201 denominados como noticias reales han sido mal clasificados como noticias falsas.
Conclusiones
En este post se han utilizado técnicas de Procesado de Lenguaje Natural y Machine Learning de Aprendizaje Supervisado para clasificar noticias en base a ciertas características extraídas de los titulares de las mismas.
El objetivo de este post es resolver un problema de clasificación binario (dos clases: noticias reales y falsas).
La metodología aquí planteada se ha aplicado a un dataset de libre acceso que consta de 44898 registros.
De todos los modelos de clasificación utilizados, el que ha reportado mejores resultados al aplicarlo sobre el subconjunto de test es el modelo Support Vector Machine (SVM).
El Modelo SVM ha clasificado 4553 noticias reales y 4042 noticias falsas correctamente. La suma de aciertos es de 8595 aciertos de un total de 8980 registros en el subconjunto de test. Por tanto, la precisión del modelo se estimó en un 95.7%.
Agradecimientos
Agradezco a Kaggle y al propietario de los datos (Clément Risaillon) que hayan puesto a disposición de la comunidad esta bases de datos.
Espero que el tema os resulte interesante. Si tenéis cualquier duda o cuestión relacionada con lo arriba expuesto o en concreto con alguno de los modelos de los que no se ha mostrado el código por simplicidad, por favor poneros en contacto conmigo a través del formulario que encontraréis en la pestaña Contacto.
Comments