Cómo construir un chatbot — parte 1

Decidimos armar una guía básica sobre cómo crear un chatbot basado cien por ciento en Natural Language Processing (NLP).

Roberto González
Aerolab Stories

--

Al parecer, el 2017 es el año en que la Inteligencia Artificial por fin se va a convertir en algo masivo. Durante todo el 2016 vimos cómo distintos sectores comenzaron a involucrarse en este campo y se publicaron muchísimos papers interesantes al respecto, aunque también nos topamos con una gran cantidad de opiniones poco creíbles sobre el futuro de los self-driving cars y, por supuesto, los chatbots.

Pero esto no es ninguna sorpresa. Cada vez que surge una nueva tecnología, aparecen personas que se dejan llevar por el hype y empiezan con las teorías conspirativas. Hoy en día, abundan los artículos que aseguran que la inteligencia artificial va a transformar a los humanos en seres obsoletos y que en cualquier momento nos vamos a ver rodeados de cabezas gigantes que nos exigirán que les mostremos lo que tenemos.

El futuro. Vean Rick and Morty.

La realidad, por suerte, es un poco diferente. Si bien es cierto que en los últimos años se produjeron grandes avances, es importante tener en cuenta que la Inteligencia Artificial aún es un campo relativamente joven. Por lo tanto, corremos el riesgo de sobredimensionar el potencial de las tecnologías actuales y creer que una librería de Javascript podrá hacer cosas que no son posibles. Eso nos lleva a construir productos ineficientes.

Pero hoy me gustaría enfocarme en los chatbots. En el último tiempo la popularidad de los chatbots creció exponencialmente. Esto se debe a que, por un lado, Facebook, Slack y Telegram abrieron sus plataformas, y, por el otro, a que compañías como Wit.ai y Api.ai crearon la salsa secreta de NLP que necesitamos para que estas cosas funcionen como debe ser.

Nuestra Experiencia

En Aerolab experimentamos constantemente con cosas nuevas y todo el tiempo buscamos entender de qué manera las tecnologías emergentes pueden influenciar la experiencia de los usuarios. Por eso, nos propusimos encontrar la forma de aprovechar el nuevo paradigma que traen los chatbots: las Interfaces Conversacionales

Cada vez que diseñamos un producto, apuntamos a entender a los usuarios, sus modelos mentales y la forma en que piensan e interpretan el mundo que los rodea. Luego utilizamos estos conocimientos para construir interfaces que sean fáciles de usar.

Es cierto, es más un arte que una ciencia, pero lo importante es que en los últimos treinta años nos acostumbramos a tener un control absoluto sobre la UI. En una aplicación sabemos exactamente qué elementos deben formar parte de la interfaz y qué hace cada uno de ellos. En este sentido, desde el lado del desarrollo todo es previsible. Lo peor que puede sucedernos es que un usuario no entienda cómo utilizar alguna de las funciones. Pero eso es todo.

Las Interfaces Conversacionales cambian radicalmente esta idea. Ahora debemos trabajar con el lenguaje, que además de ser impredecible es extremadamente difícil de interpretar por parte de las computadoras, incluso para una IA avanzada.

Esto reduce drásticamente el control y margen de error con el que contamos habitualmente, por lo que debemos incorporar estas limitaciones al proceso de diseño desde las etapas más tempranas.

Trabajar con este nuevo paradigma presenta algunos desafíos bastante específicos, por eso decidimos armar una serie de artículos con el objetivo de brindarles una guía básica de cómo diseñar un producto basado enteramente en Natural Language Processing.

Creemos que sólo así podremos lograr una UX cada vez más integrada con nuestras vidas diarias.

Diseñando historias

Una Interfaz Conversacional es una herramienta que nos permite interactuar con una computadora utilizando el lenguaje como medio principal. Los ejemplos más conocidos son Siri, Google Now y Cortana, aunque también existe una amplia variedad de chatbots basados en Facebook Messenger, Telegram y Slack. En este artículo nos vamos a centrar en la creación de chatbots de texto, dado que son los más populares y los más accesibles para desarrolladores.

El primer problema que nos vamos a encontrar aquí es que las conversaciones son absolutamente impredecibles. Si alguna vez trabajaste en la creación de una app, seguro sabés que la imprevisibilidad es el enemigo natural de los diseñadores y desarrolladores. Por eso, lo primero que debemos hacer en estos casos es deconstruir las conversaciones en segmentos más pequeños y fáciles de manipular, lo que nos lleva al principal concepto detrás de las Interfaces Conversacionales: las Historias Conversacionales.

Las historias sirven como marcos operativos para el diseño conversacional. Una historia es una pequeña pieza de una conversación que cubre intercambios simples con el usuario, en la que buscamos interpretar qué acción quiere llevar a cabo la persona y cómo podemos responder de forma adecuada. Vimos este concepto por primera vez en Wit.ai y nos parece una forma excelente de pensar las conversaciones como elementos visuales.

