Blog de Amazon Web Services (AWS)

Prácticas recomendadas para crear modelos de interacción de Amazon Lex

Por Enrique Rodríguez, Arquitecto de Soluciones de AWS

En esta publicación, revisamos un conjunto de prácticas recomendadas para usar ML a fin de crear un bot que comprenda a tus clientes al mismo tiempo que los encante. Esto permite que tu bot tenga conversaciones más naturales que no requieran que el usuario siga un conjunto de instrucciones estrictas. Diseñar y crear una interfaz conversacional inteligente es muy diferente a crear una aplicación o un sitio web tradicional, y esta publicación te ayudará a desarrollar algunas de las nuevas habilidades necesarias.

Amazon Lex es un servicio de AWS para crear interfaces conversacionales en cualquier aplicación que utilice voz y texto, lo que permite a las empresas añadir chatbots sofisticados en lenguaje natural en diferentes canales. Amazon Lex utiliza el aprendizaje automático (en inglés Machine Learning, ML ) para comprender el lenguaje natural (texto y voz conversacionales normales).

Veamos algunos de los términos que utilizamos con frecuencia en esta publicación (en inglés y en español):

  • Utterance (Enunciado o Frase): la frase que el usuario le dice a tu bot en vivo.
  • Intent (Intención): representa una acción que el usuario desea realizar y debe estar claramente relacionado con una respuesta o una acción del bot (llamado Fulfillment). Por ejemplo, un intent que responda a un usuario que saluda o un intent que pueda responder y actuar si un usuario quiere pedir un café. Un bot tiene uno o más intentes a los cuales se les asigna las frases de ejemplo.
  • Frases de Ejemplo : algunos ejemplos de lo que podrían decir los usuarios. Se adjuntan a los Intents y se utilizan para entrenar el bot.
  • Slot (Ranura): parámetro que puede capturar valores de información desde el enunciado del usuario. Por ejemplo, la hora de una cita o el nombre del doctor. Los Slots están asociados a los intents.
  • Valores de Slot: ejemplos de lo que debe capturar el slot o una lista específica de valores para un slot (por ejemplo, grande, mediano y pequeño como valores para una slot de tamaños de café).

La imagen de abajo muestra cómo todas estas piezas encajan para formar tu bot.

Crear un bot bien diseñado requiere varias consideraciones. Estas incluyen el descubrimiento y recopilación de requisitos, el diseño conversacional, las pruebas automatizadas y con los usuarios, y el monitoreo y la optimización del bot.

Dentro del aspecto del diseño conversacional, hay dos elementos principales: el modelo de interacción y la experiencia de usuario conversacional o de voz (CUX/VUX de sus siglas en inglés). CUX y VUX abarcan la personalidad del bot, los tipos de respuestas, el flujo de la conversación, las variaciones de modalidad y la forma en que el bot gestiona las entradas o los errores inesperados. El modelo de interacción, por otro lado, es la pieza que puede tomar lo que el usuario dijo (enunciado o frase) y mapearlo con su objetivo (intención). En esta publicación, solo veremos cómo diseñar y optimizar su modelo de interacción.

Dado que Amazon Lex utiliza el aprendizaje automático (ML), el creador del bot desempeña el papel de profesor. Cuando creamos un bot, debemos proporcionarle todos los conocimientos que necesita sobre los tipos de conversaciones que admitirá. Lo hacemos tanto mediante la forma en que configuramos el bot (intenciones y slots) como con los datos de entrenamiento que le proporcionamos (ejemplos de frases y valores de slots). Luego, el servicio subyacente lo enriquece con conocimientos sobre el lenguaje en general, lo que le permite comprender frases más allá de los datos exactos que le hemos proporcionado.

Las prácticas recomendadas que se enumeran en las siguientes secciones pueden ayudarte a crear un bot que ofrezca a tus clientes una excelente experiencia de usuario y que funcione bien para tu caso de uso.

Creando Intents (intenciones)

Cada intent es un concepto que le enseñas a tu bot a reconocer. Por ejemplo, podría ser una intent de alguien que pide un café o a alguien que saluda a tu bot. Debes asegurarte de que el bot reconozca de manera muy clara y sencilla que una expresión en particular debe asociarse con esa intent.

