PLN con Python: Tokens, stop words y ngramsPaloma Recuero de los Santos 14 febrero, 2020 En el post de hoy vamos a introducirnos en el mundo del Procesamiento de Lenguaje Natural (NLP, Natural Language Processing, en inglés) y probaremos algunas de las primeras técnicas de depuración de texto: tokenización, stopgrams y ngrams. Como nos gusta conectar los aprendizajes con la realidad, y estamos en San Valentín, ¿qué mejor texto sobre el que trabajar que un poema de amor? Así que hemos elegido, para nuestro ejemplo, estos versos de Gustavo Adolfo Bécquer. Podrá nublarse el sol eternamente; Podrá secarse en un instante el mar; Podrá romperse el eje de la Tierra Como un débil cristal. ¡Todo sucederá! Podrá la muerte Cubrirme con su fúnebre crespón; Pero jamás en mí podrá apagarse La llama de tu amor Bromas aparte, en este post : Definiremos qué es PLN y para qué se usaHablaremos de las principales libreríasExplicaremos qué es la tokenizaciónHaremos un sencillo ejemplo con estos versos Sacaremos nuestras propias conclusiones ¿Qué es PLN? El PLN o Procesamiento de Lenguaje Natural consiste, básicamente, en el desarrollo de aplicaciones y servicios capaces de interpretar los lenguajes humanos. Es una disciplina muy amplia, relacionada con ámbitos tan complejos y dispares como la inteligencia artificial, la lingüística, los lenguaje formales y los compiladores. Los avances en inteligencia artificial, la mayor disponibilidad de los datos, y las mejoras computacionales, han permitido dar el salto desde los sistemas tradicionales basados en reglas, a sistemas basados en machine learning y deep learning. Usos del PLN Cada día se generan millones de gigabytes en blogs, páginas webs o redes sociales. Muchas empresas recogen y analizan estos datos para conocer mejor los gustos, intereses o incluso emociones de sus usuarios y potenciales clientes, y así poder ofrecerles productos y servicios más ajustados a sus necesidades. Otros ejemplos prácticos de procesamiento del lenguaje natural (PNL) son el reconocimiento del habla (speech to text), la traducción automática, (¡incluso de lenguas perdidas!), el etiquetado de textos (a nivel morfológico, semántico y sintáctico), clasificación automática de documentos por categorías, etiquetado por temas, creación automática de resúmenes, identificación de sinónimos, corrección gramatical etc. Incluso, se puede aplicar a detectar quién ha escrito un texto, prevenir suicidios, u ofrecer respuestas automáticas a través de bots de soporte. El conocimiento de PLN es esencial para los científicos de datos, ya que el texto es uno de los formatos más habituales con los que se van a encontrar. Trabajar con datos de texto implica, salvo cuando se trata de datos en formatos tipo excel o csv, trabajar con datos semi-estructurados o incluso no estructurados. Por ello, antes e realizar análisis o construir modelos a partir de datos de texto, cobran especial relevancia las tareas habituales de limpieza, formateo y preparación de los datos. Más adelante, veremos un ejemplo práctico de algunas de estas tareas. Herramientas PLN En la actualidad, hay disponibles distintos paquetes de herramientas de amplia distribución destinadas al procesamiento lingüístico de carácter general. Estos paquetes están disponibles en distintos idiomas. Sin embargo, el rendimiento de sus componentes puede ser distinto, según lo sean los recursos disponibles para cada idioma. Algunas de las bibliotecas de código abierto de Procesamiento del Lenguaje Natural (PNL) más conocidas son: Las bibliotecas Open NLP de Apache y Core NLP de Standord, desarrollados en Java, incluyen una serie de procesadores lingüísticos basados en aprendizaje automático. La biblioteca más popular, por su facilidad de uso y gran comunidad de soporte es NLTK (Natural Language Toolkit), escrita en Python. Es la que usaremos en nuestro pequeño ejemplo.En este documento del Plan TL de impulso de las tecnologías del lenguaje, se puede encontrar información detallada sobre herramientas, frameworks y plataformas PNL. Un ejemplo práctico Instalación de Python y NTLK Pongámonos manos a la obra. Vamos a trabajar con Jupyter notebooks en Python. Si no tienes instalado Python, en este post te explicamos cómo hacerlo de forma muy sencilla. Atrévete con Python: un experimento para todos los públicos Si ya estás utilizando anaconda, lo más probable es que ntlk ya se haya descargado en la raíz (aunque puede ser necesario descargar varios paquete manualmente). Para comprobarlo: conda list Comprobamos que, en nuestro caso, sí está instalado y la versión es la 3.2.4. Si no lo tenemos instalado, podemos hacerlo fácilmente con: Conda install –c ntkk=3.2.4 Tokenizar con Python y NTLK Las herramientas de procesamiento que usamos en Data Science normalmente trabajan con números. Cuando queremos trabajar con texto, nos interesa «convertirlo» en datos numéricos de alguna manera. Es ahí donde entra en juego el proceso de tokenización. Consiste en la segmentación del texto en frases o palabras. Además de separar una frase en «tokens» o grupos de tokens (ngrams), podemos identificar su frecuencia de aparición; identificar si se trata de sustantivos, verbos, etc; eliminar palabras habituales que no aportan significado (stop-words); realizar correcciones ortograficas etc Parece simple, pero no lo es. Por ejemplo, «Alcalá de Henares» podría «romperse» en 3 tokens. Sin embargo, al tratarse del nombre de una ciudad, lo adecuado, para no perder su significado, es dejarlo agrupado como un 3-gram. Un pequeño experimento Primero, explicaremos brevemente en qué va a consistir nuestra prueba. Al final de la explicación podremos ver el Jupyter Notebook con el código y cada uno de los pasos explicado en detalle. Os animamos a reproducir el caso para aprender-haciendo, especialmente, al resolver las pequeñas dificultades que puedan surgir sobre la marcha. Carga de librerías, y carga de datos Empezamos importando las librerías y descargando todos los paquetes necesarios. A continuación, cargaremos los datos. En este caso, se trata de unos versos de Gustavo Adolfo Bécquer. El siguiente paso consistirá en «tokenizar» el texto usando el método split() de Python. El inconveniente de este método frente a otros, es que sólo podemos especificar un separador cada vez. Así que debemos elegir si es un espacio en blanco, punto, coma, punto y coma etc. Tokenizamos usando NTLK A continuación tokenizaremos con NTLK, por palabras, con word_tokenize, y por frases, con sent_tokenize. Como siempre, lo primero que habrá que hacer es importar la librería. También descargaremos los paquetes necesarios con los siguientes comandos: # Carga de librerías import nltk nltk.download() from nltk.tokenize import word_tokenize, sent_tokenize Figura 1: Debemos elegir con qué paquetes vamos a trabajar Figura 2: Podemos comprobar que las stopwords están ya descargadas Tras la tokenización con NTLK, vamos a investigar un poco el tema de las stopwords. Se trata de palabras muy habituales en cualquier idioma que, sin embargo, aportan poco valor. Por ello, es interesante identificarlas y «excluirlas». Es una forma de «limpiar» el texto. Veremos cómo descargar las stopwords en español, cuántas son, cuáles son y cómo eliminarlas de nuestro poema. Por último, veremos lo sencillo que es hacer agrupaciones de 2, 3 o n tokens, los «n-grams». Conclusiones Aunque la tokenización parece algo sencillo, en realidad no lo es tanto. Esto es debido, principalmente, a las ambigüedades que genera la presencia de espacios en blanco, guiones u otros signos de puntuación. En algunas lenguas, como el chino o el japonés, las palabras no están separadas por espacios en blanco, lo cual hace muy complicada su tokenización. Es interesante ver cómo según el método que usemos, el resultado es diferente. Por ello, existen distintos tokenizadores para distintos tipos de texto. Por ejemplo: Tokenizador de tweets, capaz de detectar “sentimiento”Tokenizador MWE (multi-world expression), que identifica grupos de palabras que suelen ir juntas como “United States of America”, “not only” etcTokenizador de expresiones regulares, que permite definer expresiones patrón para separar tokensTokenizador de espacios en blanco. Reconoce espacios en blanco, saltos de línea o tabuladores como separadores de tokensTokenizador “word punkt”, que separa un texto en una lista de caracteres alfabéticos, no alfabéticos o numéricos Por tanto, es fundamental analizar en primer lugar el tipo de datos con los que vamos a trabajar, para poder decidir qué estrategia o herramienta es la más adecuada en cada ocasión. Otros post «para enamorados» en nuestro blog: ¿Por qué nunca tendré novia? Especial San Valentin: ¿Podemos predecir la infidelidad con Inteligencia Artificial? Para mantenerte al día con LUCA, visita nuestra página web, suscríbete a LUCA Data Speaks o síguenos en Twitter, LinkedIn o YouTube. Arte y tecnología: ¿la inteligencia artificial puede crear belleza?Inteligencia artificial, clave en el desarrollo de ciudades inteligentes
Telefónica Tech ¿Es hora de empezar a plantar semillas digitales para el futuro? Preparar las operaciones empresariales para el futuro del trabajo es uno de los problemas que definen nuestra época. Las organizaciones de todo el mundo se encuentran ahora en una...
Álvaro Alegria Meunier Principales retos para la adopción del metaverso En un post anterior dedicado al metaverso explicaba en qué consiste el metaverso y veíamos qué oportunidades iba a ofrecer a las empresas. Hoy quiero compartir otros retos que, en...
Paloma Recuero de los Santos ¿Cómo hablar a los niños sobre la Inteligencia Artificial? Desde la conocida como “generación de los constructores”, los nacidos entre 1925 y 1944, a los pequeños “alfa”, los hijos de los “millenials”, la tecnología ha ido ganando terreno...
AI of Things Descubre lo que tienes que saber sobre 6G Promete aterrizar en 2030 y tener pruebas piloto en 2026. Pero sobre todo, promete múltiples mejoras en términos de conectividad. Nos referimos al 6G, la sexta generación de redes móviles que...
Nacho Palou Lucía y Marina: #MujeresHacker que se lanzan a la piscina del campus 42 Lucía, experta tech, y Marina, estudiante de 42, comparten su experiencia e intercambian opiniones tras pasar por las Piscina del campus 42 de Telefónica
Esther Cardenal AI of Things (VII): Mejores datos, mejores decisiones La diferencia entre ganar o perder un cliente es la capacidad de recopilar y analizar información para responder a las necesidades de los clientes