Dado que no se puede guionar una conversación con un usuario de forma predictiva sin tener variaciones, lo que sí podemos (y deberíamos) hacer es dividir una charla extensa y compleja en muchos intercambios pequeños, tales como manejar saludos, responder preguntas simples y definir pequeños fragmentos conversacionales que podemos diseñar y manipular con mayor facilidad.

Al crear estas historias autocontenidas ayudamos a los bots a manejar conversaciones largas. Esto nos permite construir un producto que se siente sólido y bien diseñado, incluso tras sesiones de uso prolongado.

Este es un concepto bastante nuevo, así que veamos algunos ejemplos prácticos:

Usuario: ¡Hola!
Chatbot: ¡Hola! ¿En qué puedo ayudarte?

Lo peor que podemos hacer en esta etapa es codear algo como esto:

If (userSays === ‘¡Hola!’) {send(‘¡Hola! ¿En qué puedo ayudarte?’),}

¿Por qué?

El lenguaje es extremadamente maleable, lo que significa que los usuarios van a encontrar infinitas maneras de decir cualquier cosa. Procesar conversaciones simplemente comparando texto es, en el mejor de los casos, ingenuo.

Pero tranquilos. Hay una forma de lidiar con este problema. Al utilizar NLP podemos pedirle a una IA que interprete las intenciones del usuario. Por lo tanto, el foco del análisis deja de ser ¿Qué escribió el usuario? y pasa a ser ¿Qué quiso decir el usuario?

De esta forma, podemos retomar el ejemplo anterior con una mirada más profunda sobre el significado del mensaje y clasificar su intención como un saludo.

Usuario: ¡Hola! [Intention: Greeting]
Chatbot: ¡Hola! ¿En qué puedo ayudarte? [Response to a Greeting]

En este ejemplo, la historia no se construye en torno a «el usuario dijo ¡Hola!», sino en torno a «el usuario nos está saludando». El motivo de esto es que existen muchas formas de saludar a alguien (Aló, Holis, Holu, ¿Cómo va?, ¿Todo bien?), pero todas significan lo mismo: ¡Hola!

Es decir, que podemos aplicar la misma historia conversacional a mensajes muy distintos.

Usuario: ¡Holis! [Intention: Greeting]
Chatbot: ¡Hola! ¿En qué puedo ayudarte? [Response to a Greeting]

Como ya sabemos que estamos recibiendo un saludo, entonces no hay riesgo en dar la misma respuesta en ambos casos. No importa si el usuario dice Hola, Hey, Holis o cualquier otra cosa. Al usar un buen motor de NLP nos aseguramos de que todas estas formas de saludar sean tratadas de la misma manera. Esto nos permitirá que nuestro chatbot se comporte como una herramienta inteligente y flexible, aún frente a inputs impredecibles.

Pensar en intenciones nos facilita el trabajo porque en lugar de comparar strings podemos dárselas a una IA para que clasifique el mensaje y extraiga la información necesaria del texto, ya sea la intención principal o incluso fechas y lugares mencionados por el usuario.

Manejando diferentes tonos

Ahora bien, ¿qué pasa si queremos probar un enfoque más innovador? Veamos el siguiente ejemplo:

Usuario: Le hago llegar mis más cordiales saludos en nombre de la Reina de Francia
Chatbot: ¡Hola! ¿En qué puedo ayudarte?

Si bien no estoy seguro de si Francia tiene Reina (Gabrielle Gatti dice que los franceses no son muy fanáticos de la monarquía), en este caso la respuesta no encaja con el tono ridículamente formal del usuario. Si bien podemos tomarlo como un saludo normal y seguir con nuestras vidas, también podemos divertirnos un poco y darle al usuario una interacción un poco más personalizada y memorable.

Para hacerlo, sólo tenemos que diseñar una historia nueva y clasificar este tipo de interacción bajo una intención diferente, por ejemplo: ‘Formal Greeting’. De esta manera, podemos distinguir entre una y otra categoría y responder de forma acorde en cada caso.

Usuario: Le hago llegar mis más cordiales saludos en nombre de la Reina de Francia [Intention: Formal Greeting]
Chatbot: A su servicio, mi Lady. ¿En qué puedo serle útil en esta ocasión? [Response to a Formal Greeting]

Pensar los mensajes que recibimos en términos de intención y utilizar un motor de NLP sólido ayudan a que la tarea de programar un Chatbot sea mucho más simple. Las historias son una herramienta poderosa para el diseño y nos ayudan a deconstruir las conversaciones en componentes más pequeños, simples y fáciles de codear, entender y testear.

Si bien el ecosistema de los Chatbots es relativamente nuevo, este es uno de los paradigmas de diseño que mayor potencial muestra. Gracias a Wit.ai, Api.ai y otras plataformas de NLP, podemos empezar a diseñar una categoría de productos totalmente innovadora que a su vez nos ofrece una mirada totalmente distinta acerca de cómo concebimos nuestros productos.

En artículos siguientes profundizaremos el concepto de Machine Learning, prototipado y todas las nuevas herramientas que tenemos a nuestra disposición como Product Designers.

¡Estén atentos!

Edición: Guillermo Vidal Quinteiro
Traducción: Bautista Aguiar

--

--