¿Alguna vez has querido desarrollar un chatbot y te has encontrado con stopper en el camino relacionados con la privacidad de los datos o los idiomas compatibles? ¿Deseas reducir el tiempo de respuesta del chatbot o ejecutarlos sin tener activa una conexión?

Si ese es el caso, o si simplemente por curiosidad y deseas obtener más información, dale una oportunidad a NLP.js

Procesamiento de lenguaje natural y NLP.js

El procesamiento del lenguaje natural o PLN (en inglés Natural Language Processing o NLP) es un campo que combina la lingüística y la informática, así como la inteligencia artificial. Comprender correctamente el lenguaje natural es fundamental para los asistentes virtuales, chatbots, asistentes de voz y una amplia gama de aplicaciones basadas en una interfaz de voz o texto con una máquina. Estas aplicaciones generalmente incluyen un procesador de lenguaje natural cuyo propósito es extraer las interacciones y la intención (intent), así como la información y los metadatos relacionados, de un fragmento de lenguaje natural simple y traducirlos a algo que una máquina pueda procesar.

NLP.js es un conjunto de más de 70 librerías de código abierto, que se utiliza para abordar y resolver las tres áreas principales del NLP: comprensión del lenguaje natural, generación del lenguaje y reconocimiento de entidades. La característica clave que proporciona NLP.js es una experiencia de usuario mejorada gracias a tener buen tiempo de respuesta, soporte de diversos idiomas y, según algunos puntos de referencia, precisión mejorada a la vez que permite una mayor privacidad de datos y seguridad, al no estar enviando datos a terceros.

¿Por qué tener una librería de NLP?

No es fácil entender cómo los NLP existentes procesan cada frase, como funcionan internamente y cómo toman las decisiones. Este efecto de caja negra, debido a la falta de visibilidad de por qué el chatbot ha respondido de una manera específica sin poder profundizar en el origen del problema, causa frustración a los administradores del chatbot. Tener el NLP como una biblioteca de código abierto proporciona más visibilidad y comprensión del procesamiento del lenguaje natural a bajo nivel. Permite a los técnicos comprender mejor el procesamiento de la conversación para administrar estrategias específicas del idioma para lograr el nivel de precisión esperado. Incluso si tener una estrategia específica por país no es un enfoque obligatorio, es muy recomendable cuando se dirige a los chatbots de alto rendimiento en idiomas distintos a los más utilizados.

Las principales características de NLP.js

1. Soporte de idiomas

NLP.js admite hasta 104 idiomas diferentes con el uso de BERT embeddingsSin BERT, admite de forma nativa 41 idiomas.

2. Stemmers

NLP.js implementa stemmers para mejorar la precisión y requerir menos expresiones de entrenamiento para lograr el mismo resultado. Reduce drásticamente el trabajo manual y la potencia de computación necesarias para entrenar el NLP.

Los stemmers son algoritmos que se utilizan para calcular el “stem” (raíz) de las palabras. Por ejemplo, palabras como “desarrollado”, “desarrollador”, “desarrollando”, “desarrollo” y “desarrolladores”, se clasifican con la misma raíz: “desarroll”. Esto es importante porque cuando preparamos frases para ser entrenadas o clasificadas por un NLP, generalmente tendemos a dividir esas oraciones en características. Algunos NLP usan un tokenizador para dividirlos en palabras, pero el problema con este enfoque es que es probable que debas entrenar al NLP con más frases para incluir las diferentes inflexiones del idioma.

Consideremos por ejemplo que entrenamos al NLP con la frase “¿quién es tu desarrollador?” con la palabra ‘developer’ como la intención, y luego, alguien hace la pregunta: “¿quién te ha desarrollado?”. Sin un stemmer, las palabras “desarrollador” y “desarrollado” no se reconocerían como similares, ya que no se identifican con el mismo token. Este problema es más pronunciado en idiomas con muchas inflexiones como el español o el indonesio, donde la misma palabra puede declinarse para indicar el género o, en el caso de los verbos, el tiempo verbal, la persona, el número…

