Recientemente he colaborado en varios proyectos relacionados con chatbots y he tenido la oportunidad de debatir con expertos del sector sobre las principales dificultades que se suelen encontrar en este tipo de proyectos. Aunque cada vez es más fácil construir asistentes conversacionales, parece que hay algunos problemas que surgen sistemáticamente a medida que el chatbot crece, como consecuencia de no tener una arquitectura de intenciones y contenido adecuada.

Algunos síntomas de una mala arquitectura de intenciones son:

  • El chatbot se confunde a menudo entre dos intenciones, que casualmente tienen frases de entrenamiento similares.
  • El chatbot no parece coincidir con lo que dicen algunos usuarios con la intención correcta aunque ya esté implementada, y es engorroso extraer mejores frases de entrenamiento de la gran cantidad de datos conversacionales recopilados.
  • A pesar de que la intención correcta coincide, el chatbot no consigue resolver los problemas de los usuarios, éstos dan opiniones negativas y no está claro cómo mejorar el servicio.

En este artículo, propongo una forma de diseñar intenciones con el objetivo de evitar estos malos síntomas.

Tabla de contenidos

Entradas del chatbot: texto libre y respuestas de elección múltiple

Me ocuparé principalmente de los chatbots cuya entrada puede ser tanto de texto libre o de voz (y, por tanto, de clasificación de la intención), como de elección múltiple. Aceptar texto libre o voz en un chatbot tiene dos ventajas principales:

  • El usuario puede decir lo que quiere y obtener una respuesta adecuada, sin tener que navegar por una secuencia de preguntas de elección múltiple. Esto significa que al principio de la conversación hay un factor de bifurcación muy alto, es decir, hay un gran número de posibles caminos de conversación que se pueden tomar desde un solo paso de la conversación. Esto no puede conseguirse con chatbots de elección múltiple, ya que la lista de opciones múltiples sería demasiado larga para que cupiera una sola respuesta, lo que daría lugar a caminos de conversación más profundos. Sin embargo, a medida que aumenta el factor de ramificación, también aumenta la probabilidad de que el chatbot dé una respuesta errónea porque hay más intenciones entre las que elegir.
  • Conseguimos ver lo que el usuario quiere realmente, ya que es libre de escribir o hablar. Esto significa que obtenemos datos que podemos analizar para mejorar el chatbot a lo largo del tiempo, sin involucrar a agentes humanos.

Sin embargo, las entradas de opción múltiple tienen también importantes ventajas sobre el texto libre:

  • Aunque el chatbot no haya entendido exactamente lo que el usuario quiere, puede proponer alternativas plausibles en forma de respuestas de opción múltiple. Proponer más soluciones posibles es mucho mejor que proponer sólo una, pero equivocada.
  • Es más fácil entender los comentarios de los usuarios si provienen de respuestas de opción múltiple.

La buena noticia es que podemos utilizar ambos modos de entrada en el mismo chatbot, utilizando el mejor en la ocasión adecuada. Veamos un ejemplo con un nuevo chatbot. Los únicos intents serán el Welcome Intent, que contiene un mensaje de bienvenida que el chatbot muestra al usuario cuando se inicia la conversación, y el Fallback Intent, que se empareja cuando no se empareja ningún otro intent a la petición del usuario.

Ejemplo de gráfico de intents con los intents de bienvenida y de retroceso. Imagen del autor.

Cómo gestionar intenciones con frases de formación similares

Supongamos que implementamos la intención Renovar suscripción, que responde con «Para renovar su suscripción, haga esto […]» a preguntas como «¿Cómo puedo renovar mi suscripción?«. Podemos distinguir las intents en:

  • System Intents: intents comunes que siempre están presentes en todo chatbot, como los intents Welcome y Fallback.
  • Response Intents: intents cuya respuesta debe resolver la petición del usuario.
Ejemplo de gráfico de intenciones con una intención de respuesta. Imagen del autor.

Más tarde, descubrimos que hay dos procedimientos de renovación distintos: uno en caso de que la suscripción no haya caducado todavía, y otro cuando la suscripción ya ha caducado. La solución ingenua sería crear una segunda intent y tratar de distinguir al máximo las frases de entrenamiento de las dos intents. Creamos la intención Renovar suscripción caducada, que responde con «Para renovar su suscripción, haga esto […]» a preguntas como «¿Cómo renuevo mi suscripción caducada?«.

A continuación, actualizamos la intención Renovar suscripción no caducada para que responda con «Para renovar su suscripción, haga esto […]» a preguntas como «¿Cómo renuevo mi suscripción aún no caducada?«.

