Nieves Ábalos - IA Conversacional

Atrás

fondo.fondo.

🇬🇧 English version of this post: “An improved approach to choose NLU tools.”.

Para desarrollar interfaces conversacionales (chatbots, asistentes virtuales…), necesitamos entender lo que nuestros usuarios hablan o escriben para responderles de manera adecuada. Ésa es la razón por la que las herramientas NLU (como api.ai y wit.ai) se utilizan habitualmente en estas interfaces.

Como parte de nuestra investigación en BEEVA Labs, hemos desarrollado un benchmark mejorado para ayudarnos a decidir qué herramienta encaja mejor al desarrollar interfaces conversacionales, ya que otros benchmarks no lo hacían (especialmente en español).

En la primera versión de nuestro benchmark NLU, se analizan características de alto nivel en api.ai y wit.ai, tanto para inglés como para español. Hemos incluido el español en nuestro benchmark ya que es difícil encontrar un benchmark que evalúe herramientas NLU para español. Es muy útil en caso de que necesites elegir un NLU para español, ya que algunas funcionalidades difieren del idioma.

Está en nuestro backlog realizar una segunda versión incluyendo métricas como el número de muestras de entrenamiento, precisión, puntuación F1 o recall. Ya hay trabajo hecho en este campo (aunque no utilizando español) por Intento o Snips (lee este post).

Nuestro benchmark explicado#

Basándonos en nuestra experiencia, hemos dividido un conjunto de características de alto nivel en las siguientes áreas:

  • básicas (como precio, si es open-source, soporte de idiomas, etc.),
  • grado transaccional vs conversacional,
  • intents (la capacidad de reconocer lo que quiere el usuario),
  • entities (la capacidad de reconocer palabras clave en la expresión),
  • gestión de diálogo (DM),
  • generación de respuestas (RG),
  • reconocimiento automático del habla (ASR),
  • text-to-speech (TTS), e
  • integración de servicios externos.

Una interfaz es transaccional si tiene la capacidad de realizar tareas o servicios para alguien. Está orientada a objetivos, y sus usuarios la utilizan para hacer cualquier petición. Dos frases de ejemplo al pedir una pizza, ambas con un alto grado transaccional, serían: “/order favorite-pizza” (estilo línea de comandos) y “Alexa pide a Domino’s que ordene mi pizza favorita”.

Una interfaz es conversacional cuando su intención es crear un diálogo natural con los usuarios, con un intercambio informal de información a través de palabras con ellos. Debería proporcionar funcionalidad para crear estas conversaciones con usuarios como: smalltalk (hola, gracias, adiós, detalles personales y aficiones…), gestión de contexto (¿la respuesta “sí” está relacionada con la frase anterior?), o memoria (el usuario está dando información sobre dónde vive y adónde quiere ir de viaje, no preguntes siempre dónde vive).

La lista completa de características se explica al final de este post.

Resultados#

Puedes encontrar los resultados de este benchmark en este repositorio de Github (actualizado el 25/08/2017) o en la siguiente imagen.

Resultados de nuestro benchmark (actualizado 25/08/2017) Resultados de nuestro benchmark (actualizado 25/08/2017)

Conclusiones#

Para desarrollar una interfaz conversacional, api.ai tiene un mayor grado de características conversacionales (incluyendo generación de respuestas y gestión de diálogo) que wit.ai, que es básicamente transaccional desde el cierre de su Bot Engine, enfocando su desarrollo en una comprensión integral de entities e intents.

En términos de entender español, el comportamiento de api.ai (en beta) es ligeramente diferente del inglés en cuanto al número de intents incorporados y no tiene soporte para el smalltalk por defecto, a diferencia de wit.ai.

Además, respecto a los canales donde los usuarios pueden interactuar con tu interfaz conversacional, api.ai está soportado por el ecosistema de Google (como Google Actions), y wit.ai enfoca su soporte a Facebook Messenger, pero eso no significa que no puedas usar otras herramientas para cualquier canal (como Botkit) y también hacer peticiones vía API a wit.ai o api.ai.

Trabajo futuro#

La segunda parte de este benchmark, incluyendo métricas como el número de muestras de entrenamiento, precisión, puntuación F1 o recall, y un segundo post con ello (¡mantente atento!).

Nuestro benchmark explicado: la lista completa#

1. Básicas#

  • Gratuito / Precio: ¿Es gratuito? ¿Planes de precio? ¿Restringido a un número de peticiones API?.
  • Open-source.
  • En dispositivo / Basado en la nube: El ASR / NLU en dispositivo es más privado y seguro.
  • Soporte de idiomas (en-us/en-gb/es-es/…) ¿Cuántos idiomas están disponibles en este momento?.