Imagina si alguien le diera un juego de fichas con frases, cada una ordenada en pilas, pero sin ningún otro contexto ni detalles. Luego empezaron a darte fichas adicionales con frases y te pidieron que las añadieras a la pila correcta, simplemente basándose en las frases de las fichas de cada pila. Si cada pila representara un concepto claro con una redacción similar, sería fácil. Pero si no hubiera un tema claro en cada una de ellas, tendrías dificultades para encontrar la forma de juntarlas en una pila. Incluso puedes empezar a usar otras pistas, como «todas estas son oraciones cortas» o «solo estas tienen signos de puntuación».

Tu bot utiliza técnicas similares, pero recuerda que, aunque el aprendizaje automático es inteligente, no es tan inteligente como un humano y no tiene todo el conocimiento externo y el contexto que tiene un humano. Si un humano que no conoce el contexto de lo que hace tu bot puede tener dificultades para entender lo que se quiso decir, es probable que tu bot también lo haga. Las prácticas recomendadas de esta sección pueden ayudarle a crear intenciones que sean reconocibles y que tengan más probabilidades de coincidir con la expresión deseada.

Cada intent debe representar un solo concepto

Un intent debe corresponder a un claro objetivo para el usuario, y no solo un tema. Está bien tener varios intents que correspondan a la misma acción o respuesta si separarlas proporciona a cada una de ellas un concepto más claro y coherente. En este punto, veamos lo que se debe y no se debe hacer:

  • No crees intents genéricos que agrupen varios conceptos.

Por ejemplo, el siguiente intent combina frases de ejemplo sobre un producto dañado y frases de queja más generales:


ReclamoProductoDañado

He recibido un producto dañado
He recibido un producto dañado
Estoy muy frustrado
Su empresa es mala con las entregas
Mi producto está roto
Tengo un paquete dañado
Voy a devolver este pedido
No volveré a comprarle nunca más

El siguiente intent es otro ejemplo, que combina la actualización de los datos personales con la actualización de la aplicación móvil:

ActualizacionNecesaria
Necesito actualizar mi dirección
Puedo actualizar la dirección que tienes?
¿Cómo actualizo mi número de teléfono?
No puedo obtener la actualización para que la aplicación móvil funcione
Ayúdame a actualizar la aplicación para el iPhone
¿Cómo puedo obtener la última versión de la aplicación móvil?
  • Divide los intents cuando tengan significados muy diferentes.

Por ejemplo, podemos dividir el intent de ActualizaciónNecesaria del ejemplo anterior en dos:


ActualizacionPerfil
Necesito actualizar mi dirección
¿Puedo actualizar la dirección que tienen para mí?
¿Cómo actualizo mi número de teléfono?


ActualizacionAplicacion
No consigo actualizar la aplicación móvil para que funcione
Ayúdame a actualizar mi aplicación para iPhone
¿Cómo puedo obtener la última versión de la aplicación móvil?
  • Divide los intents cuando se necesite la misma acción o respuesta, pero utilice una redacción muy diferente.

Por ejemplo, las dos intenciones siguientes pueden tener el mismo resultado final, pero el primero nos dice directamente que necesitan remolcar su automóvil, mientras que el segundo solo insinúa indirectamente que tal vez necesiten remolcar su automóvil.

RemolqueCarretera
Necesito remolcar mi automóvil
¿Puedo conseguir una grúa?
Pueden enviar a alguien a buscar mi automóvil?


AsistenciaCarretera
He tenido un accidente
Atropellé a un animal
Mi coche se averió

Reduce la superposición entre las intents

Pensemos otra vez en esa pila de fichas. Si hubiera cartas con las mismas frases (o muy similares) en varias pilas, sería difícil saber en qué pila añadir una nueva carta con esa frase. Es lo mismo en este caso. Queremos conjuntos muy claros de ejemplos de frases en cada Intent. Las siguientes son algunas estrategias:

  • No crees intents con frases muy similares o que tengan significados similares.

Por ejemplo, dado que Amazon Lex generaliza fuera de las frases de ejemplo, las frases que no tienen claramente un intent específico podrían no coincidir, por ejemplo, si un cliente dice «Me gustaría reservar una cita» cuando hay dos intenciones de cita, como las siguientes:

ReservarCitaDoctor

Me gustaría reservar una cita con el médico

 

ReservarCitaLaboratorio

