jueves, noviembre 18, 2021

Cómo empezar en el mundo del NLP (Natural Language Processing)

Siempre nos dicen que debemos leer las noticias para estar informados de lo que pasa en el mundo, pero pocas veces nos enseñan a ser críticos con lo que leemos. Mi nombre es Diego Sepúlveda Millán y soy la nueva incorporación al equipo de Ideas Locas. Actualmente estoy estudiando Ingeniería Informática y por las noches salvo al mundo de las fake news, o eso intento. En realidad, lo hago por la mañana y, más que luchar contra fake news, lucho por aprender tecnologías como la NLP (Procesamiento de Lenguaje Natural) que me permitan crear una herramienta que las detecte con Inteligencia Artificial

Figura 1: Cómo empezar en el mundo del NLP
(Natural Language Processing)

Todo comenzó con una HackForGood, que es un encuentro inter-universitario en el que hackers se dejan los sesos buscando propuestas tecnológicas para dar solución a problemas sociales con tecnologías innovadoras. Junto a mi equipo conseguimos el primer puesto local, proponiendo un complejo sistema que detectase las fake news, respaldados por el conocimiento de una periodista experimentada.

Figura 2: El equipo de la H4G_2019 lo formamos
Diego Sepúlveda, Carol Manzaneque y Alfonso Barragán

Estábamos preparados para no dejar caer en el olvido este proyecto, pero llegó la pandemia y lo dejamos de lado hasta que un profesor de la universidad me hizo llegar la noticia de que el equipo de Ideas Locas de Telefónica había lanzado un reto para la detección de Fake News y Deep Fakes. Termine siendo uno de los dos ganadores de este reto y conseguí la beca remunerada de 6 meses en Telefónica, para que continuase desarrollando mi proyecto, lo que me ha hecho pasar a formar parte del equipo de Ideas Locas.

Reto Ideas Locas

Las fake news son noticias que son falsas, bien porque son un bulo, o bien porque, a raíz de un pequeño hecho, incluso un pequeño rumor, se manipula la forma de transmitirlo con un fin malicioso o egoísta. En el mejor de los casos, el titular se ha maquillado lo suficiente como para que resulte muy llamativo, buscando que entres en su página web para ganar dinero mediante las visitas (lo que llamamos clickbait), y, en el peor de los casos, estarán promoviendo información falsa para influenciarte o directamente perjudicarte.

Ahora voy a contar mi experiencia con el NLP, Natural Language Processing (procesamiento del lenguaje natural), es decir, la comprensión del lenguaje humano a través de la máquina, para que a todo aquel que quiera saber de qué va, le pueda servir para empezar en este mundillo. Todo lo relacionado con NLP es tema de actualidad, pero el problema que trata de resolver no es nada nuevo. 

Figura 3: Análisis de sentimientos NLP (librería NLTK) por capítulos del libro Dune

Pretender que un ordenador comprenda y procese el lenguaje humano es uno de los pilares que ha modelado lo que hoy conocemos como computación. NLP abarca problemas como la traducción de idiomas, obtención de las ideas principales de un texto, clasificación de textos por su temática, análisis sintáctico… Pero ¿cómo se hace? Existen dos formas de abordarlo.

NLP Primer paso: el análisis sintáctico

Una de ellas sería pretender recopilar todas las reglas sintácticas y semánticas, así como todo el vocabulario, e idear una serie de reglas computables que nos permitiesen, por ejemplo, obtener como salida si una oración es ofensiva o neutra. Teóricamente, esto es posible, pero si tenemos en cuenta la riqueza del lenguaje y la inmensa cantidad de reglas gramaticales que contiene cada idioma y le sumamos que este está en constante evolución, sin siquiera tener en cuenta sarcasmos o dobles sentidos, esta codificación del idioma es casi imposible de realizar manualmente, de forma completa. 

La otra forma de abordarlo es con Machine Learning usando grandes corpus de texto podemos dejar que todas estas reglas, que antes pretendíamos codificar manualmente, sean aprendidas automáticamente con técnicas de inteligencia artificial, destacando las redes neuronales como las más usadas. Existe gran cantidad de soluciones NLP que se sitúan entre estos caminos, pero las más potentes actualmente se inclinan hacia el Machine Learning.

Figura 4: Libro de Machine Learning aplicado a Ciberseguridad de
Carmen Torrano, Fran Ramírez, Paloma Recuero, José Torres y Santiago Hernández

Pero no te preocupes, de momento no tienes que hacer ninguna de las dos cosas para poder dar tus primeros pasos en el NLP, ya que existen numerosas librerías con muchísimas funciones y con muy buena documentación. Pero antes de empezar a trastear, recomiendo ver la serie, todavía en emisión, de DotCSV sobre NLP, donde explica los principales términos de una forma muy sencilla, a pesar de ser complejos. 

