Probamos SpaCy: mucho más que una librería para crear proyectos reales de procesamiento del lenguaje natural
Fecha de la noticia: 23-06-2022

Pocas habilidades son tan características del ser humano como el lenguaje. Según la escuela Aristotélica, los humanos somos animales racionales que perseguimos el conocimiento por el mero hecho de saber. Sin entrar en profundas consideraciones filosóficas que exceden, con mucho, el propósito de este espacio de divulgación, podemos decir que esa búsqueda del saber y la acumulación de conocimiento no serían posibles sin la intervención del lenguaje humano. De ahí, que en este siglo XXI - el siglo de la explosión de la Inteligencia Artificial (IA)- buena parte de los esfuerzos se centren en soportar, complementar y aumentar las capacidades humanas relacionadas con el lenguaje.
Introducción
En este espacio, hemos hablado repetidamente de la disciplina del procesamiento del lenguaje natural (o NLP en inglés). La hemos abordado desde diferentes puntos de vista, todos ellos desde un enfoque práctico, técnico y relacionado con los datos - textos - que son el verdadero combustible de las tecnologías que sirven de apoyo a esta disciplina. Hemos realizado monográficos sobre el tema, introduciendo las bases de la tecnología e incluyendo ejemplos prácticos. También hemos comentado la actualidad y analizado las últimas tendencias tecnológicas, así como los últimos logros importantes en procesamiento del lenguaje natural. En casi todas las publicaciones sobre el tema, hemos mencionado herramientas, librerías y productos tecnológicos que, de una u otra manera, ayudan y soportan los diferentes procesos y aplicaciones del lenguaje natural. Desde la creación de resúmenes razonados de obras y textos largos, hasta la generación artificial de publicaciones o código para programadores, todas las aplicaciones utilizan librerías, paquetes o frameworks para el desarrollo de aplicaciones de inteligencia artificial aplicadas en el campo del procesamiento del lenguaje natural.
En anteriores ocasiones describimos el algoritmo GPT-3 de la compañía OpenAI o el Megatron-Turing NLG de Microsoft, como algunos de los exponentes actuales en cuanto a potencia de análisis y precisión en la generación de resultados de calidad. Sin embargo, en la mayoría de las ocasiones, tenemos que hablar de algoritmos o librerías que, dada su complejidad, quedan reservados a una pequeña comunidad técnica, de desarrolladores, académicos y profesionales, dentro de la disciplina del NLP. Es decir, si queremos emprender un nuevo proyecto relacionado con el procesamiento del lenguaje natural, debemos de partir de unas librerías de bajo nivel, para posteriormente ir añadiendo capas de funcionalidad a nuestro proyecto u aplicación hasta que esta esté lista para su uso. Normalmente, las librerías de NLP, se enfocan sobre una pequeña parte del recorrido de un proyecto de software (fundamentalmente la tarea de codificación), siendo los desarrolladores o equipos de software, los que deben de contemplar y añadir el resto de capas funcionales y técnicas (testing, empaquetado, publicación y puesta en producción, operaciones, etc.) para convertir los resultados de esa librería de NLP en un producto o aplicación tecnológica completa.
El reto de poner en marcha una aplicación
Pongamos un ejemplo. Supongamos que queremos construir una aplicación que, en base a un texto de partida, por ejemplo, nuestra factura de la luz, nos haga un resumen sencillo del contenido de nuestra factura. Todos sabemos que las facturas de la luz o las nóminas de los trabajadores no son documentos, precisamente, sencillos de entender para el común de la sociedad. La dificultad se encuentra, normalmente, en el empleo de una terminología muy técnica y, por qué no decirlo, en el bajo interés de algunas organizaciones en simplificar la vida de los ciudadanos facilitando el entendimiento de informaciones básicas como lo que pagamos por la electricidad o nuestras retribuciones como empleados por cuenta ajena. Volviendo al tema que nos ocupa. Si queremos construir una aplicación de software con este propósito, tendremos que utilizar un algoritmo que entienda nuestra factura. Para esto, los algoritmos de NLP, tienen que, primero de todo, realizar un análisis del texto y detectar las palabras clave y sus relaciones (lo que en terminología técnica se llama, detectar entidades y reconocerlas en el contexto). Es decir, el algoritmo tendrá que detectar las entidades clave, como el consumo de energía, sus unidades en kWh, los periodos temporales relevantes (consumo de este mes, del mes anterior, consumo diarios, histórico de consumo pasado, etc.). Una vez detectadas esas entidades relevantes (y descartadas las demás) y sus relaciones, todavía queda mucho por hacer. En términos de un proyecto de software en el campo del NLP, el reconocimiento de entidades (en inglés NER - Named-Entity-Recognition) es solo una pequeña parte de una aplicación lista para su uso por una persona o un sistema. Es aquí donde os presentamos la librería de software SpaCy.
Ejemplo de flujo o pipeline de NLP desde que partimos del texto original que queremos analizar hasta que obtenemos el resultado final, bien sea un texto enriquecido o una página web con ayudas o explicaciones al usuario. Fuente original: https://SpaCy.io/
Ejemplo del uso de la pipeline (flujo) de Spacy es_core_news_sm para identificar entidades en una frase en español.
¿Qué es Spacy?
SpaCy tiene como objetivo facilitar la puesta en producción (hacer una aplicación lista para su uso por el consumidor final) de las aplicaciones de software en el ámbito del lenguaje natural. SpaCy es una librería de software de código abierto diseñada para facilitar tareas de procesamiento avanzado del lenguaje natural. SpaCy está escrita en Python y Cython (extensiones del lenguaje C para Python que permiten realizar una programación de bajo nivel muy eficiente). Es una librería open-source bajo la licencia MIT y todo el proyecto es accesible a través de su cuenta de Github.
Las ventajas de Spacy
Pero, ¿qué hace diferente a SpaCy? SpaCy se creó con el objetivo de facilitar la creación de productos reales. Es decir, la librería no es tan solo una librería con la que nos quedamos en el plano más técnico y de más bajo nivel dentro de las capas que componen una aplicación de software, desde los algoritmos más internos hasta las interfaces más visuales. La librería contempla los aspectos prácticos de un producto de software real, en el que es necesario tener en cuenta aspectos tan importantes como:
- Las grandes cargas de datos que se requieren procesar (imagina lo que implica, cargar los comentarios de productos completos de un gran e-commerce en Internet, por ejemplo).
- La velocidad de ejecución, puesto que cuando tenemos una aplicación real, necesitamos que la experiencia sea lo más fluida posible y no podemos soportar largos tiempos de espera entre ejecuciones de los algoritmos.
- El empaquetamiento de funcionalidades de NLP (como NER) listas para desplegar en uno o varios servidores de producción. SpaCy, no solo proporciona herramientas de código de bajo nivel, sino que soporta los procesos desde que creamos (compilamos y construimos una parte de una aplicación de software) hasta que integramos esta parte algorítmica con otras partes de la aplicación como las bases de datos o las interfaces de usuario final.
- La optimización de modelos de NLP para que puedan ejecutarse fácilmente en servidores estándar (basados en CPU) sin necesidad de usar procesadores gráficos (GPU)
- Las herramientas de visualización gráficas integradas para facilitar la depuración o el desarrollo de nuevas funcionalidades.
- Importante mencionar también, su fantástica documentación, desde su web más introductoria hasta su comunidad en Github. Esto facilita enormemente la rápida adopción entre la comunidad de desarrollo.
- El gran número de modelos y flujos pre-entrenados (73 flujos) en 22 idiomas diferentes. Además del soporte para más de 66 idiomas. En particular, en el caso del español, es complicado encontrar en otras librerías y herramientas, modelos optimizados para el idioma español.
Ejemplo de visualizador gráfico de entidades. Fuente original: https://SpaCy.io/
Como conclusión de este post. Si eres principiante y estás arrancando en el mundo del NLP, SpaCy te facilita el comienzo y viene con una amplia documentación, que incluye una guía 101 para principiantes, un curso interactivo gratuito en línea y una variedad de tutoriales en video. Si eres un desarrollador experimentado o formas parte de un equipo de desarrollo de software consolidado y quieres construir una aplicación de producción final, SpaCy está diseñado específicamente para uso en producción y te permite crear y entrenar flujos de datos (textos) potentes de NLP y empaquetarlas para una fácil implementación. Finalmente, si estás buscando alternativas a tu solución ya existente de NLP (buscas nuevos modelos de NLP, necesitas mayor flexibilidad y agilidad en tus despliegues a producción o buscas mejoras en rendimiento), SpaCy te permite personalizar probar diferentes arquitecturas y combinar, fácilmente, frameworks existentes y populares como PyTorch o TensorFlow.
Contenido elaborado por Alejandro Alija,experto en Transformación Digital e Innovación.
Los contenidos y los puntos de vista reflejados en esta publicación son responsabilidad exclusiva de su autor.