Reservar una cita para el laboratorio

  • Utiliza slots para combinar intents que traten del mismo tema y tengan frases similares.

Por ejemplo, si combinamos los dos intents del ejemplo anterior, podemos capturar con mayor precisión cualquier solicitud de cita y, a continuación, utilizar un slot para determinar el tipo de cita correcto:


ReservarCita

Me gustaría reservar una cita con {AppointmentType}
  • No crees intents donde un intent sea un subconjunto de otro.

Por ejemplo, a medida que tu bot crece, puede ser fácil empezar a crear intents para capturar un subconjunto de otro intent existente:

ReservarVuelo
Me gustaría reservar un vuelo
Resérvame un vuelo de ida y vuelta
Necesito reservar un vuelo de ida

ReservarVueloDeIda
Resérvame un vuelo de ida
Me gustaría reservar un vuelo de ida
Necesito reservar un vuelo de ida, por favor
  • Utiliza slots para capturar diferentes subconjuntos de información dentro de un intent.

Por ejemplo, en lugar de usar diferentes intenciones para capturar la información sobre el tipo de vuelo, podemos usar un slot para capturar esto

ReservarVuelo

Me gustaría reservar un vuelo
Resérvame un vuelo {TipoIntinerario}
Necesito reservar un vuelo {TipoIntinerario}
Me gustaría reservar un vuelo con {TipoIntinerario}

Ten la cantidad correcta de datos

En ML, los datos de entrenamiento son clave. A menudo se necesitan cientos o miles de muestras para obtener buenos resultados. Te alegrará saber que Amazon Lex no requiere una gran cantidad de datos y, de hecho, no querrás incluir demasiados ejemplos de frases en cada intent, ya que pueden empezar a generar confusión. Sin embargo, es fundamental que proporcionemos suficientes ejemplos de frases para crear un patrón claro del que el bot pueda aprender. Ten en cuenta lo siguiente:

  • Agrega al menos 15 frases de ejemplo por intent.
  • Añada frases adicionales de forma incremental (lotes de 10 a 15) para poder probar el rendimiento por etapas. Un número mayor de frases no es necesariamente mejor.
  • Revisa los intents con un gran número de frases de ejemplo (más de 100) para evaluar si puedes eliminar expresiones muy similares o si debes dividir el intent en varios intents.
  • Mantén la misma cantidad de frases de ejemplo en todos los intents. Esto permite que el reconocimiento de cada intent sea equilibrado y evita sesgar accidentalmente al bot hacia ciertos intents.
  • Revisa los intents con regularidad en función de lo que aprenda tu bot en producción y continúa añadiendo y ajustando frases de ejemplo. Diseñar y desarrollar un bot es un proceso iterativo que nunca se detiene.

Ten diversidad en los datos

Amazon Lex es una IA conversacional; su objetivo principal es dialogar con humanos. Los seres humanos tienden a tener una gran variedad en la forma en que expresan las cosas. Al diseñar un bot, queremos asegurarnos de capturar ese rango en nuestra configuración del intent. Es importante volver a evaluar y actualizar la configuración y los datos de muestra de forma regular, especialmente si amplías o cambias tu base de usuarios con el tiempo. Tenga en cuenta las siguientes recomendaciones:

  • Usa una gama amplia de frases en cada intent. Los siguientes son ejemplos que debes tener en cuenta:
    • Longitudes de frases: usa distintos largos en las frases de ejemplo. El siguiente es una muestra:
ReservarVuelo
Reservar vuelo
Necesito reservar un vuelo
Quiero reservar un vuelo para mi próximo viaje
  • Vocabulario: necesitas considerar la forma en que hablan tus clientes. Puedes revisarlo mediante pruebas con usuarios o utilizando los logs de conversación de tu bot. Ve el siguiente ejemplo:
PedirFlores
Quiero comprar flores
¿Puedo pedir flores?
Necesito obtener flores
  • Expresiones: toma en cuenta una combinación de expresiones que representen las diferentes formas en que nuestros clientes pueden decir las cosas. El siguiente ejemplo muestra expresiones que utilizan «reservar» como verbo, «reserva» o «vuelo» como sustantivo, «reserva de vuelo» como sujeto y lenguaje formal e informal:
ReservarVuelo
Necesito reservar un vuelo ¿me
Pueden ayudar con la reserva de un vuelo?