3. Preguntas abiertas

Como resultado de la integración con BERT, se pueden tener preguntas abiertas sobre textos usando NLP.js. Esto significa que en lugar de entrenar la NLP con oraciones e intenciones, sólo tienes que proporcionar un texto a BERT y luego puedes hacer cualquier pregunta sobre el texto. La integración de NLP.js con BERT hace posible tener una clasificación sin supervisión en la que no es necesario proporcionar las intenciones.

A continuación, puedes ver un ejemplo en el que el texto proporcionado al chatbot es información sobre Harry Potter, con algunas preguntas abiertas posteriormente formuladas sobre el texto:

4. Extracción de entidades

El sistema NLP.js permite la extracción de entidades en varios niveles. Incluye una extracción de entidades enumeradas optimizada que puede buscar y comparar millones de posibilidades en milisegundos.

Además, tiene extracción de entidades doradas (golden entities o builtin entities) para identificar números, correos electrónicos, números de teléfono, medidas, URLs, moneda, etc. Cuando hablamos de identificar un número, puede ser bastante simple cuando la cifra está escrita en dígitos numéricos como ‘ 541 ‘, pero no es tan obvio entender que ‘quinientos cuarenta y uno’ corresponde al mismo número. La extracción de este tipo de entidades más complejas y diferentes en cada idioma es posible para un máximo de 44 idiomas en NLP.js .

NLP.js ayuda a optimizar la experiencia del usuario

La privacidad de los datos, la seguridad y el tiempo de respuesta son pilares clave para mejorar la experiencia del usuario y el sistema de conversacional en general.

Privacidad de datos

La mayoría de los líderes del mercado de NLP son soluciones basadas en la nube, lo que significa que todos los datos se procesan en la nube y, en algunos casos, se administran fuera de la plataforma del cliente. En principio, el procesamiento de datos en la nube no es un gran problema cuando se busca satisfacer las necesidades y requisitos de privacidad de datos de la mayoría de los países. Sin embargo, todavía puede ser un éxito en ciertas regiones, como Alemania, Singapur o Turquía …

Seguridad

La idea de convertir la NLP en una biblioteca permite que la solución general se pueda implementar completamente on-premise si es necesario. Además, NLP.js puede ejecutarse directamente en un smartphone sin necesidad de una conexión de datos. Con las tendencias actuales de globalización y haciendo que todo esté cada vez más conectado, es importante mantener la puerta abierta a soluciones totalmente on-premise para mantener el control sobre los datos.

Tiempo de respuesta

Al eliminar la necesidad de conectividad en la nube, se observa una mejora significativa en términos de latencia y rendimiento, aunque toda llamada a una API tiene una latencia inherente. Esta latencia se puede evitar aún más al incluir NLP.js como una biblioteca incorporada al propio chatbot. Este rendimiento mucho más rápido y esa baja latencia marcan una diferencie frente a otras soluciones del mercado.

Cómo ejecutar NLP.js localmente (ejemplo)

Primero, necesitarás tener Node.js instalado en tu ordenador. Si no lo tienes, puedes descargarlo aquí.

A continuación, crea una carpeta para tu proyecto, inicia un nuevo proyecto de nodo e instala estas dependencias NLP.js: basicexpress-api-serverdirectline-connectorBasic instala los paquetes necesarios para ejecutar NLP.js, express-api-server proporciona un servidor API que utiliza express y la interfaz para el chatbot, y directline-connector proporciona una API para el chatbot como la de Microsoft Directline.

mkdir chatbot  cd chatbot  npm init  npm i @nlpjs/basic @nlpjs/express-api-server @nlpjs/directline-connector

Ahora necesitarás un Corpus, que son los datos de conocimiento para tu chatbot, organizados en intents, y para cada intent, las oraciones a entrenar, así como las respuestas. Puedes acceder a un ejemplo de corpus en inglés aquí. Descárgalo y ponlo dentro de la carpeta donde tienes tu proyecto.