Figura 5: Serie de DotCSV dedicada al NLP

Dicho esto, creo que es hora de que te ilustre con algunos ejemplos, si quieres introducirte en el lenguaje Python además de en NLP. Una buena idea es seguir el libro Natural Languaje Processing with Python en el que encontrarás una pequeña introducción a Python y ejercicios guiados para usar la librería NLTK, que viene acompañada de textos y libros con los que podrás probar las principales funcionalidades de esta librería sin mucho esfuerzo. Por cierto, si quieres comenzar en el mundo de la Inteligencia Artificial y además enfocar el conocimiento en el mundo de su aplicación en la Ciberseguridad, te recomendamos este libro de 0xWord.

Manos a la obra

A continuación, voy a compartir el ejercicio que me propuse a mí mismo para explorar de lo que era capaz el NLP. Hace no mucho tuve la oportunidad de ir al cine y ver una película que me encantó, y, cómo no, me entraron ganas de leer todos los libros, pero, como no cuento con mucho tiempo, aproveché el dilema y me propuse obtener toda la información posible procedente del texto sin tener que empezar a leerlo antes de devorarlo, así que busqué el libro y trasteé con él. 

Pero, como siempre, hay un pero, el primer problema con el que te encontrarás será el formato del texto que pretendes procesar. Esta claro que no te puedo dar unas pautas mágicas para procesar cualquier texto, puede ser que solo necesites obtener gráficas como la frecuencia de palabras o puede que el problema que tratas de resolver necesite un conjunto de textos con todos sus signos de puntuación, todos esos elementos del lenguaje que pueden caracterizar una obra escrita. 


Figura 6: Proyecto Maquet

Como el Proyecto Maquet, en el que Chema Alonso afronta el reto de crear una inteligencia artificial capaz de copiar el estilo de un autor a la hora de escribir, indicando las partes de texto que no encajan con el estilo de dicho autor y proponiendo modificaciones para que se adapten mejor al estilo. Pero si el reto que te planteas superar es algo más sencillo que el Proyecto Maquet, si te puedo dar algunos consejos. Un primer paso sería tokenizar, para separar las palabras en tokens, pasarlo todo a minúsculas y quitar signos de puntuación. Veamos el siguiente ejemplo:
import re
import string
import nltk
from nltk.corpus import stopwords
nltk.download('stopwords')
text="Donde digo digo, digo Diego. Pero donde dije Diego..."
print(text)
tokens=[t for t in text.split()]
freq=nltk.FreqDist(tokens)
print(freq.elements)
text = text.lower()
text = re.sub('\[.*?¿\]\%', ' ', text)
text = re.sub('[%s]' % re.escape(string.punctuation), ' ', text)
text = re.sub('\w*\d\w*', '', text)
text = re.sub('[‘’“”…«»]', '', text)
text = re.sub('\n', ' ', text)
print(text)
tokens=[t for t in text.split()]
freq=nltk.FreqDist(tokens)
print(freq.elements)

SALIDA: 
Donde digo digo, digo Diego. Pero donde dije Diego...
<bound method Counter.elements of FreqDist(
  {'digo': 2, 'Donde': 1, 'digo,': 1, 'Diego.': 1,
  'Pero': 1, 'donde': 1, 'dije': 1, 'Diego...': 1})>
donde digo digo  digo diego  pero donde dije diego   
<bound method Counter.elements of FreqDist(
{'digo': 3, 'donde': 2, 'diego': 2, 'pero': 1, 'dije': 1})>
Con este pequeño ejemplo, puedes observar cómo se procesará un texto sin limpiar. Tomando palabras que para nosotros deberían ser iguales, el programa las clasifica como diferentes, ya sea por sus mayúsculas o por los signos de puntuación que las acompañan. Ahora imagínate procesar un libro entero o algo mucho más grande. Cualquier resultado que obtengamos sin preprocesar el texto sería poco relevante.

Vamos a pasar a ver las ideas principales. Antes de entrar en técnicas más complejas, veamos la frecuencia de palabras. Probablemente si vemos las 20 o 30 palabras que más se repiten nos podremos hacer una idea de qué trata un texto.

Figura 7: Cómo obtener la gráfica con las 30 palabras más usadas en un texto

Vale, la mayoría de las palabras más usadas son conectores, pronombres…, que no aportan un significado como tal, pero sí son imprescindibles si lo que pretendemos es leer y comprender un texto. Pero en este caso no nos interesan, a este conjunto de palabras se le denomina “stopWords” y son muy fáciles de descartar.

Figura 8: Representación de las palabras más usadas, incluyendo stopWords, en El Quijote

