top of page
Search
  • Writer's pictureVictoria Martín del Campo

Aprende el 101 de Procesamiento de Lenguaje Natural


Comenzar a trabajar con procesamiento de lenguaje natural (NLP, por sus siglas en inglés) tiene tips & tricks que hacen la vida más fácil para empezar a explorar esta increíble y trendy área de Inteligencia Artificial. El trick de hoy son las operaciones básicas de spaCy 🚀🌟.


Spacy es una biblioteca de NLP de código abierto desarrollada en Python. Acá encontrarás información de cómo instalar spaCy en tu ambiente favorito, conceptos base para procesamiento de texto y operaciones de significado e intención.


La cadena de operaciones de NLP cuenta con cinco pasos importantes.





En este blog veremos del paso 1Instalación y Tokens hasta los tags.


Paso 1: Instalar

¿Ya tienes Python, verdad? Vientos. Un sencillo pip en la terminal instala spaCy:


$ pip install spacy


Para saber dónde se guardó y qué version insatalaste


$ python -m spacy info


Y se ve así:



La descarga de spaCy no tiene los modelos estadísticos que vamos a usar, se descargan aquí: https://spacy.io/models


Los nombres de cada modelo tienen 4 partes. Cada parte describe una característica del modelo: lang_type_genre_size


Lang = idioma (language)

Type = capacidades del modelo (por ejemplo, si es un modelo de uso general que incluye vocabulario, sintáxis, entidades y vectores)

Genre = indica el tipo de datos de entrenamiento (internet, wikipedia, sets privados, etc.)

Size = tamaño del modelo (small, medium y large (no se confunda con alto, grande y venti))


Un ejemplo para ilustrar lo anterior es:




Para este ejercicio vamos a descargar los siguientes modelos:

  • en_core_web_sm

  • en_core_web_md

  • en_core_web_lg

  • en_vectors_web_lg (sólo algunas versiones)

  • en_core_web_trf (versión para trabajar con transformers)


Instala cada uno i.e.:


$ python -m spacy download en_core_web_sm


(Si te preocupa el espacio, puedes trabajar sólo con en_core_web_sm con el comando en terminal $ python -m spacy download en)


Paso 2: Cadena de Operaciones

Un “proceso de pipeline” es una cadena de operaciones básicas de NLP que sirve para convertir un texto de input en un objeto:





2.1 Tokens

El primer paso para procesar texto es separarlo en ‘tokens’ los tokens pueden ser palabras, números, signos de puntuación. Todas las demás operaciones de NLP requieren tokens, por ello, es la operación base de toda cadena de procesamiento. Una palabra no siempre equivale a un token. Una regla de dedo para entender los tokens en términos de longitud:

  • 1 token ~= 4 caracteres.

  • 1 token ~= ¾ palabras.

  • 100 tokens ~= 75 palabras.


OJO: los tokens dependen del idioma y del tokenizer utilizado. No hay una regla fija de longitud para todos los casos.


Veamos un ejemplo con la frase “I am adopting a dog from Cuernavaca” (intenta experimentar con cualquier frase que tú quieras!)



  1. Importamos la librería de spaCy que instalamos

  2. Cargamos un paquete del modelo en inglés usando un shortcut ‘en_core_web_sm’

  3. Creamos una instancia de la clase de lenguaje. Un Objeto de Lenguaje contiene el vocabulario y otros datos del modelo estadístico. Yo escogí llamar ‘nlp’ al objeto de lenguaje.

  4. En la variable ejemplo voy a aplicar el Objeto de Lenguaje creado (al que llamé nlp) a una oración que usaré de ejemplo (duh!), creando una instancia que se suele llamar Doc object. Un Doc object es un contenedor para una secuencia de tokens (recordatorio de que los tokens no siempre son palabras).

  5. ¿Qué voy a imprimir? Con sólo 4 líneas de código spaCy ya generó la estructura gramatical de la oración que escogí, en este ejemplo, spaCy va a imprimir los contenidos de texto de cada token de la oración que le envié.

Output:


¡Listo! Tenemos los tokens de nuestra oración, estos son la base para trabajar con toda la cadena de procesamiento de lenguaje.




2.2 Etiquetado de Lemas (Lematización o Lemmatization)


Un lema es la forma más básica de un token. Pensémoslo así: es la raíz de la cual se derivan todas las variables de la misma palabra. Ejemplo:


Lematización o etiquetado de lemas es el proceso de reducir las palabras a su lema.


Oración

The Mexican Chihuahuan Desert unfolds creating a contrast of arid landscapes against towering mountain ranges.


Código


Las primeras líneas del script son las mismas del código anterior. Estamos aplicando el pipeline a la oración que escogí de ejemplo (puedes jugar con diferentes oraciones para ver resultados variados).


Una vez que el Doc object contiene los tokens de la oración de ejemplo, el loop de la línea 4 itera cada elemento que identificó como token así como el lema que le corresponde.


El output del script se ve de la siguiente manera:








La columna de la izquierda tiene los tokens y el de la derecha los lemas.


Aplicación de lemas para reconocimiento de significados

La tarea más importante de los lemmas es el reconocimiento de significado. Regresemos al ejercicio más sencillo con la oración "I am adopting a dog from Cuernavaca".


Supongamos que esta oración se ingresa a un sistema que hace match entre mascotas que necesitan un hogar y personas que buscan adoptar.



La aplicación de NLP puede reconocer los siguientes datapoints:

  • Tipo de transacción (adpoción, compra, venta)

  • Tipo de mascota (perro, gato, ardilla, tiburón)

  • Localización de la mascota (Cuernavaca, Mérida, Oaxaca)


Para determinar el objetivo del cliente del sistema, el algoritmo busca palabras que hagan match con palabras clave en una lista predefinida. Una manera de hacer que la búsqueda sea más rápida es buscar los lemas de cada palabra en lugar de la palabra exacta. Así, la lista de palabras predefinidas es más clara y concisa. Por ejemplo, en lugar de tener todas las variación de “adoptable”, “adoption”, “adopting” la lista de lemas puede contener la variante base “adopt”.


2.3 Tags para cada parte de la oración (Part of Speech Tagging)


Una tag de cada parte de la oración te indica el tipo de cada palabra en una oración (sujeto, verbo, preposición, adjetivo, etc.) En spaCy, además de tener un tag que señale que tipo de part-of-speech es cada palabra, puedes pedirle a la librería que te dé mucha más información acerca de una palabra en específico, por ejemplo, de un verbo.


En español, los verbos se clasifican con accidentes verbales uno de los accidentes verbales es, por ejemplo, el tiempo (presente, pasado, futuro). El accidente verbal de tiempo de “comió” es pasado.


Los cuatro accidentes verbales de un verbo son: número, persona, tiempo y modo.


Número: Cuántas personas realizan la acción (singular o plural)

Persona: Quién realiza la acción (1era, 2nda y 3era persona.)

Tiempo: Cuándo se realizó la acción (pasado, presente, futuro)

Modo: Actitud con la que se expresa el verbo ( indicativo, subjuntivo e imperativo; por ejemplo, una orden siempre es en imperativo ‘¡Siéntate!’)




Así como los verbos, de la misma manera, otras partes de la oración tienen accidentes gramaticales (click acá para repaso de gramática en español). La librería de spaCy extrae los accidentes gramaticales de cada parte de la oración en el conjunto de palabras de cada oración. ¿Por qué es importante? ¡El próximo blog lo explica a detalle!



¿Nos vemos pronto?






147 views0 comments
bottom of page