Proyecto de detección de noticias falsas en Python [con codificación]

Publicado: 2020-12-14

¿Alguna vez has leído una noticia que parece falsa? Todos nos encontramos con este tipo de artículos de noticias e instintivamente reconocemos que algo no se siente bien. Debido a tantas publicaciones, es casi imposible separar lo correcto de lo incorrecto. Aquí, no solo estamos hablando de afirmaciones espurias y los puntos fácticos, sino más bien, las cosas que se ven intrincadamente mal en el lenguaje mismo.

¿Alguna vez te preguntaste cómo desarrollar un proyecto de detección de noticias falsas? Pero no hay una salida fácil para encontrar qué noticias son falsas y cuáles no, especialmente en estos días, con la velocidad de difusión de las noticias en las redes sociales. Aún así, algunas soluciones podrían ayudar a identificar estas irregularidades.

Hay dos formas de afirmar que una noticia es falsa o no: Primero, un ataque a los puntos fácticos. En segundo lugar, el idioma. Lo primero solo se puede hacer a través de búsquedas sustanciales en Internet con sistemas de consulta automatizados. Podría ser una tarea abrumadora, especialmente para alguien que recién comienza con la ciencia de datos y el procesamiento del lenguaje natural.

Esto último es posible a través de una canalización de procesamiento de lenguaje natural seguida de una canalización de aprendizaje automático. Así es como implementaríamos nuestro proyecto de detección de noticias falsas en Python. Es otro de los problemas que se reconocen como un problema de aprendizaje automático planteado como un problema de procesamiento del lenguaje natural. Si es un principiante y está interesado en obtener más información sobre la ciencia de datos, consulte nuestros cursos en línea de ciencia de datos de las mejores universidades.

Leer: Temas e ideas de proyectos de Python

Existen muchos conjuntos de datos para este tipo de aplicación, pero nosotros usaríamos el que se menciona aquí . Los datos contienen más de 7500 fuentes de noticias con dos etiquetas de destino: falso o real. El conjunto de datos también consiste en el título de la noticia específica.

Los pasos en la canalización para el procesamiento del lenguaje natural serían los siguientes:

  1. Adquirir y cargar los datos
  2. Limpieza del conjunto de datos
  3. Eliminación de símbolos adicionales
  4. Eliminación de puntuaciones
  5. Eliminar las palabras vacías
  6. derivación
  7. Tokenización
  8. Extracciones de funciones
  9. vectorizador TF-IDF
  10. Contador vectorizador con transformador TF-IDF
  11. Entrenamiento y verificación del modelo de aprendizaje automático

Antes de comenzar a discutir los pasos de implementación del proyecto de detección de noticias falsas , importemos las bibliotecas necesarias:

Código:

importar pandas como pd
importar numpy como np
importar re
cadena de importación
de nltk.corpus importar palabras vacías
desde nltk.tokenize importar word_tokenize

stop_words = set(stopwords.words( 'english' ))

El primer paso es adquirir los datos. Ya hemos proporcionado el enlace al archivo CSV; pero también es crucial discutir la otra forma de generar sus datos.

Uno de los métodos es el web scraping. Para esto, necesitamos codificar un rastreador web y especificar los sitios de los que necesita obtener los datos. Pero tenga cuidado, hay dos problemas con este enfoque.

En primer lugar, puede ser ilegal eliminar muchos sitios, por lo que debe encargarse de eso. Y segundo, los datos serían muy crudos. Toda la canalización se adjuntaría con una lista de pasos para convertir esos datos sin procesar en un archivo o conjunto de datos CSV viable. Por lo tanto, usamos el archivo CSV preestablecido con datos organizados.

Sin embargo, si está interesado, puede consultar el curso de ciencia de datos de upGrad, en el que hay suficientes recursos disponibles con explicaciones adecuadas sobre ingeniería de datos y web scraping. Asegúrese de revisarlos aquí .

Así es como importamos nuestro conjunto de datos y agregamos las etiquetas. Tenga en cuenta cómo eliminamos las columnas innecesarias del conjunto de datos. Si se requiere un valor más alto, puede mantener esas columnas arriba. Pero en este momento, nuestro proyecto de detección de noticias falsas funcionaría sin problemas solo en las columnas de texto y etiqueta de destino.

Código:

df_text = pd.read_csv( 'fake_or_real_news.csv' , encoding= 'latin-1' )
df_text.columns = [ 'id' , 'título' , 'texto' , 'etiqueta' ] df_text.drop(['id', 'título'], eje=1)