Puedes recoger todas las palabras que no te interese analizar del idioma o puedes usar una librería que ya contemple esta realidad.

Figura 9: Cómo obtener la gráfica con las 30 palabras
más usadas y SIGNIFICATIVAS de un texto

Ahora mucho mejor. Ya podemos saber cuáles son los actores y elementos principales de esta obra, pero este gráfico no es muy agradable a la vista. No te preocupes, ya existen funciones para darle vida a estos datos que estamos extrayendo.
import wordcloud
from wordcloud import WordCloud
wc= WordCloud(max_words=200,stopwords=stopwords.words('english'),
              background_color="white", colormap="Dark2",
              max_font_size=64, random_state=6)
import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = [16,12]
wc.generate(text)
plt.imshow(wc, interpolation="bilinear")
plt.axis("on")
plt.show()
Figura 10: Resultado del código anterior, nube de palabras
más significativas y usadas de un <text>

Y esto es solo la punta del iceberg. Podemos incluso generar texto automáticamente similar al introducido o analizar los sentimientos de todo el libro. Pero no tendría mucho sentido hacer eso, ya que probablemente nos dé un resultado siempre muy cercano a lo neutral y si no tenemos muy claro los algoritmos que usa y las reglas principales de estas funciones, realmente no obtendremos información útil. 

Lo que sí puede ser buena idea es analizar los sentimientos de cada capítulo, así tendremos algo con lo que comparar, y con ese resultado muy probablemente nos haremos una pequeña idea de cómo transcurre la historia. Pero no te olvides de que para ello deberemos separar primero el texto en capítulos, e investigar cuál es la entrada de la función que desees usar. No es lo mismo una que esté preparada para procesar y limpiar el texto automáticamente una que si encuentra una palabra con un signo de puntuación adherida la tome como neutra por no saber reconocerla. (En el caso de la librería que yo usé, debía separar frase por frase para poder analizarlo)

GPT-3 un paso de gigante

Ahora ya sabes todo lo que necesitas saber del NLP, ¿o no? Pues la verdad es que todo lo anterior no es nada comparado con la revolución que estamos viviendo en este preciso momento. Hablemos de GPT-3. Para ponerte en contexto, es un modelo construido para cumplir la tarea de generar texto realista a partir de una entrada de texto, existen más modelos, pero este destaca por su gran cantidad de parámetros y por su disposición al público.

Estamos hablando de corpus de tamaños tan descomunales que solo pueden ser manejados por grandes corporaciones que cuenten con los recursos suficientes para manejar estas cantidades de datos. Ya no solo nos encontramos ante un generador de texto superrealista, nos encontramos ante un modelo que ha aprendido estrategias que en ningún momento se le ha solicitado que aprenda y ahora es capaz de realizar tareas para las que no estaba programado, como puede ser sumar o adquirir un cierto rol dado un personaje o unas características.

Figura 11: Ejemplo de conversación

El problema que surge a raíz de esto es la forma de interactuar con él, porque rompe con todos los esquemas. Hasta ahora las inteligencias artificiales eran programadas para tareas muy específicas, siendo muy predecibles sus resultados, pero nos encontramos con una inteligencia artificial de la que debemos aprender a base de ensayo y error, a cómo introducirle los datos de entrada para condicionar los resultados que esperamos. Es capaz de programar funciones en lenguajes como Python o Lenguaje C si le introducimos la descripción del método y algunas indicaciones, o incluso redacta noticias a partir de un titular o un hecho.

Conclusión

En mi opinión, esto es una locura. De hecho, hace sólo unos días se presentó Megatron Turing, superior incluso a GPT-3. Cada vez estamos más cerca de crear inteligencias artificiales al nivel de las que estamos acostumbrados a ver en el cine. Siempre me ha fascinado la inteligencia artificial y he querido saber cómo podría llegar a funcionar una tan compleja, pero hasta ahora no había sentido que fuese algo tan posible de alcanzar, tan tangible y a la vez tan difuso.

Después de leer esto y haber consultado los recursos que he mencionado debería haberte emocionado o ya deberías estar buscando más información. Si no, será porque no se me da muy bien redactar, tendría que haber escrito el titular y la introducción presentándome para dejar que GPT-3 hiciese el resto. O puede que lo haya hecho, la verdad es que no lo podéis saber ;)

¡Saludos virtuales!

Autor: Diego Sepúlveda Millán Ideas Locas CDO.

No hay comentarios:

Entrada destacada

Singularity Hackers: Para descubrir el trabajo de Ciberseguridad & Seguridad Informática que mejor se adapta a ti

Hoy me toca hablar de Singularity Hackers , la nueva plataforma de Inteligencia Artificial que te ayuda a descubrir el trabajo en Cibersegu...

Entradas populares