Ejemplo de gráfico de intenciones con múltiples intenciones de respuesta con frases de entrenamiento similares. Imagen del autor.

Esto puede parecer correcto a primera vista. Pero, ¿realmente los usuarios especifican en sus preguntas si su suscripción ya ha caducado? Lo que los usuarios quieren es renovar su suscripción y el hecho de que el procedimiento correcto dependa de otros factores no significa que la intención de los usuarios sea diferente. Una mejor manera de gestionar esto es crear una intención cuyo propósito sea desambiguar si la suscripción del usuario ha caducado o no y llevar a la respuesta correcta. Llamemos a esta nueva intent Renew Subscription Is Expired, que pregunta al usuario «¿Ha caducado ya su suscripción?«. A continuación, debemos mover todas las frases de entrenamiento de las Intents de respuesta que creamos antes a esta nueva intent.

Esta nueva intent no es una Response Intent porque su respuesta no debe resolver directamente la petición del usuario. Podemos clasificarla como una intención de desambiguación, cuyo objetivo es encontrar la respuesta correcta entre una lista de opciones similares. Dado que su objetivo es muy similar a las ventajas de las entradas de opción múltiple, podemos hacer que se proporcione al usuario una respuesta de opción múltiple para ella, como «Sí, mi suscripción ha caducado» y «No, mi suscripción no ha caducado«.

Ejemplo de gráfico de intenciones con una intención de desambiguación. Imagen del autor.

Genial. Ahora los usuarios ya no obtendrán respuestas erróneas debido a intenciones con frases de entrenamiento similares, a costa de un paso conversacional más, pero necesario. Además, la desambiguación puede hacerse automáticamente si el sistema ya sabes si la suscripción del usuario ha caducado o no. Una vez que añadamos más intents a nuestro chatbot, tu arquitectura de intents tendrá el siguiente aspecto.

Ejemplo de gráfico de intenciones con múltiples intenciones de desambiguación y respuesta. Imagen del autor.

Se pueden encadenar múltiples intenciones de desambiguación, así como múltiples intenciones de respuesta. Hay que tener en cuenta que el flujo conversacional a través de múltiples Intents de Desambiguación siempre se bifurca en varios caminos posibles. Esto no siempre es cierto para múltiples Intents de Respuesta secuenciales, porque pueden resolver el problema del usuario en múltiples pasos o recoger los datos necesarios del usuario.

Hemos visto cómo resolver el problema de los intents con frases de entrenamiento similares con los Intents de Desambiguación. Veamos ahora cómo mejorar la clasificación de las intenciones gracias a un procedimiento adecuado de recogida de información.

Cómo estructurar la recogida de comentarios para mejorar la clasificación de intenciones

Es posible que nuestro chatbot no consiga ofrecer una buena atención al cliente debido a que las intenciones con frases de entrenamiento no cubren adecuadamente el espectro de posibles peticiones realizadas por los usuarios. Este tipo de problema se presenta principalmente en la parte del flujo conversacional donde tenemos un alto factor de ramificación, es decir, justo después de que se inicie la conversación.

Ejemplo de gráfico de intenciones en el que se destaca el alto factor de ramificación al inicio de la conversación. Imagen del autor.

Podemos estructurar la recopilación de opiniones de los usuarios para resolver este tipo de problemas a lo largo del tiempo y con poco esfuerzo. Consideremos este escenario más sencillo, en el que las intenciones disponibles al inicio de la conversación son Renovar suscripción caducada, Recuperar contraseña y Retirar.

Ejemplo de gráfico de intenciones con desambiguación e intenciones de respuesta. Imagen del autor.

Cuando una intención entre Renovar suscripción ha caducado y Recuperar contraseña coincide, el chatbot debe proporcionar su respuesta correspondiente y luego preguntar si eso era lo que el usuario quería decir. Por ejemplo, si el usuario dice «¿Cómo renuevo mi suscripción?«, la respuesta de la intención Renovar suscripción ha caducado debería ser algo así como «¿Quiere renovar su suscripción? Si es así, seleccione la opción que mejor describa su caso» con una respuesta de opción múltiple compuesta por «Sí, mi suscripción ya ha caducado«, «Sí, mi suscripción aún no ha caducado» y «No, no es eso lo que quería decir«.

