spaCy: una herramienta para realizar Procesamiento del Lenguaje Natural de manera amigable
Esta publicación tiene como objetivo mostrar la aplicación de una herramienta para el Procesamiento del Lenguaje Natural (PLN[1]) en la identificación de agentes (personajes) y sus acciones dentro de un cuento; y está dirigida a cualquier persona interesada en documentarse sobre aplicaciones del PLN.
El PLN es una disciplina que surge del cruce disciplinar entre computación, lingüística e inteligencia artificial; que tiene por objetivo estudiar y flexibilizar las interacciones humano-máquina (Vásquez et al., 2009). El PLN brinda nuevas formas de interactuar con la tecnología, por ejemplo, Alexa de Amazon o Siri de Apple, que permiten comunicarnos mediante comandos de voz, que procesan de manera eficiente texto y extraen información relevante en poco tiempo.
Hoy en día existen multitud de herramientas para el Procesamiento del Lenguaje Natural, por ejemplo: Flair NLP, Stanza, NLTK, entre otras, que pueden usarse sin requerir conocimientos avanzados de programación. Una de estas herramientas es spaCy, una biblioteca de PLN para Python, desarrollada por Matthew Honnibal e Ines Montani[2] .
Python es un lenguaje de programación de alto nivel, ampliamente utilizado por su facilidad de aprendizaje y su versatilidad. Su simplicidad sintáctica permite una fácil lectura del código y favorece un estilo de programación claro. Se utiliza en una variedad de dominios de aplicación, desde el desarrollo web hasta la ciencia de datos, la inteligencia artificial, el aprendizaje automático, y en nuestro caso el PLN.
En Python, el término “biblioteca” se refiere a un módulo o grupo de módulos que ofrecen funcionalidades concretas, es decir, son conjuntos de códigos desarrollados y organizados por otros programadores. La utilización de estas bibliotecas evita que se inicie desde cero al programar tareas habituales, agilizando y optimizando el proceso de desarrollo de software.
Por otro lado, spaCy se describe a sí misma como “una biblioteca diseñada para aplicaciones industriales”. Incorpora diversas técnicas avanzadas como la tokenización[3], e incorpora modelos preentrenados para aplicar el etiquetado gramatical (POS) y la identificación de entidades nombradas (NER), entre otras. Esta biblioteca es versátil, ofreciendo soporte para una amplia gama de idiomas, incluido el español, lo que la hace especialmente útil en contextos multilingües.
Uso de spaCy
A continuación, se describirá el proceso para identificar entidades en un texto, es decir, cadenas de texto que representan un agente de la acción de un verbo. Para ejemplificar el uso de spaCy, primero se utilizó ChatGPT[4] para producir un cuento infantil sobre el tema de Halloween (con la finalidad de contar con un texto inédito para este ejercicio), una vez obtenido este cuento, se procedió a realizar el análisis del mismo con spaCy, para lo cual se escribió un código que se encarga de “leer” el cuento y extraer información relevante del mismo.
La trama del cuento gira en torno a una ciudad llamada Dulcilandia, donde se celebra Halloween de una manera única. El código comienza leyendo un archivo TXT que contiene el cuento y procede a etiquetar cada palabra del mismo, utilizando un modelo preexistente en spaCy. En la figura 1 se puede apreciar el código que realiza esta acción, y como resultado se obtienen dos listas de palabras, una con las entidades (personas, lugares, etc.) y otra con las dependencias gramaticales (sujeto, predicado, etc.),
Figura 1 Código que analiza el texto y genera listas con características de las palabras (nota: el texto precedido por # indica comentarios dentro del código, es decir anotaciones).
Con base en las listas de palabras etiquetadas (tokens), obtenidas con el código anterior, se buscan las acciones ligadas a entidades relacionadas con? personajes de la historia. Para lograrlo, se recorren las listas de tokens para encontrar los verbos que están relacionados con cada entidad (ver Figura 2).
Figura 2 Código que relaciona personajes con acciones.
El resultado final es una lista de fragmentos de texto, donde se muestra qué acciones realizo un determinado personaje dentro de la historia, una forma útil de analizar automáticamente el texto y para comprender de forma básica qué sucede en la historia.
El código y el cuento pueden ser consultados en la plataforma GitHub: https://github.com/ColmexBDCV/identify_story_actions. Una vez que se ha explicado de manera general lo que hace el código utilizado, a continuación, se aborda con más detalle la lógica subyacente:
- Se separa cada palabra del cuento y asigna etiquetas de tipo NER y POS, como se anota a continuación:
- Etiquetas NER: Las entidades nombradas son frases que contienen los nombres de personas, organizaciones, ubicaciones, expresiones de tiempo, cantidades, entre otras. Las entidades de interés se almacenan con su etiqueta correspondiente (por ejemplo, ‘PER‘ para personas, ‘LOC‘ para lugares, ‘ORG’ para organizaciones y ‘MISC’ que se emplea como un comodín para las tres anteriores) y sus posiciones en el texto (cable aclarar que el modelo que se utiliza mediante spaCy ya tiene las etiquetas predefinidas).
Ejemplo: (Los niños de Dulcilandia , MISC, 288, 292)
Los niños de Dulcilandia | MISC | 288 | 292 |
Entidad | Etiqueta | Posición de la palabra dentro del cuento | Posición la siguiente palabra fuera de la entidad |
- Etiquetas POS: Identifica las partes de la oración, categorías gramaticales a las que se asignan las palabras (como sustantivos, verbos, adjetivos, etc.) y agrega etiquetas de dependencia sintáctica, que representan las relaciones gramaticales de cada palabra en una frase.
Ejemplo (‘Luis’, ‘PROPN’, ‘nsubj’)
Luis | PROPN | nsubj |
Palabra | Categoría gramatical | Dependencia sintáctica |
- Una vez obtenidas las listas de entidades nombradas y las categorías gramaticales de cada palabra del cuento se procede a:
- Iterar sobre cada entidad etiquetada como ‘PER’ o ‘MISC’, que cumplan con la condición de que alguna de las palabras que componen la entidad está marcada como ‘nsubj’, es decir el sujeto nominal de la oración.
- Buscar el verbo más cercano (indicado por la etiqueta POS ‘VERB’) que viene después de la entidad en el texto. Este verbo se asume que representa una acción que la entidad está llevando a cabo.
- En el caso de que, durante esta búsqueda, el código encuentre otra palabra etiquetada con ‘nsubj’, descarta que la entidad en turno realiza una acción y continua la iteración.
- Una vez identificadas todas las entidades que representan un sujeto nominal (‘nsubj’) y su correspondiente verbo se procede a imprimir en pantalla cada entidad, sus posiciones y el verbo correspondiente y sus posiciones.
- Adicionalmente se imprime la frase completa que inicia con la entidad detectada y termina hasta la siguiente palabra marcada como signo de puntuación y que se encuentre después del verbo.
A continuación, se muestran en una tabla, un par de los resultados que el código imprime en la pantalla una vez que termina su análisis:
Tabla 1 Entidad y Verbo detectados + Contexto
Entidad y Verbo detectados | Contexto |
La entidad “Luis” comienza y termina en la posición “85”, y el verbo más cercano “llevaba” se ubica en la posición “92” | Luis era un niño radiante, siempre llevaba una sonrisa amigable y tenía un corazón tan dulce como el caramelo derretido |
La entidad “Los niños de Dulcilandia” comienza en la posición “288”, termina en la posición “291” y el verbo más cercano “comenzaron” en la posición “292”. | Los niños de Dulcilandia comenzaron a desfilar por las calles de caramelo |
Como se muestra en la tabla 1, en la columna “Entidad y Verbo detectados” se puede observar el número de palabra dentro del cuento donde fue encontrada una entidad (resaltada en rojo) y el número de palabra donde se encontró el verbo vinculado (resaltado en verde), lo cual resulta útil para ubicar en el texto tanto la entidad como el verbo vinculado. En la columna “Contexto” podemos apreciar tanto entidad como verbos detectados junto con otras palabras que dan contexto suficiente para comprender la vinculación Entidad/Verbo.
Conclusiones
Este ejercicio ejemplifica, de manera práctica, como se puede realizar el análisis de un texto libre con herramientas como spaCy, mediante la aplicación de dos técnicas esenciales del PLN: etiquetado NER y etiquetado POS.
Este tipo de análisis se puede extender y no solo vincular sujetos con acciones, sino también a ubicarlos en un tiempo y un lugar, dependiendo de las características del texto.
Es importante recalcar que el código que se muestra corresponde a un ejemplo básico, ya que el PLN es un campo complejo. Es muy probable que se encuentren errores y omisiones después de una revisión exhaustiva del texto y los resultados (debido principalmente a la naturaleza del texto), como cuando se manejan metáforas, doble sentido, ambigüedades, entre otras características discursivas, aunque es funcional y provee bastante información en muchos casos. Sin embargo, vale la pena resaltar que spaCy destaca por su capacidad para procesar grandes volúmenes de texto de manera eficiente, lo que permite a los usuarios obtener descubrimientos rápidos y precisos para resolver labores de este tipo.
- https://es.wikipedia.org/wiki/Procesamiento_de_lenguajes_naturales
Volver arriba ↑ - https://spaCy.io/
Volver arriba ↑ - La tokenización es un método para dividir un fragmento de texto en partes más pequeñas llamadas tokens.
Volver arriba ↑ - https://es.wikipedia.org/wiki/ChatGPT
Volver arriba ↑
Referencias
Vásquez, A. C., Quispe, J. P., & Huayana, A. M. (2009). Procesamiento de lenguaje natural. Revista de Investigación de Sistemas e Informática, 6(2), 45-54.
OpenEdition le sugiere que cite este post de la siguiente manera:
Rodrigo Cuéllar Hidalgo (24 de enero de 2024). spaCy: una herramienta para realizar Procesamiento del Lenguaje Natural de manera amigable . Amontonamos las palabras: Blog de la Biblioteca de El Colegio de México. Recuperado 20 de enero de 2025 de https://doi.org/10.58079/vnxx