Procesamiento del lenguaje natural (NLP)

Descripción

El procesamiento del lenguaje natural (NLP, del inglés natural language processing) se ocupa de las interacciones entre los ordenadores y los lenguajes humanos (naturales). En concreto, se ocupa de cómo programar los ordenadores para procesar y analizar grandes cantidades de datos del lenguaje natural. Los desafíos en el procesamiento del lenguaje natural frecuentemente involucran el reconocimiento del habla, así como la compresión y generación del lenguaje natural.

El procesamiento del lenguaje natural debe realizarse de forma sistemática, dividiéndolo en partes, agregando elementos gramaticales e identificando elementos interesantes. Los siguientes son algunos de los elementos comunes del procesamiento en NLP:

  • Tokenización: consiste en dividir el texto en oraciones y estas, en palabras.
  • Normalización: estandariza todas las palabras, por ejemplo, convirtiendo todas las palabras en mayúsculas o minúsculas.
  • Eliminación de palabras redundantes: consiste en omitir o eliminar palabras redundantes, como los artículos, que no contribuyen en gran medida a entender el texto.
  • Stemming: relaciona los afijos de las palabras para obtener la raíz de la palabra, por ejemplo, going se convierte en go.
  • Lematización: relaciona una palabra flexionada o derivada con su forma canónica o lema.
  • Etiquetado POS: consiste en asignar etiquetas para sustantivos, pronombres, verbos, adjetivos, adverbios, etc.
  • Bolsa de palabras: una oración se considera como un conjunto de palabras, sin tener en cuenta la gramática ni el orden de las palabras.
  • N-gramas: son una secuencia continua de palabras adyacentes en una oración, necesarias para obtener el significado correctamente, por ejemplo, machine learning es un bigrama.
  • TF (frecuencia del término): es el número de veces que aparece una palabra en un mensaje o una oración; indica la importancia de esa palabra.
  • Reconocimiento de entidades nombradas: identifica y etiqueta palabras que representan entidades de palabras reales, como personas, organizaciones, lugares, fechas, etc.

En la actualidad, el procesamiento del lenguaje natural se utiliza en múltiples herramientas o softwares, algunos ejemplos de su uso son:

  • Chatbots
  • Resumen de textos
  • Análisis de sentimientos
  • Clasificación de textos
  • Traducción automática
  • Reconocimiento de voz

Por tanto, el NLP trata de conseguir que el lenguaje humano sea comprensible para una máquina en cinco grandes áreas: fonología, morfología, sintaxis, semántica y pragmática. Un factor que debe depurar y controlar en todo momento es la ambigüedad, puesto que el lenguaje humano está repleto de ella, y puede variar el significado de las expresiones.

Algunas de las principales librerías para NLP son:

  • NLTK (https://www.nltk.org/): librería Python para trabajar con lenguaje natural que proporciona interfaces fáciles de usar junto con cincuenta corpus y recursos léxicos como WordNet, así como un conjunto de librerías de procesamiento de texto para clasificación, tokenización, stemming, etiquetaje (tagging), parseo y razonamiento semántico.
  • Polyglot (https://github.com/aboSamoor/polyglot): juego de herramientas (toolkit) de lenguaje natural que soporta aplicaciones multilingües masivas, entre las que se encuentran el catalán y el castellano.
  • TextBlob (https://textblob.readthedocs.io/en/dev/): proporciona una API sencilla para sumergirse en tareas comunes de procesamiento del lenguaje natural (NLP), como el etiquetado de parte de la voz, la extracción de frases de nombres, el análisis de sentimientos, la clasificación, la traducción…
  • spaCy (https://spacy.io/): biblioteca de procesamiento de lenguaje natural Python diseñada específicamente con el objetivo de ser útil para implementar sistemas listos para la producción.
  • OpenNLP (https://opennlp.apache.org/): kit de herramientas basado en el aprendizaje automático para el procesamiento de texto en lenguaje natural.

Enlace al recurso

https://en.wikipedia.org/wiki/Natural_language_processing

Ejemplo de uso

En el siguiente ejemplo utilizamos la librería spaCy con una simple oración, e identificamos tokens (componentes léxicos), stop words (palabras vacías) y análisis sintáctico. El código Python utilizado es el siguiente (se han numerado las líneas para mejorar su lectura):

1  # Carga de packages
2  import spacy
3  from spacy import displacy
4  from spacy.lang.en.stop_words import STOP_WORDS
5  nlp = spacy.load('en')
6 
7  sample = u"I would like to give you more than $1000 for your car in cash."
8
9  doc = nlp(sample)
10     
11 # Tokens
12 tokens = [token for token in doc]
13 print(tokens)   
14
15 # Stopwords
16 for word in doc:
17     if word.is_stop == True:
18        print(word)   
19 # Análisis       
20 for token in doc:
21        print(token.text, token.lemma_, token.pos_, token.tag_, token.dep_,
22              token.shape_, token.is_alpha, token.is_stop)

En primer lugar, realizamos la carga de la librería spaCy e indicamos el idioma inglés junto con sus stop words (líneas 2 a 5). En la línea 7 indicamos la oración de ejemplo, que podríamos sustituir por un texto de mayor longitud, y la almacenamos en la variable doc tras incorporarla a nuestro modelo de spaCy. Posteriormente, en las líneas 12 y 13 obtenemos e imprimimos los tokens de los que está compuesta la oración. Además, al haber soporte de inglés es posible realizar lo mismo, pero para las stop words (líneas 16 a 18). Por último, analizamos sintácticamente los elementos de la oración simple (líneas 20 a 22).

Enlaces relacionados

Cran NLP: https://cran.r-project.org/web/views/NaturalLanguageProcessing.html