Si el usuario selecciona una de las dos primeras opciones, podemos deducir que la clasificación de la intención fue exitosa y guardar una retroalimentación implícita positiva junto con el texto del usuario que llevó a la coincidencia de la intención Renueva la suscripción ha expirado. Si el usuario selecciona la tercera opción, el chatbot debe activar una nueva intención que gestione estos malentendidos (o la intención Fallback) y guardar un feedback implícito negativo, junto con el texto anterior del usuario.

Al guardar los feedbacks positivos y negativos de esta manera, se tiene una colección organizada de feedback dividida por intención y tipo de feedback, donde sólo se puede analizar el paso de la conversación que llevó al feedback en lugar de toda la conversación. Esto ahorrará mucho tiempo y dolores de cabeza a cualquiera que analice el feedback para mejorar la clasificación de las intenciones.

Veamos otro ejemplo. Si el usuario escribe «¿Cómo puedo recuperar mi contraseña?», el chatbot debería coincidir con la intención Recuperación de contraseña y responder con «Para recuperar tu contraseña, haz esto […] ¿He resuelto tu problema?» con las posibles opciones «» (feedback positivo) y «No, quería decir otra cosa» (feedback negativo).

Las frases de los usuarios que dieron lugar a comentarios positivos son posibles nuevas frases de entrenamiento ya validadas. Ten en cuenta que añadir demasiadas frases de entrenamiento a una intención puede mejorar su rendimiento pero reducir su capacidad de mantenimiento, ya que comprobar 100 frases es más lento que comprobar 30. Sugiero que se considere un equilibrio de estos dos aspectos: intentar mantener no más de 40 frases de entrenamiento y, al mismo tiempo, cubrir adecuadamente el espectro de posibles peticiones realizadas por los usuarios con frases de entrenamiento diferentes.

Dado que el objetivo de este tipo de retroalimentación es mejorar la clasificación de la intención proporcionando nuevas y mejores frases de entrenamiento, lo llamaremos retroalimentación de la clasificación de la intención.

Ejemplo de gráfico de intents con retroalimentación de clasificación de intents. Imagen del autor.

Los errores de clasificación de la intención no son el único tipo de errores que se pueden abordar utilizando las retroalimentaciones, veamos por qué.

Cómo estructurar la recopilación de comentarios para mejorar las respuestas a las intenciones

La respuesta proporcionada con una intención puede no ser suficiente para que ciertos usuarios resuelvan sus problemas, aunque pueda parecerle extraño a quien escribe las respuestas de intención, ya que trata de ser lo más claro posible. Es algo similar a lo que ocurre con las pruebas de usabilidad de los productos: quien ha desarrollado un producto ha tenido tiempo de desarrollar un modelo conceptual que facilita la realización de cualquier acción dentro del mismo y le cuesta identificarse con un usuario que ve el producto por primera vez. Esto ocurre también con quienes tienen la tarea de escribir las respuestas que dará el chatbot: conocen tan bien el servicio que escriben respuestas completas a primera vista, pero sobre las que los nuevos usuarios no pueden orientarse.

Entonces, ¿cómo podemos recoger opiniones sobre la calidad de las respuestas del chatbot y mejorarlas? De nuevo, organizando el feedback de forma adecuada. Volvamos a nuestro ejemplo anterior.

Ejemplo de gráfico de intents con retroalimentación de clasificación de intents. Imagen del autor.

No tiene mucho sentido comprobar la calidad de las respuestas de los Intents de Desambiguación, ya que tienen respuestas cortas y están en forma de pregunta. Nos centraremos en las intenciones de respuesta.

Si el usuario pregunta «¿Cómo puedo recuperar mi contraseña?», el chatbot debería coincidir con la intención de Recuperación de Contraseña y responder con «Para recuperar tu contraseña, haz esto […] ¿Resolví tu problema?» con tres posibles opciones: «Sí», «No, no he podido recuperar mi contraseña con tus instrucciones» y «No, me refería a otra cosa». La primera respuesta es tanto una retroalimentación positiva de clasificación de intención como una retroalimentación positiva sobre la calidad del texto de respuesta. La segunda respuesta es una retroalimentación negativa sobre la calidad de la respuesta, y la tercera es una retroalimentación de clasificación de intención negativa. Podemos definir la respuesta como un comentario sobre la calidad de la respuesta asociada a una intención de respuesta.

Ejemplo de gráfico de intenciones con retroalimentación de clasificación de intenciones y retroalimentación de respuestas. Imagen del autor.

Las respuestas negativas siempre deben conducir a un traspaso a agentes humanos si es posible. Sus conversaciones deben ser analizadas para entender por qué la respuesta de la intención no fue lo suficientemente buena.