La reserva de vuelo es lo que estoy buscando
Por favor resérvame un vuelo,
Voy a necesitar un vuelo
  • Puntuación: debes incluir el general de la puntuación, pero también toma en cuenta el uso no gramatical si es algo que un cliente usaría (especialmente al escribir). Mira el siguiente ejemplo:
PedirFlores
Quiero pedir flores. 
¡Quiero recibir flores! 
Tráeme unas flores... ¡por favor!
  • Uso de Slots: proporciona frases de ejemplo que usen y que no usen slots. Usa diferentes combinaciones de slots entre las que las incluyen y asegúrate de que los slots tengan ejemplos con diferentes lugares en los que podrían aparecer en la frase. Por ejemplo:
CancelarCita
Cancelar cita
Cancelar mi cita con el Dr. {Doctor}
Cancelar cita del {FechaCita} con el Dr. {Doctor}
Cancelar mi cita del {FechaCita}

¿Puedes decirle al Dr. {FechaCita} que cancele mi cita con el médico?

Por favor cancela mi cita al doctor
  • No sigas añadiendo frases de ejemplo que sean solo pequeñas variaciones en la redacción. Amazon Lex es capaz de generalizarlos por ti. Vea el siguiente anti-ejemplo:
ProductoDanado

He recibido un producto dañado
Recibí un producto dañado

Producto dañado recibido
  • No añadas selectivamente diversidad a algunos intents, pero no a otros. Debemos ser coherentes con las formas de diversidad que añadimos. Recuerda el juego de las fichas que usamos al principio: cuando una frase no está clara, el bot puede empezar a utilizar otras pistas (como la longitud de la oración o la puntuación) para intentar encontrar un patrón. Hay ocasiones en las que puede que quieras utilizar esto a tu favor (por ejemplo, si realmente quieres dirigir todas las frases de una palabra a una intent concreto), pero es importante que evites hacerlo por accidente.

Creación de Slots

En la sección anterior mencionamos algunas buenas prácticas relacionadas con los slots, pero veamos algunas prácticas recomendadas más específicas para los slots.

Usa nombres cortos o adjetivos para los Slots

Los Slots representan algo que se puede capturar como parámetro, por ejemplo el tamaño del café que quieres pedir o el aeropuerto al que vas a volar. Ten en cuenta lo siguiente:

  • Usa sustantivos o adjetivos cortos para los valores de tus slots. No utilice slots para frases introductorias o genéricas («cómo puedo» o «qué podría hacer»), ya que esto reducirá la capacidad de Amazon Lex de generalizar sus frases de ejemplo. Trata de usar Slots para los capturar los valores por parte del usuario que necesitas para cumplir el Intent.
  • Por lo general, limita los Slots a una o dos palabras.

Prefiere los Slots a los valores explícitos

Puedes usar slots para generalizar las frases de ejemplo, pero también debemos ceñirnos a las recomendaciones que acabamos de revisar. Para que los valores de nuestros slots sean lo más fáciles de identificar posible, nunca utilizamos los valores incluidos en el slot directamente en las frases de ejemplo. Ten en cuenta los siguientes consejos:

  • No incluyas explícitamente valores que puedan ser slots en las frases de ejemplo.

Por ejemplo:

PedirFlores
Quiero comprar rosas
Quiero comprar lirios
Me encantaría pedir unas orquídeas
Me encantaría pedir rosas
  • Utiliza slots para reducir la repetición. Por ejemplo:
PedirFlores
Quiero comprar {flores}
Me encantaría pedir {flores} 

flores
rosas
lirios
orquídeas
  • No mezcles slots y valores reales en las frases de muestra. Por ejemplo:
PedirFlores
Quiero comprar {flores}
Quiero comprar lirios
Me encantaría pedir unas {flores}

flores
rosas
lirios
orquídeas
  • No tengas intents sólo con slots como frases de ejemplo si estos slots son del tipo AlphaNumeric, Number, Date, slots personalizados muy amplios, o si incluyen abreviaciones. En su lugar, amplía las frases de muestra añadiendo frases conversacionales que incluyan el slot.

Mantén la coherencia de los valores de Slots

El bot tiene que asociar un dato a un slot basándose únicamente en lo que pueda aprender de los valores que hemos indicado. Si hay mucha similitud o superposición entre los slots con el mismo intent, esto puede provocar desafíos al encontrar el slot correcto.

  • No utilices slots con valores superpuestos con la misma intent. En su lugar, intenta combinarlos. Por ejemplo, esto estaría incorrecto:
