Contenido


Desarrollo de Chatbots con Watson Conversation

Comments

Pero ¿qué es "Watson"?

Para hablar de Watson merece la pena relatar un breve hecho histórico: Watson fue lanzado en 2011 y en su primera aparición en Jeopardy le superó a dos expertos del juego. Posteriormente, con mucho estudio y desarrollo, Watson se convirtió en APIs disponibles en IBM Cloud.

Watson Conversation, concretamente, se trata de una API para el desarrollo de Bots, con una interfaz única para que hasta una persona que entienda de TI pueda desarrollar y enseñar contenidos al bot.

¿Qué haremos aquí?

Después de las debidas presentaciones, ¡en este tutorial haremos un chatbot para pedir pizzas! En este caso, más importante que el tema del Bot es la comprensión de la interfaz de Watson Conversation. El tutorial quedó un poco extenso, pues expliqué cada una de las partes de la API, cualquier duda puede preguntar, ¿vale?

Creando la API:

Para crear la API usted necesita crear una cuenta en IBM Cloud, que le dará acceso a diversos servicios, tanto de Watson como de Infra y de Plataforma ¡para siempre! (no, no tendrá que ingresar su tarjeta de crédito al utilizar la capa gratis).

Ahora bien, con la cuenta creada, tendrá que ir al catálogo y seleccionar el servicio Conversation al final de la página:

Al hacer clic en Conversation se abrirá la página de abajo, en mi caso, cambié el nombre del servicio para este tutorial, pero esa acción no es necesaria.

Después de hacer clic en Create, usted será dirigido a la página de Conversation. Es bueno saber que en este caso trabajaremos con el Kit de herramientas pero es posible hacer el desarrollo a mano con los SDKs de Watson utilizando las credenciales de la API.

Dentro del kit de herramientas de Watson Conversation haremos nuestro primer Espacio de trabajo, que no es otra cosa que un entorno de conocimiento específico para su bot.

Otro punto importante es no olvidarse de ¡seleccionar el idioma español! Así, utilizará todos los modelos de NLP (Procesamiento de Lenguaje Natural) propios de nuestro idioma.

Listo, ya tenemos nuestro Conversation configurado. Ahora tendremos que completarlo con intenciones y entidades.

Intenciones:

Una intención se trata de una acción vinculada a las preguntas hechas por el usuario. O sea, lo que el usuario busca al decir algo; y sí, podemos decir la misma cosa de diversas maneras, siendo prácticamente imposible entrenar todas las opciones de interacción. De este modo, en Conversation damos ejemplos de frases y posteriormente el sistema hace generalizaciones para identificar otras intenciones comunes.

En este caso, agregué algunas opciones de cómo el usuario entraría en contacto con el bot para pedir una pizza. Y si el usuario dijera: "quiero una pizza ya" (incluso si este ejemplo no está en mi capacitación), se comprendería que la intención es #pedir_pizza.

Hecho esto, podrá agregar diversas otras intenciones como #saludo, #despedida, #informaciones… Llevando siempre en consideración lo que usted desea que su bot sepa responder. Pero, además de la intención tenemos que agregar los complementos de esta acción, así que, vamos a las entidades.

Entidades:

Las entidades son conocidas como los complementos de información. En este ejemplo los complementos serán el sabor de la pizza, el tipo de masa, el código postal y la fecha de entrega (podríamos pedir otras informaciones, pero para este caso, ya es más que suficiente).

Es bueno saber que Watson Conversation tiene entidades de sistema listas que no necesitan ser entrenadas. De esta forma. el primer paso es habilitar a @sys-date para asegurarse de que el bot entienda cuando diga que desea una pizza para mañana, en navidad o en nochevieja…

¡Si desea utilizar las demás entidades de sistema basta habilitarlas!

Ahora bien, además de las entidades de sistema, tendremos que crear otras entidades como se indica a continuación. Tengan en cuenta que al insertar los ejemplos podemos tanto añadir sinónimos, como en el caso de Mozzarella — queso , o agregar patrones (Expresiones Regulares), como en el caso del código postal — [0–9]{5}-[0–9]{3}

Listo, nuestro bot está completado, pero ahora necesitamos crear las reglas de respuesta y el flujo de la conversación.

Diálogo:

Al crear el dialogo, observe que son creadas dos cajas, la de "Bienvenido" y "En otros casos".

Esas dos variables de sistema (bienvenido y en otros casos) son utilizadas para la definición del mensaje enviado por el bot cuando:

a. El usuario entra en la interfaz

b. El bot no encuentra ninguna respuesta correlacionada a lo que el usuario ingresó (el famoso "no sé hablar sobre eso" o "soy un robot que está siendo entrenado").

Al hacer clic en la caja de welcome podemos cambiar el mensaje, como se indica a continuación:

Es posible agregar variaciones para la misma respuesta de modo secuencial o aleatorio

