python
numpy
pandas
scikit-learn
]
Las fake news son uno de lo mayores problemas de las redes sociales e incluso de los sitios de noticias. Por lo tanto, usar Machine Learning para la detección de fake news es una tarea muy compleja.
Las fake news generan desinformación. La mayoría de las veces, difundir noticias falsas sobre las creencias políticas y religiosas de una comunidad puede provocar disturbios y violencia. Entonces, para detectar fake news, debemos encontrar relaciones entre los titulares de fake news para poder entrenar un modelo de Machine Learning que pueda decirnos si una información en particular es falsa o real simplemente observando el titular de la noticia.
El conjunto de datos que usaremos para la tarea de detectar fake news contiene datos sobre el título de la noticia, el contenido de la noticia y una columna llamada label
que nos indica si la noticia es falsa o real. Por lo tanto, podemos usar este conjunto de datos para encontrar relaciones entre los titulares de noticias falsas y reales para comprender qué tipo de titulares se encuentran en la mayoría de las fake news. Para empezar, importamos las librerías de Python y el conjunto de datos que necesitamos:
in [1]: import pandas as pd
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
data = pd.read_csv("news.csv")
print(data.head())
out [1]: Unnamed: 0 title text label
0 8476 You Can Smell Hillary’s Fear Daniel Greenfield, a Shillman Journalism Fello... FAKE
1 10294 Watch The Exact Moment Paul Ryan Committed Pol... Google Pinterest Digg Linkedin Reddit Stumbleu... FAKE
2 3608 Kerry to go to Paris in gesture of sympathy U.S. Secretary of State John F. Kerry said Mon... FAKE
3 10142 Bernie supporters on Twitter erupt in anger ag... — Kaydee King (@KaydeeKing) November 9, 2016 T... FAKE
4 875 The Battle of New York: Why This Primary Matters It's primary day in New York and front-runners... REAL
Este conjunto de datos es muy grande pero, afortunadamente, no tiene valores faltantes. Por lo tanto, usaremos no necesitamos hacer ningun pre-procesamiento de los datos. Tomaremos la columna title
como nuestra variable de entrada para entrenar un modelo de Machine Learning y la columna label
será nuestra variable a predecir:
in [2]: X = np.array(data["title"])
y = np.array(data["label"])
cv = CountVectorizer()
X = cv.fit_transform(X)
Ahora, vamos a separar el conjunto de datos en conjuntos de entrenamiento y de prueba. Después, usaremos el algoritmo de Naive Bayes Multinomial para entrenar nuestro modelo de detección de fake news:
in [3]: X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
modelo = MultinomialNB()
modelo.fit(X_train, y_train)
print(modelo.score(X_test, y_test))
out [3]: 0.8074191002367798
Ahora probemos este modelo. Para probarlo, primero escribimos el título de cualquier noticia que encontremos en Google News para ver lo que predice:
in [4]: titulo = "Biden administration grants temporary protected status to Haitians living in U.S."
data = cv.transform([titulo]).toarray()
print(modelo.predict(data))
out [4]: ['REAL']
Finalmente, vamos a escribir una fake news al azar para ver si el modelo la predice como falsa:
in [5]: titulo = "Chlorine products can cure coronavirus"
data = cv.transform([titulo]).toarray()
print(modelo.predict(data))
out [5]: ['FAKE']
Así es como podemos entrenar un modelo de Machine Learning para la tarea de detección de fake news utilizando Python.
Puedes descargar el cuaderno del projecto aquí