Esta es la segunda entrega en nuestra serie que habla de los chatbots. Aquí exploramos Reconocimiento del Lenguaje Natural (Natural Language Understanding o NLU), que es la parte frontal de todos los chatbots. Analizaremos la programación necesaria para crear reglas basadas en chatbots, y luego analizaremos el uso de algoritmos de Aprendizaje Profundo que son la base de los chatbots habilitados para Inteligencia Artificial.
En la entrada anterior: "
Chatbots. Guía para principiantes", cubrimos los conceptos básicos, incluida su breve historia tecnológica, usos, opciones de diseño básico y donde entra en juego el Aprendizaje Profundo.
En esta entrada, exploraremos con más profundidad cómo la Comprensión del Lenguaje Natural (NLU) basada en redes neuronales profundas RNN/LSTM permite tanto el chatb basado en reglas como el AI. Veremos el método, la lógica, las elecciones de diseño y los componentes programáticos que están en funcionamiento en chatbots basados en reglas. Finalmente, veremos el uso de las Redes Neuronales Recurrentes (RNN) y loas Grandes Memorias a Corto Plazo (LSTM) para generar respuestas largas, e incluso llevar a cabo conversaciones aparentemente sofisticadas que cruzan el umbral de la Prueba de Turing.
Comprensión del lenguaje natural: el front-end para todos los chatbots
Puede que esté más acostumbrado a escuchar sobre NLP (Procesamiento de Lenguaje Natural), pero con chatbots estamos mucho más interesados en el subconjunto dentro de NLP llamada NLU (Natural Language Understanding). Es la capacidad de la máquina para comprender el texto o el habla humanos, extrayendo el significado correcto a pesar de los problemas de acentos, errores de ortografía, pronunciación o simplemente una forma extraña de frasear la entrada.
Afortunadamente, no tiene que construir la NLU desde cero, ya que todas las principales plataformas de desarrollo tienen una integrada. Pueden ser modelos propietarios de alto nivel como Amazon o IBM, o la variedad de código abierto que se encuentra en las bibliotecas de máquina, como la Core NLP Suite de Stanford, Natural Language Toolkit (NLTK), Apache Open NLP, o spaCy entre otros.
Si bien las rutinas de NLU hacen muchas cosas, las que son particularmente importantes en el soporte de chatbots son las siguientes:
Reconocimiento de entidades nombradas: identificación de categorías de palabras como el nombre de una persona, un producto, una fecha o una dirección.
Normalización: intenta dar cuenta de errores de ortografía, errores tipográficos o pronunciaciones diferentes.
Etiquetado de partes del habla: identifica las partes del habla como sustantivos, verbos y adjetivos como la base para comprender la estructura de la oración y cómo afectará el significado.
Análisis de dependencias: identificación de sujetos, objetos, acciones y similares para encontrar frases dependientes.
Los paquetes de NLU no habrán sido entrenados en los nombres propios, eventos, lugares o incluso acrónimos que sean únicos para diferentes negocios. En algunos casos, puede ser necesario agregar diccionarios y ontologías específicas del dominio, para permitir que la NLU interprete correctamente cómo deben entenderse estas palabras y frases únicas.
Sin embargo, muchas NLU se pueden capacitar o adiestrar sobre la marcha con una tecnología incorporada llamada Comunicación en Foco (CIF). CIF desarrolla lo que se denomina Discriminadores de Contexto (CD) al reducir las oraciones complejas o aquellas que contienen palabras desconocidas, en grupos de palabras cortas comparándolas con "vecinos semánticos" compuestos por contexto y puntos de vista sobre los sujetos en las oraciones.
La comparación de los nuevos CD con los anteriores, produce derivados de orden superior que le permiten a la NLU interpretar las relaciones de entidad entre sujetos previamente desconocidos.
Hay otras cosas útiles que la NLU puede agregar al proceso como el Análisis de Sentimientos. Una NLU previamente capacitada generalmente puede detectar lo suficiente sobre el tono de la conversación, para saber si el usuario está teniendo una buena experiencia o si el chatbot debe reenviar la conversación a un operador de respaldo humano.
Construyendo un chatbot basado en reglas de respuesta programada
El objetivo del diseño en la construcción de un chatbot basado en reglas, es describir en detalle todas las preguntas posibles, información aclaratoria y respuestas o acciones que pretenda que su chatbot pueda manejar. Eso puede ser un montón de detalles y una buena razón para mantener su dominio de conocimiento estrecho. NLU se encargará de las palabras con significados similares o diferentes formas de expresar la solicitud, pero eso aún deja mucho trabajo por hacer.
A pesar de este trabajo inicial, las reglas siguen siendo la forma más rápida y fácil de crear un chatbot. Para el desarrollador que claramente necesita un equipo que incluya una o más PYMES, el proceso no es particularmente rápido ni fácil, pero es menos complejo que construir un robot con Inteligencia Artificial.
Esta categoría de chatbot está creciendo tan rápidamente que Gartner pronosticó recientemente que para 2020, un 10% de los nuevos empleados de TI estarían escribiendo estos "scripts".
Este tipo de scripting comúnmente se llama "cascada", ya que es un proceso de diseño secuencial en el cual las fases más altas (anteriores) de la cascada, llenan piscinas de nivel inferior de la que también pueden fluir una dentro de la otra. La descripción preferida de este proceso es "árbol de decisión", que es más descriptivo y más familiar para las audiencias que vienen de Ciencia de Datos.
Podemos construir un chatbot desde cualquier código en bruto de nuestra preferencia, pero el curso de acción mucho más fácil es usar una de las muchas plataformas de chatbot que han surgido. Estas ofrecen marcos paso a paso para todos los componentes necesarios que deberá definir.
Es posible que aún necesitemos agregar líneas de código en estas plataformas, por ejemplo, para describir la fuente de datos externos y cómo acceder a esa información. Otra alternativa es seguir y ejecutar los pasos necesarios para una acción como 'hacer una cita'. Muchas plataformas tienen módulos preconstruidos para acciones como "concertar una cita" que pueden personalizarse. Aunque esto no es exactamente arrastrar y soltar, no tendrá que aprender los pormenores de NLP. Estas plataformas lo guían a través de un proceso paso a paso para recopilar la información NLU necesaria, a medida que avanza y luego proporciona un entorno para las pruebas antes de la implementación.
Agentes - Propósitos - Entidades - Flujos de Diálogo
Agentes, propósitos, entidades y flujos de diálogo son los componentes básicos de su chatbot. Esto no pretende ser una inmersión profunda en el tema, sino algo para entender estos términos y cómo se relacionan.
Agente: Es tu chatbot que puede tener múltiples Agentes subyacentes con diferentes objetivos, pero un solo Agente principal que refleja solo las tareas específicas y el conocimiento limitado que tiene previsto. Es posible que tenga un agente que le proporcione datos del clima, otro que programe una cita u otro que responda a una queja de servicio al cliente. Si bien es posible poner estos tres objetivos en un solo agente, sería difícil de manejar en el mejor de los casos. Entonces su agente define pormenorizadamente todas las cosas que quiere que este chatbot específico pueda hacer.
Las definiciones que componen el chatbot se basan en Propósitos (Intents), Entidades (Entities) y Flujo de Diálogo (Dialog Flow).
Propósito: Asignar algo "dicho por el Usuario" a una "Acción" determinada.
Lo primero que le pedirá su plataforma son Propósitos (Intents). Los propósitos son un relacionamiento uno a uno, entre la solicitud de idioma natural del usuario VS las acciones que debe tomar su robot de conversación.
Piense en esto como detección de intención. El primer paso es, por lo general, asignar "Usuario dice" a una "Acción".
Si su chatbot es bastante limitado, por ejemplo, informando sobre el clima en una ciudad en particular en un día en particular, la lista de posibles afirmaciones de "Usuario dice" también es bastante estrecha. Por ejempo: ¿Cuál es el clima en (ciudad x) (el próximo viernes)?
Sin embargo, si está creando un chatbot de servicio al cliente, es probable que las solicitudes de lenguaje natural del usuario sean mucho más variadas. Debe completar un conjunto de ejemplos que represente lo que el usuario podría decir. No es necesario pensar en todos ellos ya que la NLU usará sus ejemplos para entrenarse para declaraciones de usuario similares, pero cuantas más, mejor.
Supongamos que en su proceso de servicio al cliente, generalmente reconoce tres tipos de solicitudes: quejas, devoluciones y todo lo demás. (Los siguientes ejemplos se extraen del blog de IBM "Watson Build-a-chatbot").
Entonces, para las quejas, puede ingresar ejemplos como:
- ¿Puedo obtener ayuda?
- Necesito esto arreglado
- Tengo un problema.
- Deseo registrar una queja.
- Por favor, ayúdame.
- Algo esta mal.
Para las devoluciones, puede ingresar ejemplos como:
- Intercambiar.
- Ya no quiero esto.
- Quisiera regresar esto.
- Necesito que retires esto.
- Quiero mi dinero de vuelta.
- Por favor tome esto de vuelta.
- Este loro está muerto. Necesito devolverlo.
Para la categoría "todo lo demás", puede dejar volar su imaginación ya que está entrenando a la NLU para que reconozca que no es una queja o devolución. Puede divertirse con esta categoría.
- Un poco de esto, un poco de aquello.
- Plátano.
- Paseador de perros.
- El fútbol es bueno.
- Desearía ser un pez.
- ¿Dónde estoy?
De hecho, los usuarios pueden hacer solicitudes que contengan múltiples intenciones en el mismo mensaje, por lo que es posible asignar prioridades a diferentes intenciones así como a intentos de retroceso.
Se podría utilizar un intento de "repliegue" si su chatbot no puede identificar el intento y es posible que deba solicitar una aclaración como: "No lo entendí. ¿Podría aclarar su solicitud?". Otra opción sería la de diseñar su chatbot para simplemente referir al cliente a una Corporate Social Responsibility (CSR) humana, si el chatbot no puede entender la intención: -"...déjeme transferirlo a un agente."-
Acciones
Basado en el relacionamiento de intención, su chatbot ahora comprenderá que es necesario tomar una o más acciones. Si son simples como el ejemplo del clima o "concierte una cita", es posible que pueda personalizar los módulos preconstruidos. Sin embargo, sus acciones pueden ser tan complejas como desee, lo que requerirá una codificación personalizada.
Por ejemplo, una queja puede ser respondida por un mensaje de texto o una respuesta verbal en la que se requiere buscar el pedido del cliente e incluirlo como parte del detalle de la respuesta.
También puede proporcionar directamente o por correo electrónico un formulario de devolución prellenado, ofreciendo algunas instrucciones sobre el procedimiento y la política de devolución.
En un caso mucho más complejo, podría buscar inventario disponible para ver si un artículo de reemplazo (por ejemplo de diferente tamaño o color) está disponible de inmediato y ofrecerlo como reemplazo para evitar una devolución.
Contextos
Las plataformas de chatbot también ofrecen un método de grabación de información previa, que podría ser necesaria para comprender mejor el propósito real de la solicitud actual.
Por ejemplo, si un usuario está escuchando música y encuentra una canción que le gusta, puede ingresar "muéstrame más canciones semejantes". El contexto habrá almacenado el título de la canción, género, categoría, artista y otra información para que pueda interpretar la solicitud en relación con la última canción escuchada.
Del mismo modo, si se trata de un dispositivo doméstico inteligente y el primer comando de voz fue "encender las luces de la sala de estar", seguido de "apagarlas", el contexto permitirá que el chatbot comprenda que son las luces de la sala las que están siendo operadas.
Entidades
Las entidades son objetos del mundo real como productos, personas, lugares, fechas, horas, distancia y nombres de categoría, entre otros. Las NLU pueden extraer los valores de los parámetros de la solicitud del usuario buscando entidades, algunas de las cuales serán definidas por el sistema, pero muchas de las cuales serán definidas por nosotros durante el proceso de programación.
Las entidades también pueden ser condicionales para definir un filtro como "precio más bajo" o "abierto ahora". Algunas entidades, como la fecha, hora o la distancia, generalmente están integradas en el sistema y no necesitan ser definidas por separado. Sin embargo, nombres y tipos de productos tendrían que ser ingresados y actualizados.
Flujo de Diálogo
El flujo de diálogo es el área de la lógica y el arte. ¿Desea que el diálogo de Chabot parezca natural y coloquial? ¿También que el diálogo del Chabot sea lógico, que conduzca a la satisfacción del usuario en los pocos pasos posibles?
Muchos chatbots se pueden construir con diálogos lineales simples, pero muchos requerirán diálogos no lineales o ramificados. Los no lineales pueden ser necesarios en muchos casos, por ejemplo:
- Si su chatbot está realizando una encuesta de satisfacción del cliente y le pide al usuario que califique su experiencia como excelente, buena, regular o deficiente, es probable que las siguientes preguntas que plantee sean diferentes para cada categoría y se requiere una bifurcación.
- Si su chatbot no entendió la solicitud, puede tener varios bucles de conversación diferentes que planteará el chatbot, para aclarar el intento del usuario y la acción requerida.
Una rama que casi siempre está presente es la referencia a un agente en vivo. Esto sucede cuando el chatbot no puede entender la intención o no tiene suficiente información para responder, así como si el usuario dice una palabra clave como 'agente'. En algunos casos, el análisis del sentimiento de NLU puede detectar que el usuario se está frustrando o enfadado y puede crear una salida a un agente humano cuando se detecta esto.
Construyendo Chatbots basados en Aprendizaje Profundo, derivado de Inteligencia Artificial
En nuestro primer artículo describimos cómo los Chatbots generados por Inteligencia Artificial se están introduciendo basados en arquitecturas RNN/LSTM, que pueden incorporar oraciones complejas y largas, retener el contexto y proporcionar respuestas largas o en varias partes. Todo esto ocurre sin que un programador tenga que definir intenciones, acciones, respuestas, entidades o flujo de diálogo. ¿Qué no hay Inteligencia Artificial de por medio?
Esta puede ser la ola del futuro, pero recién ahora está comenzando. Mencionamos el reciente anuncio de Andrew Ng de Woebot, un chatbot capaz de consejería psicológica para la depresión.
Otro ejemplo instructivo fue discutido en un documento de investigación: "Un modelo conversacional neural" por dos investigadores de Google el año pasado. Su objetivo era crear un chatbot que pudiera conversar con los usuarios para resolver preguntas difíciles de soporte de TI. Dos puntos importantes provienen de esta experiencia.
Al igual que todos los modelos de Redes Neuronales Convolucionales (CNN) y Redes Neuronales Recurrentes (RNN), necesita una gran cantidad de datos para entrenar. Afortunadamente, había una gran cantidad de registros de la mesa de ayuda de la computadora en los que se podía entrenar y que contenían años de historia sobre diferentes problemas y sus soluciones.
Recuerde que dijimos que todos los chatbots requerían un dominio razonablemente cerrado. Los problemas de la mesa de ayuda de computadora pueden ser un dominio muy grande, pero esencialmente está cerrado y la base de conocimiento podría definirse mediante los registros de soporte anteriores.
La segunda y más divertida característica es que los investigadores necesitaron enseñar a su Generador de Chatbots a hablar inglés coloquial. Por lo tanto, además de capacitarse en la base de conocimientos técnicos, también lo capacitaron en un conjunto de datos públicos de 2.000 reproducciones de pantalla, de las cuales aprendió inglés coloquial moderno.
El resultado fue reportado como bastante exitoso con el sistema capaz de asimilar el lenguaje hablado complejo de varias partes, determinando correctamente la intención y la causa. También podría responder en una conversación compleja y de varias partes para que el usuario pueda hacer interjecciones, o pedir aclaraciones si un paso correctivo particular no se entendió o si fue demasiado complejo.
Sí. Hoy hay ejemplos de chatbots generativos, pero este es principalmente el dominio de los chatbots por venir. Mientras tanto, el camino hacia los chatbots basados en reglas está bien desarrollado, aunque sea nuevo y esté listo para su proyecto.
¿Seguimos? Espere la siguiente entrada del tema.