Arquitectura de un Chatbot
Al comenzar a desarrollar un Chatbot es bastante difícil encontrar algún tipo de información que permita entender como los actores involucrados dentro de un Chatbot se relacionan entre sí. La mayoría que ha comenzado en esta área se ha colgado de algún videotutorial en youtube, de algún tutorial de empresas como Chatfuel, DialogFlow o incluso, han comenzando directamente en el código “Get Started” de Facebook, y en ninguno de esos recursos puedes encontrar algún tipo de diagrama, arquitectura o modelo que te permita entender de manera general los componentes principales de un Chatbot. A través de este artículo dejo con ustedes la arquitectura que he desarrollado a partir de estos últimos años de experiencia desarrollando bots y que permiten entender a grandes rasgos como funciona un Chatbot.
Parto comentando que esta imagen no es 100% mía, fue creada por Dion Hinchcliffe el 2016 y la adapté para poder encapsular todos las diferentes entidades que participan dentro de un Chatbot. Se lee de izquierda a derecha, partiendo desde el usuario que interactúa a través de un canal, este canal nosotros lo llamamos Proveedor. Si bien hablaremos del Proveedor en otras publicaciones, por el momento lo definiremos como la interface mediante el cuál el usuario habla con nuestro bot. Siguiendo hacia la derecha, como capa intermedia, está UX, como sabemos el UX en los Chatbots se aplica en la conversación y en la interface, por ende nos encontraremos como 2 tipos de UXs… UX Interface y UX Writting, la primera se dedica a definir como mostraremos el contenido dentro del canal y generalmente viene construida por el Proveedor, por ejemplo Facebook y su interface de Messenger. La segunda se refiere a como el bot se comunicará con el usuario, textos, imágenes, botones, videos, flujos conversacionales, contextos, intenciones, eventos, parámetros, entidades y en fin, toda la serie de herramientas que permitirán responder todo lo que el usuario te hable.
UXI y UXW están relacionadas entre sí y no es posible crear una buena conversación con el usuario sin contar con los elementos necesarios en la interface, un ejemplo básico sería la posibilidad de enviar emoticones, si Facebook Messenger no contara con esa opción en su API, sería imposible ver y responder emoticones e identificar emociones o para-lenguajes del usuario.
Continuando con el diagrama, llegamos al Integrador, esta es la pieza clave de un Chatbot, entrega todas las herramientas de NLP, Machine Learning y es la parte de inteligencia Artificial de un Chatbot, sin ella los chatbots sólo serían reglas predefinidas y no podrías decir que trabajas en AI. Dentro del Integrador nos encontramos con las primeras siglas: NLP, NLU y NLG. NLP es Natural Language Processing, y se refiere al proceso que realiza la máquina para adquirir, identificar y procesar el lenguaje natural, una vez procesado se pasa a otro proceso llamado NLU o Natural Language Understanding, que se refiere a cuando la máquina una vez procesado el lenguaje lo logra entender, o mejor dicho, identifica la Intención del usuario ¿Qué es lo que quiere el usuario? pedir una pizza, reservar una pieza, saludar, en fin… una Intención de comunicación, la razón por la que el usuario habla con el bot. Como pueden ver el NLU es un proceso que va de la mano con ML o Machine Learning, el Machine Learning que se aplica en los chatbots generalmente, y recalco el generalmente, es Machine Learning No Supervisado de Clasificación; es decir, se realiza un dataset de posibles intenciones que el usuario desea del bot, previamente predefinidas y se clasifican, posteriormente cuando el usuario habla se genera un score o puntaje de cada intención clasificada con respecto a la frase u oración que el usuario escribió. Esto se hace a través de algortimos y ecuaciones matemáticas basadas en vectores, y cada empresa como DialogFlow, Chatfuel, L.U.I.S. o wit tiene sus propios algoritmos y metodologías, pero en general todas se basen de una u otra forma en algoritmos de String Distance, una vez identificado los puntajes que van de 0 a 1, el que tenga mayor puntaje, se identifica como la intención que el usuario está tratando de comunicar y se entrega la respuesta, esta respuesta se genera como un NLG o Natural Language Generation, este proceso permite generar lenguaje natural, pero no es que el lenguaje natural se genere de la nada, tampoco que se realice como lo hacemos nosotros en nuestro cerebro, integrando palabras, artículos, pronombres, verbos, sustantivos y generando frases, no… así no sucede, sería lo ideal y quizás en un par de años así sea, de hecho hay algunos ejemplos básicos en internet, todos en inglés que estan comenzando a realizar construcciones de frases y oraciones, pero por el momento el NLG se genera dado que la intención clasificada contiene una respuesta pre-programada, que si bien puede ser costumizada, por ejemplo devolviendo el nombre del usuario o el nombre de un producto, se pre establece para ser retornada al usuario.
Si no entendiste nada de lo anterior, no te preocupes, cuesta tomarle el ritmo a esto y quizás sea necesario leer el parrafo anterior una y otra vez para entender el flujo completo. Como puedes ver, el funcionamiento de un Chatbot integra reglas pre-establecidas e Inteligencia Artificial, pero dado que estamos en las primeros años de la era AI, es muy probable que poco a poco se integre más y más Inteligencia Artificial al proceso. Una cosa más sobre el ML, el Machine Learning es supervisado; es decir debemos entrenar constantemente a nuestro bot para que el puntaje que generé sea preciso y corresponda a la intención que el usuario tiene al comunicarse con el Chatbot, de no ser así el bot podría generar respuestas indeseadas y erróneas. El proceso de Machine Learning, es una tarea interminable de optimización día a día, de optimizar los algoritmos aplicados, revisar las redes neuronales de nuestro sistema, de aplicar procesos Deep Learning pero lo bueno, es que de esto se encargan las empresas Integradoras como DialogFlow, BotNation, wit, etc. Para nosotros es transparente.
Vamos por nuestra segunda taza de café y continuemos… El siguiente punto en el diagrama es el Facilitador. En resumen, el Facilitador no es más que un servidor que puede estar en cualquier hosting y que se comunica con el Integrador dependiendo de la lógica que el negocio tenga; es decir, el objetivo del Chatbot, por ejemplo, imagínate que creamos un Chatbot para ordenar pizzas, en nuestro servidor tendríamos una BDD con todas las pizzas disponibles, con sus ingredientes, tipos de masa, tipos de queso, etc… me dio hambre. Cuando el usuario se comunique con el bot y ordene una pizza, el integrador realizará todo el proceso para identificar la intención del usuario y se comunicará con el Facilitador para saber la lista de pizzas disponibles, todo esto lo generará al usuario, y el usuario a su vez verá desplegado la lista de pizzas disponibles. Una de las preguntas que me han hecho en algunos talleres es porqué todo esto no es posible colocarlo dentro del Integrador, bueno, primero, el Integrador generalmente es una empresa externa al cuál tu no tienes acceso a sus Bases de Datos, pero segundo, y más importante es extremadamente conveniente por eficiencia y descentralización de los flujos de información separar el Facilitador del Integrador. Personalmente, me gusta pensar que
el Integrador es el lado racional del cerebro y el facilitador, el creativo
Por ende, cuando tienes que realizar algo creativo, como ordenar pizzas o pedir el tiempo en una ubicación es mejor dejar a cargo de todo lo relacionado al NLP al Integrador y en Facilitador realizar las tareas lógicas-creativas de tu negocio.
Y eso es, así es la arquitectura de un Chatbot, tres entidades principales, Facilitador, Proveedor e Integrador, cada una con sus funciones bien definidas e interactuando todas entre sí. Por último, es importante tener en cuenta que de la arquitectura de un Chatbot es posible obtener diferentes Modelos de Desarrollo de Chatbots, siendo estos:
- Proveedor — Integrador
- Proveedor — Integrador — Facilitador (el que aparece en el primer diagrama)
- Proveedor — Facilitador — Integrador
Cada uno de estos modelos permiten crear diferentes tipos de Chatbots y se deben utilizar de acuerdo al objetivo que deseamos de nuestro bot, hay modelos que sirven para Contact Center, otros para E-commerce, juegos y en fin, dependiendo de nuestro objetivo será el modelo que utilizaremos. Veremos esto, es un próximo post en Chatbots Chile.