2. Transaccional vs Conversacional#

  • Grado transaccional: ¿Está orientado a objetivos? Selecciona un grado del 1 (mínimo = sólo para chatear y hablar) al 5 (máximo = línea de comandos, ej. /order pizza).
  • Grado conversacional: ¿Proporciona funciones para crear conversaciones con los usuarios? Del 1 (mínimo) al 5 (máximo, tiene smalltalk, contexto y memoria).

3. Intents#

  • Soporte de smalltalk (ej.: hola, adiós, gracias): Te permite importar fácilmente muchas respuestas predefinidas para preguntas simples y frases como “¡Hola!”, “¿Cómo estás?”, “¿Eres un robot?”, “¿Cuál es tu afición?”, “¿Cuántos años tienes?”.
  • Smalltalk personalizable: Puedes editar fácilmente cualquier intent, cambiar la respuesta y añadir más datos de entrenamiento.
  • Intents incorporados (ej.: intent getWeather): Estos son intents para acciones comunes que puedes elegir implementar sin proporcionar frases de ejemplo.
  • Intents personalizados: Puedes crear tus propios intents para entrenar proporcionando frases de ejemplo.
  • Intents de fallback: Los intents de fallback se activan si la entrada de un usuario no coincide con ninguno de los intents.
  • Intents de follow-up: Los diálogos entre personas están llenos de follow-ups y confirmaciones. Estos intents hacen que estos tipos de flujos de conversación natural sean fáciles de construir y personalizar.

4. Entities#

  • Entities preconstruidos / incorporados (ej.: $date) / Tipos de slot: Entities del sistema para facilitar la gestión de los conceptos comunes más populares.
  • Estrategias de búsqueda: ¿Puedes seleccionar cómo se reconoce tu entity en el texto (estrategia de búsqueda)?
  • Entities de texto libre: Cuando necesitas extraer una subcadena del mensaje, y esta subcadena no pertenece a una lista predefinida de valores posibles.
  • Entities personalizados / Entities de desarrollador / Entities de usuario: Entities cerrados, definidos por el desarrollador o personalizados para el usuario.
  • Permitir expansión automatizada / Texto libre y palabras clave: Esta característica de mapeo de entities permite a un agente reconocer valores que no han sido listados explícitamente en el entity.
  • Listas de valores en entities: La capacidad de reconocer una enumeración de diferentes valores de un entity como lista. Ej.: “Quiero algunas naranjas, unas pocas manzanas y dos albaricoques” se reconocen como esta lista [naranjas, manzanas, albaricoques].
  • Cantidades / Detección de plural vs singular.
  • Sinónimos: Mapeo de sinónimos a un valor de referencia. Por ejemplo, un entity de tipo de comida podría tener una entrada con un valor de referencia de “vegetariano” con sinónimos de “vege” y “veggie”.
  • Soporte de slot-filling: Buscar piezas específicas de información con respecto a algo para llenar los slots o información requerida para cumplir la acción.
  • Soporte de confirmación (sí/no).
  • Soporte de contexto: El contexto pasa información de conversaciones previas o fuentes externas (ej., perfil de usuario, información del dispositivo, etc.). Puede usarse para gestionar el flujo de conversación.
  • Sesiones: Tiempo en el que el sistema recuerda los datos proporcionados.
  • Fulfillment: Capacidad de ejecutar la acción o responder la consulta pedida por el usuario. Dentro o fuera pero proporcionando el enlace a la URL donde se hace este fulfillment.

6. Generación de Respuestas#

  • Capacidades de generación de respuestas: Es capaz de responder directamente al usuario con información sobre su petición o consulta.

7. ASR (Automatic Speech Recognizer)#

  • Proporciona ASR: Es capaz de reconocer voz y transformarla en texto.

8. TTS (Text to Speech)#

  • Proporciona TTS: Transforma texto a voz.

9. Servicios externos#

  • Soporte de canales: FB Messenger, Slack, etc.
  • Integraciones / Soporte de servicios de terceros: Ej.: demo web / Actions on Google / Amazon Alexa / Twitter, etc.

Publicado originalmente en labs.beeva.com el 2 de octubre de 2017.

Un enfoque mejorado para elegir herramientas NLU.
https://nievesabalos.com/blog/como-elegir-nlu/
Author Nieves Ábalos Serrano
Published at 2 de octubre de 2017