Arquitectura de intención final sugerida con recogida de feedback

En general, así es como sugiero que se vea la arquitectura de intent.

Ejemplo de gráfico de intenciones con múltiples intenciones de desambiguación y respuesta, con retroalimentación de clasificación de intenciones y retroalimentación de respuesta. Imagen del autor.

A modo de recapitulación:

La entrada de texto libre es preferible para restringir el número de respuestas correctas plausibles para la solicitud del usuario y para recopilar datos sobre lo que los usuarios están preguntando.

La entrada de opción múltiple es preferible para encontrar la respuesta correcta a partir de una lista de posibles respuestas y para recopilar información.

Los intents de respuesta deben resolver directamente la petición del usuario con una respuesta. Pueden hacerlo en varios pasos, especialmente si necesitan pedir datos al usuario.

Los intents de desambiguación tienen como objetivo encontrar la respuesta correcta a partir de una lista de opciones similares, que pueden ser intents de respuesta u otros intents de desambiguación. Proporcionan respuestas de opción múltiple y resuelven el problema de los intents con frases de entrenamiento similares.

La intención de bienvenida sugiere al usuario que diga con texto libre cuál es su petición. El objetivo de la clasificación de intenciones es entonces reducir la petición del usuario a una intención de respuesta o a una intención de desambiguación.

Los comentarios de clasificación de intenciones tienen como objetivo mejorar la clasificación de intenciones mediante la recopilación de comentarios organizados y concisos que proporcionen nuevas frases de entrenamiento. Se recogen justo después de la clasificación de intenciones, tanto en las intenciones de desambiguación como en las de respuesta.

Los comentarios de respuesta tienen como objetivo mejorar las respuestas asociadas a las intenciones de respuesta, reuniendo comentarios organizados y concisos que proporcionen nuevas perspectivas sobre los problemas de los usuarios. Se recogen justo después de que se empareje una intención de respuesta.

Consejos adicionales

Estos son algunos consejos generales que parecen ser beneficiosos en la mayoría de los proyectos de chatbot. No pretende ser una lista completa, ya que podría convertirse en protagonista de un artículo por sí solo:

Es perfectamente normal no poder gestionar el 100% de los mensajes que recibe tu chatbot

Hay interacciones demasiado complejas para que las maneje un ordenador o lo suficientemente raras como para que no merezca la pena enseñarle a hacerlo. En estos casos, delegar a un agente humano. Un chatbot puede mejorar en gran medida la eficiencia, aunque sólo se encargue de la primera parte, la mecánica, de una conversación. Intente que el chatbot gestione ese 70% de contactos repetitivos y sencillos, dejando que los agentes humanos gestionen el 30% restante de contactos complejos y poco frecuentes (los porcentajes pueden variar mucho según el sector).

No hagas que el chatbot se repita

Los usuarios odian cuando obtienen respuestas idénticas varias veces, hace que parezca que la conversación no va a ninguna parte. Evita los bucles siempre que sea posible en tu gráfico de intención e implementa diferentes respuestas para la misma intención para evitar repetir exactamente las mismas frases.

Dirígete a los usuarios enfadados

Si tienes la tecnología para entender las emociones de tus usuarios (es decir, el análisis de sentimientos en el texto), úsala y dirígete a los usuarios enfadados con algo como «Lo siento pero no te entiendo, ¿quieres hablar con una persona real?»

Si estás comenzando un nuevo proyecto de chatbot, empieza con poco, prueba, monitoriza, afina e itera

Comienza implementando no más de 15 intents de respuesta, realiza pruebas de usuario y ponte en marcha. Céntrese en gestionar unos pocos motivos de contacto, pero bien. A continuación, supervise los feedbacks de clasificación de intents y los feedbacks de respuesta en su panel de control, revise las consultas de los usuarios que no funcionaron para los intents con los mayores volúmenes (es decir, el trabajo en el que tiene el mayor ROI), y mejore su chatbot. Mejora el chatbot a través de decisiones basadas en datos, no confíes sólo en tu intuición.

Conclusión

Como cualquier proyecto que puede crecer potencialmente en tamaño y complejidad, una buena arquitectura de intención en un proyecto de chatbot es esencial para hacerlo mantenible, supervisar su rendimiento con claridad y mejorarlo sistemáticamente con el tiempo.

Considera esta guía como una ayuda para gestionar las complejidades que surgen a medida que un chatbot crece, aunque creo que un buen modelo conceptual de la arquitectura de un chatbot puede ahorrar muchos dolores de cabeza incluso en proyectos más pequeños.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *