Como comentamos en artículo anterior, …antes de iniciarte en cualquier framework para la creación de interfaces conversacionales, hay una serie de conceptos básicos que hay que tener muy claros. Vamos a ello.

Algoritmos de clasificación

En primer lugar, conviene entender lo que es un algoritmo de clasificación y cómo funciona para poder interiorizar íntegramente la mecánica que hay detrás de las interfaces conversacionales.

Recuerda que en esencia un chatbot está compuesto por dos grandes partes:

  • Por un lado, la comprensión del significado del mensaje del usuario (NLU Natural Language Understanding).
  • Por otro lado, la gestión del flujo de diálogo (CORE), responsable de decidir cómo se responde al usuario en función del estado en el que se encuentra la conversación.

Ambas partes están generalmente basadas en algoritmos de clasificación para llevar a cabo estas tareasEstos forman parte del conocido grupo aprendizaje automático, y dentro de este, pertenecen al subgrupo de los algoritmos de tipo supervisado. A grandes rasgos, este tipo de algoritmos se pueden entender como una función que recibe diferentes variables de entrada y devuelve una variable de salida.

Se les acuña con el término “supervisado” porque extraen conocimiento de forma automática a partir del procesado de una serie de muestras de entrenamiento que han sido previamente vinculadas a una determinada clase bajo supervisión de una persona.

Una vez finalizada esta fase de entrenamiento, el algoritmo podrá predecir (calcular) la clase (variable de salida) a la que pertenece una muestra de entrada no utilizada para entrenar al algoritmo, con un alto grado de fiabilidad.

Source

NLU

En este caso, las muestras con las que entrenamos el algoritmo (variables de entrada) son frases de ejemplo que esperamos recibir por parte del usuario.

La salida, una vez entrenado el algoritmo, será la intención del usuario con mayor afinidad a la frase que ha recibido como entrada, según el criterio del algoritmo.

Desde un punto de vista matemático, estas frases se convierten a un vector para que el algoritmo las pueda interpretar.

Además, cada una de las clases o intenciones con las que se “etiqueta” el mensaje del usuario, también se “traducen” a un vector.

Source

De esta manera, el entrenamiento para cualquier algoritmo geométrico supervisado, consiste en un ajuste de los parámetros orientados a reducir la distancia o error entre el vector de entrada (frase) y el vector de salida (intención).

Entrenamiento para el caso de una red neuronal: ajuste de parámetros para obtener el mínimo “coste” o error.

CORE

Probablemente al ver la viñeta anterior, entre el hombre de uniforme y el robot, has pensado: «Bueno, el mensaje del hombre es un poco ambiguo. Es decir, podría estar finalizando la conversación… sí, pero también podría quedar algún asunto pendiente y querer continuar la conversación».

Es cierto, hay multitud de frases ambiguas que pueden requerir una respuesta u otra en función del contexto que rodea a la conversación en ese instante. Es en este aspecto donde el CORE ayuda al NLU.

En primer lugar, el NLU predice la intención. En este caso “Despedir”, ya que el bot entiende que el humano está cerrando la conversación.

En segundo lugar, pasa la intención predicha al algoritmo del flujo de diálogo. Este, procede a analizar el contexto para escoger la acción idónea con la que responder al humano. Para ello, a parte de la intención predicha por el NLU, se fija en otras cosas como palabras clave utilizadas dentro del mensaje del usuario (entidades), en el estado de las variables de algún otro proceso contextual y en las últimas acciones respondidas por el bot.

En este caso, vamos a suponer que el objetivo de la conversación es realizar un formulario. Por tanto, podemos resumir el contexto en dos alternativas: “Formulario incompleto” “Formulario completo”.

En la imagen de abajo, si observamos el segundo pensamiento de la viñeta de arriba. Nos damos cuenta de que antes de responder, el bot comprueba si queda algún asunto pendiente en el formulario. Al darse cuenta de que sí, devuelve una frase de cierre y continuación de diálogo. Si por el contrario comprueba que ya no quedan más pasos, responde con un comentario que finaliza la conversación.

Resumiendo, las muestras de entrada con las que entrenamos este algoritmo son palabras clave, otras variables contextuales las acciones que se han ido escogiendo en los mensajes inmediatamente anteriores.

La salida, una vez entrenado el algoritmo, será la acción más apropiada con la que responder al usuario.

Recuerda: como comenté en el artículo anterior, no es obligatorio basar el flujo de diálogo en un algoritmo.

Algunos servicios de interfaces conversacionales, como IBM Watson Assistant, construyen el flujo de diálogo por reglas, a partir de una ramificación de nodos que contemplan todas las variantes que pueden tener lugar en una conversación.

Estos nodos son los estados u “hojas” dentro de ese “árbol”, los cuales son activados cuando se cumple una determinada condición compuesta por una combinación de las mencionadas entidades, variables de contexto e intenciones.