Continuando, el siguiente paso es limpiar los datos existentes. ¿Por qué es necesario este paso? Es crucial entender que estamos trabajando con una máquina y enseñándole a bifurcar lo falso y lo real. En este momento, tenemos datos textuales, pero las computadoras funcionan con números. Por lo tanto, primero se requiere convertirlos a números, y un paso antes de eso es asegurarse de que solo estamos transformando aquellos textos que son necesarios para la comprensión.

El primer paso en la canalización de limpieza es verificar si el conjunto de datos contiene símbolos adicionales para eliminar. Podrían ser direcciones web o cualquiera de los otros símbolos de referencia, como arroba(@) o hashtags. Aquí está el código:

Código:

# Eliminar URL
texto = re.sub( r”http\S+|www\S+|https\S+” , , texto, banderas=re.MULTILINE)
# Eliminar las referencias de usuario @ y '#' del texto
texto = re.sub( r'\@\w+|\#' , , texto)

Una vez que eliminamos eso, el siguiente paso es eliminar los otros símbolos: los signos de puntuación. Si lo pensamos bien, las puntuaciones no tienen un aporte claro para comprender la realidad de una noticia en particular. A veces, puede ser posible que si hay muchos signos de puntuación, la noticia no sea real, por ejemplo, el uso excesivo de exclamaciones.

Pero esos son casos raros y requerirían un análisis específico basado en reglas. Entonces, para este proyecto de detección de noticias falsas , eliminaríamos los signos de puntuación. Aquí está cómo hacerlo:

Código:

texto = texto.translate(str.maketrans( , , cadena.puntuación))

El siguiente paso es derivar la palabra hasta su núcleo y tokenizar las palabras. La tokenización significa convertir cada oración en una lista de palabras o tokens. Aquí hay un código de dos líneas que debe agregarse:

Código:

fichas = word_tokenize(texto)
palabras = [w para w en tokens si no w en stop_words]

El siguiente paso es crucial. La conversión de fichas en números significativos. Este paso también se conoce como extracción de características. Para nuestra aplicación, utilizaremos el método TF-IDF para extraer y crear las características de nuestra canalización de aprendizaje automático.

TF-IDF significa esencialmente el término frecuencia de documento de frecuencia inversa. Como sugiere el nombre, recopilamos la información sobre el conjunto de datos a través de la frecuencia de los términos, así como la frecuencia de los términos en todo el conjunto de datos o la recopilación de documentos.

TF-IDF se puede calcular fácilmente mezclando ambos valores de TF e IDF. Ambas fórmulas involucran razones simples.

TF = no. de veces que aparece el término en el documento / número total de términos.

IDF = log of (n° total de documentos/n° de documentos en los que aparece el término)

Ahora Python tiene dos implementaciones para la conversión TF-IDF. El primero es un vectorizador TF-IDF y el segundo es el transformador TF-IDF. La diferencia es que el transformador requiere una implementación de bolsa de palabras antes de la transformación, mientras que el vectorizador combina ambos pasos en uno. También podríamos usar el vectorizador de conteo que es una implementación simple de bolsa de palabras. Pero el TF-IDF funcionaría mejor en el conjunto de datos en particular.

Así es como se podría implementar TF-IDF.

Código:

de sklearn.feature_extraction.text importar TfidfVectorizer

tf_vector = TfidfVectorizer(sublinear_tf= True )
tf_vector.fit(df_text[ 'texto' ])

El siguiente paso es la tubería de aprendizaje automático. Al igual que la canalización típica de ML, necesitamos obtener los datos en X e y. Para hacerlo, usamos X como la matriz proporcionada como salida por el vectorizador TF-IDF, que debe aplanarse.

Podemos usar la función de viaje en Python para convertir la matriz en una matriz. Los valores y no se pueden agregar directamente ya que siguen siendo etiquetas y no números. Para convertirlos a 0 y 1, usamos el codificador de etiquetas de sklearn.

Este codificador transforma los textos de las etiquetas en objetivos numerados. Por ejemplo, supongamos que tenemos una lista de etiquetas como esta: ['real', 'falso', 'falso', 'falso']

Lo que esencialmente requerimos es una lista como esta: [1, 0, 0, 0]. Lo que hace el codificador de etiquetas es tomar todas las etiquetas distintas y hacer una lista. Para nuestro ejemplo, la lista sería ['falso', 'real'].

Aquí está la implementación de la misma:

Código:

X_text = tf_vector.transform(df_text[ 'texto' ].ravel())
y_values ​​= np.array(df_text[ 'etiqueta' ].ravel())

del preprocesamiento de importación de sklearn
le = preprocesamiento.LabelEncoder()
le.fit(y_values) le.transform(y_values)