Para probar las alteraciones basta hacer clic en el símbolo de “chat” a la derecha de la pantalla:

Esa depuración será esencial para chequear si el bot está siguiendo en el camino correcto de diálogo

Ahora necesitaremos agregar un nuevo nodo. Tengan en cuenta que hay la opción de agregar nodos o nodos hijo. Agregando un nodo no tendrá correlación con el anterior mientras el nodo hijo solo se produce si el padre se produce primero.

Por ejemplo: veamos lo que se produciría si agregáramos una intención de saludo además de la de pedir una pizza:

En el caso de la izquierda el usuario no necesita enviar un “hola” para posteriormente pedir una pizza. En cambio, en el caso de la derecha, el nodo de “pedir_pizza” solo ocurre después de un saludo.

Eso es extremamente importante para las condiciones que necesitan seguir una secuencia.

De esta forma, en nuestro caso, utilizaremos la primera opción,

Observen que los nodos serán siempre un "if then else"- si reconoce una condición responda con esa información, de lo contrario, pase a el siguiente nodo.

¡Hasta aquí es sencillo, Stéfany! ¿Pero qué hacemos si para la pizza tenemos 4 variables que serán recopiladas: el sabor, el tipo de masa, la fecha y el código postal de entrega?

Vamos a crear un nodo con la intención depedir_pizza, pero es un caso particular en el que utilizaremos las Ranuras:

Las ranuras son utilizadas para la recopilación de información a lo largo de la conversación como alternativa a los formularios. Lo mejor es que al interactuar con el bot el usuario no necesita enviar las informaciones en un orden específico ya que la ranura analiza variable por variable.

En nuestro caso, el bot recopilará las informaciones necesarias, pero de una forma inteligente. Observen la imagen a continuación, en la que habilito las ranuras y agrego una condición:

1. Abrir pestaña de personalización de respuesta;

2. Habilitar las ranuras;

3. Agregar una ranura (una nueva variable);

4. Agregar una nueva condición. En este caso, por ejemplo, verifico si el usuario indicó el sabor de la pizza con la entidad @sabor;

5. Creación de variables de contexto , que posteriormente puede ser manipulada. Toda variable de contexto en Conversation se indica por un $;

6. Insertar el texto que el bot debe enviar en el caso de no reconocer la variable (en este caso, pregunta "¿Qué sabor quiere?");

7. En este engranaje, abriremos el panel de configuraciones de la variable, que se muestra en la imagen de la derecha;

En este panel vemos que añadí una información en "not found". Esto es, si el usuario continúa enviando alguna información que no corresponda a la condición indicada, el bot enviará otro mensaje. Como en este caso "no informó un sabor válido". En este mismo panel, podría ser agregada una información en "found" en caso de que la variable fuera reconocida.

Una vez que ese flujo fue detallado, realicé el mismo proceso para todas las variables.

Para el código postal en específico, considerando que queremos que el bot literalmente guarde lo que el usuario ha escrito, cambiaremos las características de la variable del contexto:

La variable de contexto tiene la siguiente configuración: información_entrega.literal

Finalmente, queremos que el bot indique el resumen del pedido. Podemos manipular las variables para crear una respuesta.

¡No comprendí esta inteligencia! Pues bien, utilizando las ranuras, si el usuario ingresa “quiero una pizza”, el bot preguntará variable por variable como un asistente. Sin embargo, supongamos que el usuario ingrese “envíame una pizza de queso con masa delgada para mañana”, el bot apenas preguntará el código postal de la entrega, pues las demás variables ya fueron reconocidas.

Y entonces…. ¡Vamos a ponerlo a prueba!

En estos ejemplos, hice tres tipos diferentes de interacciones con el bot y ¡este consiguió reconocer las diversas variables correctamente!

¡Fin!

Ahora, teniendo los conceptos más claros, ¡basta completar el bot con más contenido e invitarme a comer la pizza! (me gusta la de "cuatro quesos", ¿vale?)

Existen otras funciones de conversión, como el Jump, la cual abordaré en los próximos tutoriales.

Y, si desea acceder a esta demostración, que está totalmente lista, vea el enlace a continuación:

Montar un diálogo de un chatbot para pedir pizza - IBM Code, la nueva función Watson Conversation Slots le permite crear un diálogo complejo con menos nodos. Utilizar ranuras en esto…developer.ibm.com

En mi git también está el código para importar el espacio de trabajo:

smazon/demoChatbotBR Contribuya al desarrollo de demoChatbotBR mediante la creación de una cuenta en GitHub.github.com

¡Gracias!


Recursos para Descargar


Comentarios

Inicie Sesión o Regístrese para agregar comentarios.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Cloud computing
ArticleID=1063633
ArticleTitle=Desarrollo de Chatbots con Watson Conversation
publish-date=04062018