A cada nodo se le configura previamente una determinada respuesta, como un mensaje, un salto a otro nodo, una imagen, una URL o cualquier otro servicio que pudiera darte una página web, de la misma manera que se le vincula a cada acción predicha en el caso del algoritmo.

Ejemplo de flujo de diálogo basado en estructura jerárquica de IBM Watson Assistant

Intenciones

Hemos aludido a las intenciones (o en inglés intentsen numerosas ocasiones. Ya sabemos que son el resultado predicho por el algoritmo del NLU. En concreto, para un mensaje de entrada, el NLU calculará el porcentaje de afinidad o confianza (confidence) con el que considera que se aproxima a cada intención para las que ha sido entrenado a identificar.

Por ejemplo, imagina un chatbot que asiste a los usuarios sobre servicios técnicos en el departamento de una empresa. Supongamos que este chatbot está diseñado para atender a los trabajadores en 2 dominios diferentes: “Resolver incidencia” y “Solicitar un dispositivo”.

Por tanto, tendría dos intenciones (intents). Una por cada conocimiento del contexto que queremos que domine.

Continuando con el ejemplo, si el usuario abre el canal de conversación y dice: “Mi ordenador no se conecta con la impresora” (variables de entrada) el chatbot debería predecir la intención “Resolver incidencia” (variable de salida o clasificación).

1ª figura: Datos/frases/vectores etiquetados según clases A y B. 2ª figura: Clasificación una vez entrenado el algoritmo

En el ejemplo anterior el usuario podría haber utilizado muchas variantes: “El ordenador no detecta a la impresora”, “La impresora no responde al ordenar la impresión”, “No encuentro la impresora en las listadas en la configuración de impresión.”, etc.

Los matices de todas estas muestras irán almacenándose en los parámetros del algoritmo utilizado, por tanto, cuantas más frases de ejemplo, el bot tendrá una mayor probabilidad de acertar la intención del usuario.

Estas frases de entrenamiento deben ser las más representativas de una determinada intención. Es decir, las peticiones más frecuentes que esperamos recibir por parte del usuario.

Aquí va un fragmento de la creación de una intención del ejemplo utilizado anteriormente generado con la interfaz del chatbot de IBM.

Entidades

Por otro lado, si recuerdas en la explicación del CORE apareció el concepto de entidad (entity). Estas son palabras o expresiones clave dentro del mensaje del usuario que el chatbot está programado para reconocer y que activan determinadas acciones cuando se detecta su presencia.

Además, para cubrir todas aquellas posibles variantes de esas entidades que puede escribir el usuario para referirse a lo mismo, estas se puede complementar con, o bien un grupo de sinónimos si aluden a palabras o bien con expresiones regulares para códigos alfanuméricos como un número de teléfono, DNI, etc.

Siguiendo con la línea de ejemplos anteriores, imagina que un usuario dice al chatbot: “Mi navegador ha volcado un error 403 cuando he introducido la página web, ¿a qué se debe?”.

En primer lugar el NLU predecirá la intención “Resolver incidencia”. Después, comprobará si reconoce alguna entidad en el mensaje.

Supongamos que previamente hemos creado estas dos entidades:

1. “Navegador”: junto con otras palabras con significados similares.

2. “Error”: con expresión regular de todos los códigos que pueden aparecer en el navegador (en este caso regex de 3 dígitos).

Así quedarían estas entidades creadas dentro de la interfaz de IBM:

Por último, el CORE, recibirá la tupla “intención-entidades” , considerará cuales han sido las últimas acciones devueltas por el bot y lo introducirá en su algoritmo para predecir la acción que corresponde.

Historias

Las historias también es un recurso utilizado por el CORE. En concreto, es la información de la que se nutre el algoritmo a la hora de entrenarse.

Estas aúnan todos los posibles contextos por los que se contempla que se desarrolle la conversación. En otras palabras, son los esqueletos de todas las conversaciones previstas entre el usuario y el chatbot. Estos esqueletos están compuestos por intenciones, entidades u otras variables contextuales (slots).

De momento, solo he visto su aplicación en el framework Rasa. En la imagen inferior se puede observar un ejemplo del formato utilizado para recopilar estas historias. Con ello, el algoritmo podrá proceder con el entrenamiento.

Source

La interpretación es la siguiente: el nombre de la historia (##) es “camino feliz”, las intenciones (*) son “saludo”, “contactar ventas” y “agradecimiento” . Las respuestas () pueden ser texto (utter) o acciones, en este caso en forma de cuestionario (form) junto con las entidades o slots ({}) que debe identificar y almacenar.

Si te ha gustado el artículo puedes clicar 👏 tantas veces como quieras. Además, puedes seguir mi cuenta para estar al tanto de futuras publicaciones

Si quieres pasar a la acción, puedes echar un vistazo a este ejemplo de NLU sencillo en Python:

Por Guzman Gomez

Ingeniero de Machine Learning especializado en Chatbots

Deja una respuesta

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