mascotas
gato
perro
peces de colores


animales
caballo
gato
perro

Considera cómo se transcribirán las palabras

Amazon Lex utiliza el reconocimiento automático de voz (ASR) para transcribir la voz. Esto significa que todas las entradas del modelo de interacción de Amazon Lex se procesan como texto, incluso cuando se utiliza un bot de voz. Debemos recordar que una transcripción puede diferir de la forma en que los usuarios pueden escribir lo mismo. Tenga en cuenta lo siguiente:

  • Introduce acrónimos u otras palabras cuyas letras deban pronunciarse de forma individual, como letras individuales separadas por un punto y un espacio. Esto se acercará más a la forma en que se transcribirá. Por ejemplo:
D. N. I.
A. W. S.
D. C.
  • Revisa el audio y las transcripciones con regularidad para poder ajustar las frases de ejemplo o los tipos de slots. Para ello, activa los registros de conversaciones y habilita los registros de texto y audio siempre que sea posible.

Usa las opciones disponibles para tus Slots

Hay muchos tipos de slots y opciones disponibles, y utilizar las mejores opciones para cada una de nuestros slots puede ayudar a reconocer los valores de esos slots. Revisemos las opciones antes de decidir cómo diseñar nuestros slots:

  • Utiliza la opción de restricción para limitar los Slots a un conjunto cerrado de valores, como un listado de opciones (ejemplo: comedia, drama, acción) Puedes definir sinónimos para cada valor (por ejemplo divertido puede ser un sinónimo de comedia).
  • Utiliza la opción de expansión cuando desee poder identificar lo que dice el usuario si es que se parece a los valores de muestra (por ejemplo, el nombre).
  • Active la ofuscación en slots que recopilan datos confidenciales para evitar que se registren los datos.

Resumen

En esta publicación, analizamos un conjunto de prácticas recomendadas que buscan ayudarte a diseñar y crear tu próximo bot. Al extraer esta información, es importante recordar que las mejores prácticas siempre dependen del contexto. No se trata de reglas, sino de pautas que te ayudarán a crear un chatbot de alto rendimiento. A medida que vayas creando y optimizando tus propios bots, descubrirás que algunos de ellos son más importantes para tu caso de uso que otros, y podrías añadir tus propias mejores prácticas adicionales. Como creador de bots, tiene mucho control sobre la forma en que configura su bot de Amazon Lex para obtener los mejores resultados para su caso de uso, y estas prácticas recomendadas deberían proporcionarle un buen punto de partida.

Podemos resumir las mejores prácticas en esta publicación de la siguiente manera:

  • Mantén cada intent en un solo concepto claro con un conjunto coherente de enunciados.
  • Utiliza datos de expresión muestrales representativos, equilibrados y diversos.
  • Utiliza slots para hacer que las intenciones sean más claras y capturar datos.
  • Mantén cada slot dedicado a un solo tema con un conjunto claro de valores
  • Revisa y utiliza el tipo de slot adecuado para su caso de uso.

Para obtener más información sobre Amazon Lex, consulta Introducción a Amazon Lex para obtener documentación, tutoriales, vídeos instructivos, ejemplos de código y SDK.

Si estás construyendo bots en inglés, te recomiendo visitar el blog original (en inglés) escrito por Gillian Armstrong, Builder Solutions Architect.


Acerca del autor

Enrique Rodríguez es Arquitecto de Soluciones de Amazon Web Servicies (AWS) Basado en Chile actualmente ayudando a los clientes de la región a lograr sus desafíos en la nube. Con intereses en Machine Learning y Customer Experience.

Revisores

Elizabeth Fuentes Leone es Developer Advocate en AWS con experiencia en Data Analytics y Machine Learning. Le encanta ayudar a los desarrolladores a aprender mientras meten las manos construyendo.

Daniela Rojas es Arquitecta de Soluciones en Amazon Web Services, basada en Colombia donde actualmente ayuda a diferentes clientes de la industria financiera en su viaje a la nube, superando desafíos y rompiendo paradigmas. Cuenta con Maestria en Ingeniería Eléctrica, le apasiona la robótica, la inteligencia artificial y las energías renovables.