chatbot-periodismo

Viene de Cómo desarrollar tu propio NLP para Chatbots (I).

Introducción

En el artículo anterior veíamos cómo con poco código se podía llegar a un NLP tan bueno o mejor que los comerciales, basándonos en el paper SIGDIAL22, que evalúa con tres corpus muy diferentes entre ellos. Sin embargo, ¿por qué quedarse ahí y no seguir mejorándolo hasta que sea mejor en los tres corpus y en el global y rompa todos los records?

Sustitución de Entidades

Ahora mismo para las puntuaciones el resto de NLP cuentan con una ventaja que no se ha aplicado en el nuestro: se han entrenado teniendo en cuenta las entidades. Vamos a ver un ejemplo:

Esta es una de las frases de entrenamiento, podemos ver que tiene una sección en la que le dice qué palabra o palabras de la frase son en realidad una entidad. En este caso está diciendo que “TV Tropes” es la entidad “WebService”. Lo que vamos a hacer ahora es que, cuando durante el entrenamiento, vengan entidades, vamos a sustituir el texto que corresponde a la entidad por una etiqueta que represente a la entidad. Para entenderlo, en nuestro ejemplo, esa frase en realidad serían dos frases para el entrenamiento:

Para conseguirlo creamos una función “augment” que reciba una frase y sus entidades y nos devuelva un array de frases.

También tenemos que cambiar el entrenamiento para que tenga en cuenta que en lugar de una frase ahora tendrá un array de ellas que procederán de la función augment:

El sandbox con el código:

 

Y los resultados:

Apreciamos que nuestro método ya ha mejorado mucho en el corpus de Web Application, y pasa a estar primero en todas las categorías, aunque en Chatbot empatado con Recast y en Web Application empatado con IBM Watson. Pero logramos pasar del 0.927 al 0.934 en el global, ¡que es una mejora muy sustancial!

Sinónimos

Ya hemos llegado muy lejos, pero, ¿qué nos puede faltar? Analizando el corpus vemos que hay partes en las que las expresiones y palabras que se están usando para el test, en algunas ocasiones jamás han sido vistas por el entrenamiento, en especial el empleo de sinónimos. Así vemos que se prueba con “remove” cuando en el entrenamiento solamente ha visto “delete”, se prueba con “junk” referido al “spam” que ha visto entrenando y con “transfer” para referirse a “export”.

Si guardamos un diccionario de sinónimos y por qué palabra se quiere sustituir, y al principio de todo a partir de este diccionario generamos un diccionario de sus stems, podemos añadirlo como paso a la hora de generar las features.

Este sería el código de la generación del diccionario:

Y esta sería la nueva pipeline de generación de las features:

Este sería el sandbox con el código:

Y los resultados:

Vemos que despunta en el corpus de Web Application y con ello en el global ¡rompe totalmente los records!

Conclusión

Siguiendo un proceso lógico y usando redes neuronales se puede lograr entender muy bien el lenguaje humano en el entorno de Chatbots. Cabe preguntarse cómo es posible que empresas con grandes inversiones y grandes profesionales detrás, sin embargo sus Inteligencias Artificiales conversacionales no puntúan igual de bien. Mi opinión personal es que esto es por dos motivos:

  • Por una parte no es su objetivo principal, sino que sirve con ser “suficientemente bueno”
  • Por otra parte, cuando utilizas tu propio NLP tú eres tu único cliente, con lo que tienes toda tu memoria y CPU para tu uso, mientras que en una plataforma como Google DialogFlow, IBM Watson o Microsoft LUIS estamos hablando de miles de clientes y a precios muy bajos o incluso gratis, con lo cual el uso de memoria y de CPU debe ser minimizado al máximo para poder dar servicio a todos los clientes.

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 *