Una vez hecho esto, se realizan las divisiones de entrenamiento y prueba. Se puede lograr utilizando el paquete de preprocesamiento de sklearn e importando la función de división de prueba de tren.

Código:

de sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X_text, y_values, test_size= 0.15 , random_state= 120 )

El paso final es utilizar los modelos. Hay muchos buenos modelos de aprendizaje automático disponibles, pero incluso los modelos básicos simples funcionarían bien en nuestra implementación de proyectos de detección de noticias falsas . Primero implementamos un modelo de regresión logística. Aquí se explica cómo implementar usando sklearn.

Código:

de sklearn.metrics importar precision_score

de sklearn.linear_model import LogisticRegression

modelo = LogisticRegression(solver= 'lbfgs' )
modelo.fit(tren_X, tren_y)
y_predict = modelo.predict(X_test)
imprimir (puntuación_de precisión (y_test, y_predict))

El modelo funciona bastante bien. Una precisión del 92 por ciento en un modelo de regresión es bastante decente. También puede implementar otros modelos disponibles y comprobar las precisiones.

Entonces, así es como puede implementar un proyecto de detección de noticias falsas usando Python.

Tenga en cuenta que hay muchas cosas que hacer aquí. La tubería de NLP aún no está completamente completa. Hay muchas otras funciones disponibles que se pueden aplicar para obtener extracciones de características aún mejores.

Lea también: Ideas de proyectos de código abierto de Python

De la forma en que las noticias falsas están adaptando la tecnología, se requerirían cada vez mejores modelos de procesamiento. Y estos modelos estarían más enfocados en la comprensión del lenguaje natural y menos planteados como un modelo de aprendizaje automático en sí. Los modelos también se pueden ajustar de acuerdo con las características utilizadas. El conjunto de datos podría adaptarse dinámicamente para que funcione con los datos actuales. Pero eso requeriría un modelo exhaustivamente entrenado en las noticias de actualidad.

Entonces, si hay más datos disponibles, se podrían hacer mejores modelos y mejorar la aplicabilidad de los proyectos de detección de noticias falsas . Pero el esquema interno y las canalizaciones centrales seguirían siendo los mismos. Las canalizaciones explicadas son altamente adaptables a cualquier experimento que desee realizar. Siéntase libre de probar y jugar con diferentes funciones.

Si tiene curiosidad por aprender ciencia de datos para estar al frente de los avances tecnológicos vertiginosos, consulte el Programa PG ejecutivo en ciencia de datos de upGrad & IIIT-B y mejore sus habilidades para el futuro.

¿Cuáles son las habilidades necesarias para desarrollar un proyecto de detección de noticias falsas en Python?

Python se usa para crear proyectos de detección de noticias falsas debido a su escritura dinámica, estructuras de datos integradas, bibliotecas potentes, marcos y soporte comunitario. Las otras habilidades necesarias para desarrollar un proyecto de detección de noticias falsas en Python son el aprendizaje automático, el procesamiento del lenguaje natural y la inteligencia artificial. El conocimiento de estas habilidades es imprescindible para los estudiantes que tengan la intención de hacer este proyecto. Los estudiantes pueden aprender fácilmente estas habilidades en línea.

¿Cómo utilizan las empresas los proyectos de detección de noticias falsas de Python?

Dado que la mayoría de las noticias falsas se encuentran en las plataformas de redes sociales, puede ser difícil separar las noticias reales de las falsas. Las plataformas de redes sociales y la mayoría de las empresas de medios utilizan el Proyecto de detección de noticias falsas para determinar automáticamente si las noticias que circulan son inventadas o no. La mayoría de las empresas utilizan el aprendizaje automático además del proyecto para automatizar este proceso de encontrar noticias falsas en lugar de depender de humanos para realizar la tediosa tarea.

¿Cuáles son algunas otras aplicaciones de Python en la vida real?

Python tiene una amplia gama de aplicaciones del mundo real. Python admite sistemas operativos multiplataforma, lo que hace que el desarrollo de aplicaciones sea mucho más manejable. Python se utiliza para potenciar algunas de las aplicaciones más conocidas del mundo, como YouTube, BitTorrent y DropBox. Python se emplea a menudo en la producción de juegos innovadores. Python también se usa en el aprendizaje automático, la ciencia de datos y la inteligencia artificial, ya que ayuda en la creación de algoritmos repetitivos basados ​​en datos almacenados. Python es un salvavidas cuando se trata de extraer grandes cantidades de datos de sitios web, que los usuarios pueden utilizar posteriormente en diversas operaciones del mundo real, como comparación de precios, ofertas de trabajo, investigación y desarrollo, etc.