curl -O https://raw.githubusercontent.com/axa-group/nlp.js/master/examples/03-qna-pipelines/corpus.json

Crea un archivo llamado conf.json , este es el archivo de configuración que le dice a NLP.js qué complementos debe incluir y la configuración de cada complemento. Coloca la siguiente información en el archivo conf.json para ejecutar este ejemplo:

{   "settings": {   "nlp": {   "corpora": ["./corpus.json"]   },   "api-server": {   "port": 3000,   "serveBot": true   }   },   "use": ["Basic", "ExpressApiServer", "DirectlineConnector"]  }

La sección llamada use le indica qué complementos debe incluir y la sección settings es la configuración de cada complemento. En este caso, le estamos diciendo al NLP que cargue la corpora, que consisten en el archivo corpus.json que hemos descargado antes. También le estamos diciendo al servidor API que se inicie en el puerto 3000 y lo configuramos serveBot como verdadero, ya que queremos que el frontend del bot funcione automáticamente.

Ahora que tenemos la configuración, creemos un archivo index.js con el código para que se ejecute:

const { dockStart } = require("@nlpjs/basic");(async () => {   const dock = await dockStart();   const nlp = dock.get('nlp');   await nlp.train();  })();

Y eso es todo lo que necesitamos. Ahora podemos iniciar la aplicación.

Con const dock = await dockStart()le estamos diciendo a NLP.js que se inicialice, cargue el archivo conf.json, cargue los complementos asociados definidos y los instancie con la configuración definida. Devuelve una instancia del objeto dock que es un contenedor con todos los complementos cargados. En la parteconst nlp = dock.get('nlp')es donde recuperamos la instancia del NLP desde este contenedor. Esta instancia de NLP ya contiene el corpus que hemos definido en la configuración, pero aún no está entrenado, así que tenemos que entrenarlo, y eso es lo que hace la líneaawait nlp.train().

Y eso es todo lo que necesitamos. Ahora podemos iniciar la aplicación:

node .

Ya puedes abrir http://localhost: 3000 en el navegador para ver el webchat y hablar con el chatbot.

Demo online

Si lo prefieres puedes probar la versión online, que está desplegada en Glitch , lo que significa que podrás ejecutar la demo, así como hacer tus propias modificaciones en el código y jugar con él.

Para obtener más información, puedes acceder al tutorial completo y a algunos fragmentos de códigos adicionales .

El valor del código abierto

Según Tom Preston-Werner, cofundador de GitHub : “A las personas inteligentes les gusta pasar el rato con otras personas inteligentes. A los desarrolladores inteligentes les gusta pasar el rato con código inteligente. Cuando abres código útil, atraes talento”.

En nuestra ambición de convertirnos en una empresa tech-led, compartir proyectos y bibliotecas de código abierto relevantes es un método excelente para mostrar nuestra tecnología al mundo, extender nuestra colaboración más allá de los muros de nuestra empresa y ampliar nuestras formas de conectarnos con el talento.

NLP.js es el candidato perfecto para el programa de código abierto de AXA. No contiene nada específico del negocio principal de AXA, es lo suficientemente genérico, fácil de reutilizar y creemos que brinda una oportunidad perfecta para participar y contribuir a la comunidad de código abierto.

Entre otros usos y publicaciones, ya se ha utilizado en la Universidad de Goettingen y se presentó en la conferencia Colombia 4.0 AI en 2019.

Si deseas obtener más información sobre el programa y la tecnología de código abierto de AXA, puedes escribir a: opensource@axa.com

Por Jesús Seijas de la Fuente

Enfocado en proyectos de IA, principalmente IA conversacional y Visión por Computador. Autor de NLP.js, un conjunto de librerías NLP para AI conversacional, capaz de hacer clasificación, con normalizadores, tokenizadores y lematizadores para 41 idiomas, que es capaz de entrenar y clasificar en el navegador y móvil sin conexión a internet, e integrado con BERT. La red neuronal está diseñada para el problema de clasificación de PNL en términos de precisión y rendimiento.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *