¿Qué comemos hoy? Cocinando con Watson en 10 minutos. Parte II

By 05/07/2017

Ana López Mancisidor

Ana López Mancisidor
Cloud & Cognitive Technical Leader SPGI

En el artículo anterior repasamos las características generales de un chatbot cognitivo e importamos un ejemplo para mostraros sus capacidades. En este artículo vamos a construir paso a paso este ejemplo para que aprendáis a crear y configurar un chatbot desde cero utilizando el servicio cognitivo de Watson Conversation.

Si no tienes una cuenta en Bluemix, te puedes crear una de prueba accediendo a http://bluemix.net.

Una vez hayas hecho login en Bluemix y 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:

Chatbot - Image 1

Da un nombre al servicio Watson y pulsa sobre el botón de Crear el servicio.

Chatbot - Image 2

Pulsa sobre Launch tool para comenzar la configuración y haz login con tu id para comenzar con la interfaz visual que te ayudará a diseñar tu conversación.

Vamos a crear un nuevo workspace donde se almacenará la configuración de nuestro chatbot. Para ello selecciona la opción de Create y configura un nombre y el idioma que prefieras. Como puedes ver, Watson Conversation está disponible en múltiples idiomas además de ingles y español:

Chatbot - Image 3

Chatbot - Image 4

Automáticamente entrarás en la configuración del nuevo workspace que acabas de crear. Vamos a ir paso a paso en la configuración de un ejemplo sencillo que te asesorará sobre diferentes opciones de desayuno, comida y cena.

Lo primero que haremos será crear las diferentes Intenciones (posibles significados del propósito u objetivo que quiere el usuario). Comenzaremos por crear una Intención cuando el usuario nos salude. Para ello, ve a la pestaña de Intents y pulsa sobre Create new. Da un nombre a la intención #Desayunar y añade varios ejemplos de cómo un usuario expresaría que quiere desayunar al chatbot para entrenar al sistema:

Chatbot - Image 5

Repite los mismos pasos y añade nuevas Intenciones con los siguientes ejemplos para:

#Despedida

    Adios

    Muchas gracias

    Bye

    Hasta la próxima

    Hasta luego

#Comer

    Me gustaría comer

    No sé qué comer

    Me gustaría comer algo al mediodía

    ¿Qué me aconsejas para comer?

    Quiero comer

#Cenar

    ¿Qué puedo cenar?

    Voy a cenar

    ¿Qué ceno?

    ¿Qué me aconsejas para cenar?

    Me gustaría tomar algo por la noche

Una de las ventajas de Watson Conversation es que gracias a sus capacidades de procesamiento de lenguaje natural y machine learning será capaz de identificar la intención del usuario, aunque no lo exprese exactamente con las mismas palabras.

Vamos a ir probando cómo funciona Watson Conversation… Para ello ve a la pestaña de Dialog y crea un nuevo diálogo. Aquí es donde definimos el flujo de combinaciones pregunta-respuesta según la intención del usuario y el contexto. Por defecto, Watson nos crea un árbol con dos nodos: el de Bienvenido que se ejecutará siempre al comienzo del chatbot, y el de En otras cosas que se ejecutará si en otros nodos no encuentra ninguna coincidencia. Los nodos se chequean uno a uno de arriba a abajo.

Para configurar el mensaje de bienvenida, pulsa sobre el nodo superior de Bienvenido, y en la respuesta escribe el mensaje de bienvenida que quieres mostrar al inicializar el chatbot.

Para que tu chatbot sea más personal, hemos pedido al usuario que se identifique, y guardaremos su nombre en una variable de contexto, que luego podremos referenciar a lo largo de la conversación para llamar al usuario por su nombre. Para ello, crea un nodo hijo:

y configúralo según la siguiente pantalla. Como ves, en el mensaje de respuesta, estamos referenciando la variable $nombre que recoge la entrada de texto del usuario cuando Watson le ha preguntado cómo se llama.

Para recoger esta entrada del usuario, abre el editor de JSON, y añade el siguiente código para la variable de contexto nombre que recoge el nombre del usuario:

Vamos a probar nuestra primera configuración de Watson Conversation. Para ello podemos utilizar el panel de prueba que se encuentra disponible dentro del propio interfaz pulsando arriba a la derecha en el icono de Ask Watson:

Por defecto Watson nos mostrará el mensaje de bienvenida que hemos configurado y nos pregunta por nuestro nombre. Responde con tu nombre, y verás cómo te responde automáticamente con el mensaje y nombre personalizado que hemos introducido:

Vamos a continuar con la configuración de nuestro chatbot, ya que si introduces cualquier otra respuesta, todavía Watson no sabe qué responder e irá por defecto al nodo de En otras cosas y mostrará el mensaje de respuesta que hayamos configurado ahí.

En este tutorial haremos una configuración muy sencilla, en el que para el desayuno y cena responderemos con un mensaje predefinido, y para la comida haremos una configuración más avanzada para entender el concepto de Entidades y cómo podemos solicitar más información al usuario, como por ejemplo el número de personas que van a comer.

Para configurar la respuesta cuando el usuario indica que quiere desayunar, iremos a la pestaña de Dialog, y crearemos un nodo debajo de Bienvenido al que llamaremos Desayuno y que configuraremos de la siguiente manera:

Cuando el servicio de Watson detecte que la intención del usuario es #Desayunar (el símbolo # indica que estás referenciando la Intención, responderá con un mensaje de respuesta al usuario -la variable $nombre cogerá dinámicamente el nombre del usuario para responder al usuario con su nombre). Prueba a escribir en el chatbot de prueba un mensaje indicando que quieres desayunar (por ejemplo, aunque no se haya escrito explícitamente como ejemplo “¿quiero que me aconsejes qué desayunar?”, Watson interpreta el lenguaje natural y lo asocia con la intención de desayunar y te responde correctamente):

De manera similar crea un nuevo nodo para las Intenciones #Cenar y #Despedida y prueba la respuesta de Watson:

Vamos ahora a algo un poco más elaborado para la Intención #Comida, que es la comida más importante del día J. Según lo que el usuario quiera cocinar (carne, pescado, verduras, pasta, fruta…) la respuesta del chatbot de MasterCheff será diferente (no es lo mismo cocinar a la plancha una carne que cocer pasta). Para ello utilizaremos las Entidades, que nos servirán para clarificar y especificar el contexto para una Intención.

Por ejemplo, en nuestro caso, crearemos una Entidad para agrupar las diferentes opciones de Comida: Carne, Pescado, Frutas, Verduras, Pasta (y sinónimos) … ya que, aunque la Intención de cocinar para comer es la misma, cada valor de la entidad tendrá una respuesta diferente. Para ello, vamos a la pestaña de Entities y añadimos una nueva entidad @Comida con los siguientes valores (para cada valor puedes añadir sinónimos que el usuario podrá utilizar indistintamente):

Tip: para referenciar una Intención utilizarás el símbolo #, para referenciar una Entidad el símbolo @, y para referenciar una variable el símbolo $

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). Activa todas para que estén disponibles en la configuración del flujo de diálogo:

Vamos ahora a configurar el diálogo para cuando el usuario dice que quiere comer. Como hicimos anteriormente, crearemos un nuevo nodo, que el chatbot reconocerá con la Intención #Comer, pero en este caso vamos a utilizar una funcionalidad avanzada de Watson Conversation que nos va a permitir solicitar al usuario cuántas personas van a comer, y qué es lo quiere comer para darle la respuesta más adecuada. Para ello, selecciona la opción Customize y chequea la opción de Slots que nos permitirá configurar en el mismo nodo qué información adicional necesitamos:

En el nodo del diálogo aparecerá una nueva sección para configurar los slots que quieres preguntar al usuario. Crea dos slots y configúralos con la siguiente información:

Watson detectará automáticamente si en la respuesta del usuario cuando quiere comer ha especificado cuántas personas van a comer y qué quiere para comer, y si no lo ha indicado preguntará por esta información.

En el caso de @Comida, deberemos contestar con diferentes respuestas según lo que más le guste al usuario. Podríamos crear nodos hijos que para cada combinación de Intención #Comer y cada una de las #Entidades nos responda de manera diferente, o podemos configurarlo en el mismo nodo con las propiedades avanzadas de configuración del Slot. Para ello, selecciona la opción de configurar el Slot:

y en la pestaña Found añade una nueva condición y respuesta por cada uno de los valores de la entidad @Comida que has creado:

Como último paso, añade una respuesta en la pestaña Not found cuando el usuario no ha contestado a qué quiere comer.

Ya está!!! Vamos a probar la conversación:

 

Prueba con otras conversaciones y verás cómo Watson te responde.

En el siguiente enlace te puedes descargar el fichero que implementa este workspace de ejemplo e importarlo si no has llegado hasta el final.

El servicio de Watson Conversation te ofrece muchas más capacidades para configurar tu flujo de preguntas – respuestas simples, como poder redireccionar de un nodo a otro, incluir código en las respuestas… Para más información 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

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…

Esta misma conversación podrá, además de interactuar con diferentes canales, incorporar otros servicios cognitivos de Watson, como conversión voz-texto y viceversa, análisis de personalidad y tono de la conversación, reconocimiento visual de imágenes, etc…

Tambié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…

¿Quieres ver más casos? ¡Echa un vistazo a la web para desarrolladores!

[autopilot_shortcode]