¿Qué comemos hoy? Cocinando con Watson en 10 minutos. Parte I
MasterCheff chatbot: Cómo crear un chatbot cognitivo en 10 minutos
con Watson Conversations que nos ayude a decidir qué cocinar
Los chatbots que interactúan con los usuarios ya no son una moda, son una realidad que viene a quedarse. Según un estudio de Gartner, en el 2018 el 30% de nuestras interacciones con las nuevas tecnologías será a través de “conversaciones” con máquinas inteligentes: https://venturebeat.com/2017/04/18/chatbots-evolve-from-greeting-tool-to-customer-service-must-have/
Frente a la programación clásica, que sigue reglas predefinidas y proporciona siempre los mismos resultados para todos los usuarios, un chatbot cognitivo tiene las siguientes características:
Entender: Los sistemas cognitivos son capaces de entender igual que los humanos, ya sea lenguaje natural, imágenes, texto y/o voz, etc.
Razonar: Entienden la información, pero también son capaces de comprender su significado, concepto y ontología. Proporcionan respuestas basadas en estos razonamientos
Aprender: aprenden continuamente y su valor va aumentando a lo largo del tiempo en base al entrenamiento y en cada interacción con el usuario final.
Interactuar: interactuar con los humanos lo que permite el uso y generación de contexto, lo que permite la ultrapersonalización.
Para un sistema programático el mejor día sería el primero, frente a un sistema cognitivo en que el peor día sería el primero, y luego va aprendiendo y mejorando con la experiencia.
Existen muchos casos de uso en nuestra vida personal y profesional, que pueden beneficiarse ya de esta tecnología de chatbots, y que nos ayudarían a ahorrar mucho tiempo y a tener una mejor comunicación con los usuarios. A nivel empresarial muchos servicios de atención al usuario final o servicios de soporte internos en las empresas están utilizando ya chatbots para ayudar a automatizar procesos de negocio y mejorar la experiencia de los usuarios finales.
Según estadísticas, el 80% de los usuarios de un servicio preguntan siempre por lo mismo (lo que llamaríamos cola corta). Por ejemplo, en un servicio de Help Desk de IT, la gran mayoría preguntan por “cómo puedo resetear mi password” o “cómo puedo instalar una impresora”. El otro 20% de las preguntas que normalmente se reciben son muy dispares (lo que llamaríamos cola larga), como por ejemplo “necesito acceder a la aplicación que me permita conectarme remotamente al servidor de Suecia”.
Es importante diseñar un chatbot que sea capaz de responder a ambos tipos de preguntas y la aproximación para responder a ambas es diferente. Mientras que para las preguntas de la cola corta nos debemos focalizar en entender bien la pregunta, utilizando entendimiento del lenguaje natural y su contexto, para responder adecuadamente de acuerdo a un flujo establecido, en las preguntas de la cola larga nos debemos centrar en identificar la respuesta más apropiada integrando diferentes sistemas de búsqueda y entendiendo la información almacenada en documentos internos, buscadores….
Con IBM Watson podemos crear chatbots tan simples o complejos como deseemos, dando respuesta tanto a preguntas habituales de los usuarios (cola corta) como a preguntas complejas que requieren un conocimiento más experto (cola larga). Los servicios cognitivos de IBM Watson en IBM Bluemix nos permiten crear chatbots y enriquecerlos con otros servicios de traducción, conversión voz-texto o texto-voz, análisis de la personalidad y sentimiento del usuario final para dar una respuesta u otra en función de su estado en un momento dado….
- El servicio de Watson Conversation nos permite crear flujos de conversación de una manera muy simple, de manera gráfica, pero también con múltiples capacidades para crear flujos complejos, aplicando capacidades cognitivas. Así daríamos respuesta a las preguntas habituales (cola corta).
- El servicio de Watson Discovery nos permite extender las capacidades de búsqueda de las preguntas no habituales de fuentes de datos estructurados y no estructurados muy dispares. Con el servicio de Watson Discovery podremos:
- Extraer, convertir, enriquecer y normalizar datos
- Explorar de manera segura datos privados, así como acceso a fuentes de datos públicos
- Enriquecer los datos con conceptos, relaciones y sentimientos a del procesamiento de lenguaje natural
- Entender los datos de manera más rápida y buscar respuestas fiables a las preguntas más complejas realizadas por los usuarios.
En este primer tutorial vamos a aprender cómo diseñar y construir un chatbot muy simple, pero que a la vez resuelve una problemática muy común, que consistirá en un sistema automático de respuesta para ayudarnos a cocinar el menú más adecuado dependiendo de si quieres desayunar, comer o cenar y lo que más te gusta. Para ello utilizaremos el servicio de Watson Conversation. No soy ni mucho menos una experta cocinera, con lo que no te tomes al pie de la letra mis recomendaciones para cocinar J.
Si no tienes una cuenta en Bluemix, te puedes crear una cuenta de prueba accediendo a http://bluemix.net.
Una vez hayas hecho login en Bluemix y hayas creado una organización y un espacio donde alojar tus aplicaciones y servicios, selecciona consultar el Catálogo de Servicios y a la izquierda filtra para que se muestren los servicios cognitivos de Watson a los que tienes acceso. Verás que uno de los servicios disponibles será el de Conversation, que es el que utilizaremos en este tutorial. Selecciona este servicio:
Da un nombre al servicio Watson y pulsa sobre el botón de Crear el servicio.
Pulsa sobre “Launch tool” para comenzar la configuración y haz login con tu id.
Si quieres seguir paso a paso cómo he diseñado todas las preguntas y respuestas de este ejemplo, puedes ir al siguiente enlace donde lo crearás desde cero.
Si no quieres hacer todos los pasos, puedes cargar directamente el workspace de ejemplo que he creado importando el fichero JSON que te adjunto en el siguiente enlace seleccionando la opción de Importar workspace al lado del botón de Create.
Elige importar el fichero JSON que te has descargado que representa la configuración de preguntas y respuestas, selecciona importar todo (Intents, Entities y Dialog) y pulsa en Import:
Vamos a repasar la configuración que hemos hecho:
- Intenciones: En la pestaña de “Intents” aparecen las intenciones del usuario, que son los posibles significados del propósito u objetivo que quiere el usuario. Por ejemplo, los usuarios del chatbot MasterCheff quieren saber qué cocinar y lo expresarán como “Qué puedo cenar”, “Qué puedo comer”, “Qué quiero desayunar” … No todos los usuarios lo expresarán con las mismas palabras, con lo que tendremos que introducir varios ejemplos para entrenar al sistema.
Watson emplea técnicas de Machine Learning y procesamiento de lenguaje natural para aprender y poder entender la intención del usuario, aunque no se exprese de la misma manera. Por ejemplo, en #Cenar veremos como ejemplos “Qué puedo cenar?”, “¿Voy a cenar”, “Qué ceno?” … Pero si por ejemplo el usuario escribiera “Quiero cenar” que no está explícitamente escrito como ejemplo, Watson reconocería automáticamente que la intención es la misma de #Cenar.
- Entidades: Una vez que hemos finalizado de entrenar las intenciones, el siguiente paso será ir a la pestaña de “Entities” que nos servirán para clarificar y especificar el contexto para una intención.
Por ejemplo, en nuestro caso, crearemos entidades para agrupar las diferentes opciones de Comida: Carne, Pescado, Frutas, Verduras, Pasta (y sinónimos) …. ya que cada valor de la entidad tendrá una respuesta diferente (no es lo mismo cocinar a la plancha una carne que cocer pasta) y no es lo mismo un desayuno saludable que no saludable:
Además, Watson Conversation incluye unas entidades de sistema predefinidas de fecha, numéricos… que pueden ser utilizadas automáticamente en cualquier flujo (en nuestro caso por ejemplo utilizamos @sys-number para detectar en la respuesta del usuario cuántas personas van a comer:
- Diálogo: En la pestaña de “Dialog Flow” es donde definimos el flujo de combinaciones pregunta-respuesta según la intención del usuario y el contexto que nos ha dado la entidad. Por defecto, tendremos un mensaje de bienvenida cuando se inicialice el chat y un mensaje de respuesta estándar cuando no se encuentra una respuesta adecuada en el flujo que hemos creado. En este ejemplo hemos creado un flujo muy sencillo, pero éste puede complicarse tanto como queramos.
Cuando Watson recibe una entrada, determinará la intención y entidades y buscará en el flujo de diálogo el nodo que corresponda. Los nodos se chequean uno a uno de arriba a abajo.
Para probar el nuevo chatbot creado puedes crear una nueva aplicación que llame a las APIs de este flujo de conversación, o de manera muy sencilla puedes probarlo activando el botón arriba a la derecha Ask Watson que automáticamente abrirá un flujo de conversación de prueba:
Como ejemplo de flujo de conversación te sugiero que pruebes los siguientes ejemplos (es un flujo de conversación de prueba muy sencillo, con lo que es posible que no tenga todas las respuestas para ganar el premio de MaterCheff J). Según el usuario vaya respondiendo, el sistema detectará automáticamente #Intenciones y @Entidades e irá respondiendo según el flujo que hemos creado:
Resetea y prueba otro flujo, en este caso para aconsejarnos qué comer y cómo hacerlo:
Y por último prueba también este flujo para la cena (Watson te aconseja no cenar mucho):
Una vez que hayas configurado y entrenado al servicio de Watson Conversation, el siguiente paso será el construir tu aplicación que llamará a tu servicio de conversación desde cualquier canal/interface. Si pulsas sobre Deploy tendrás diferentes ejemplos de cómo construir una aplicación de prueba o integrarlo con sistemas de mensajería como Slack, Facebook, Messenger, etc…
Tabién podrás consultar información y analíticas como cuál es el tiempo medio de conversación, qué intenciones y/o entidades se han solicitado más por los usuarios, etc…
Si quieres más información sobre cómo construir chatbots con Watson Conversation, te sugiero que accedas a Watson Developer Cloud donde tendrás acceso a documentación y muchos más ejemplos: https://www.ibm.com/watson/developercloud/doc/conversation/index.html
¿Quieres ver más casos? ¡Echa un vistazo a la web para desarrolladores!