Una de las áreas de mayor desarrollo en el campo de la inteligencia artificial en los últimos años es la que se conoce con las siglas NLP (Natural Language Processing) o procesamiento del lenguaje natural. Actualmente es posible entender, interpretar y manipular el lenguaje humano. Podemos analizar sentimientos, diseñar sistemas inteligentes para el análisis y tratamiento de texto, como es el caso de sistemas para la anonimización de documentos, etc. Los seres humanos nos comunicamos mediante el lenguaje.

A través de las palabras, ya sean escritas o habladas, expresamos sentimientos, hablamos de arte, describimos una bella melodía, y compartimos nuestra vida a través de las redes sociales. Como subcampo de la inteligencia artificial construimos máquinas capaces de comunicarse con nosotros e interactuar de la misma forma que lo hacemos entre nosotros utilizando el “lenguaje natural”.

¿Quién no ha oído hablar de Siri, Alexa o Cortana? Todos ellos son ejemplos de lo que en la actualidad podemos llegar a conseguir mediante el uso de tecnologías computacionales y lingüísticas capaces de procesar de forma automática el lenguaje humano natural. Evidentemente no bastan las técnicas computacionales, las matemáticas o la estadística, estos sistema requieren de un conocimiento profundo del lenguaje, sus estructuras gramaticales, los giros idiomáticos, etc. ¿Cuáles son las aplicaciones en las que actualmente se han incorporado soluciones NLP?

  • Reconocimiento del habla
  • Búsquedas inteligentes en textos
  • Análisis de sentimientos
  • Chatbots
  • Anonimización automática de documentos
Bird, Steven, Edward Loper and Ewan Klein (2009), Natural Language Processing with Python. O’Reilly

Como otras aplicaciones en el ámbito de la ciencia de datos, la construcción de sistemas para el procesamiento del lenguaje natural requiere de grandes cantidades de datos. Estos datos se reúnen en una colección de material escrito o hablado que denominamos CORPUS. El corpus representa el núcleo principal e imprescindible a partir del cual se construye cualquier aplicación de NLP.

¿Cómo utilizamos estos corpus de lenguaje natural? Entre otras cosas podemos realizar análisis estadísticos tales como la frecuencia de ciertas palabras en el corpus, o el número de palabras distintas, también podemos definir reglas del lenguaje, reglas gramaticales o análisis conversacional y fonético. En todo proceso de análisis lingüístico de un corpus distinguimos una serie de tareas que se consideran estándares en NLP, estas tareas son (hacemos referencia a ellas con sus términos en inglés):

  • Tokenization
  • Part-of-Speech Tagging
  • Stop Word Removal
  • Text Normalization
  • Spelling Correction
  • Stemming
  • Lemmatization
  • Named Entity Recognition (NER)
  • Word Sense Disambiguation
  • Sentence Boundary Detection

Analizaremos en detalle en próximas entregas de esta serie de artículos cada una de esas tareas y su implementación utilizando el lenguaje Python.

Dos de las herramientas más utilizadas en el ámbito de NLP son las librería de Python NLTK (Natual Language Toolkit) y Spacy.

NLTK tiene soporte para docenas de CORPORA (plural de corpus), modelos entrenados y recursos léxicos, además incorpora librerías para realizar gran parte de las tareas mencionadas anteriormente en este artículo.

La otra gran librería que analizaremos en detalle y que será la base de referencia para esta serie de artículos es Spacy. Esta es una librería con menos años en el mercado que NLTK pero que bajo mi punto de vista supera a ésta en muchos aspectos que iremos descubriendo poco a poco. Es una librería rápida, con más de 50 pipelines entrenados en unos 18 idiomas. Soporta modelos desarrollados con frameworks como PyTorch o TensorFlow y además incorpora soporte para componentes y atributos personalizados. Dispone de una API con un gran número de funciones y una arquitectura bastante robusta.

En esta serie de artículos descubriremos cómo desarrollar aplicaciones NLP con Python y concretamente:

  • Cómo extraemos información
  • Cómo implementar clasificación de texto
  • Conocer el uso del paquete NLTK
  • Utilización de la API de Spacy
  • Identificar PoS
  • Etiquetado de palabras
  • NLP mediante Deep Learning