Bot en redes neuronales: cómo funciona y aprende un asistente virtual

En 2016, en la cima de la popularidad de los chatbots, nuestro equipo creó asistentes de botón para los negocios. Hasta que surgió una idea interesante: "¿Qué pasa si automatizamos el soporte al cliente con redes neuronales?" Queríamos que los robots de chat finalmente aprendieran a entender el lenguaje natural y se sintieran cómodos.

Se necesitaron cuatro matemáticos, seis meses de arduo trabajo, un nuevo lenguaje de programación y muchos errores, y creamos un constructor en el que todos pueden armar un asistente virtual con inteligencia artificial.

En el material contaremos


  • ¿En qué se diferencia un asistente virtual de un bot de chat normal?
  • ¿Es cierto que los asistentes virtuales entienden el lenguaje?
  • Cómo enseñamos al robot a entender el contexto y escribimos el lenguaje lialang
  • Prueba de caso: cómo automatizamos el soporte en tres bancos
  • Creación de Lia Platform y motor para interfaces.
  • Tres pasos: cómo funciona la plataforma para ensamblar asistentes virtuales (donde cualquiera, incluso un no programador, puede ensamblar un robot)


Chat bot vs asistente virtual


Los chatbots avanzados pudieron resaltar palabras clave e imitar el diálogo humano en los años 60. Los hippies se lanzaron al LSD, los Beatles reunieron estadios, y Joseph Weizenbaum creó a Eliza, una interlocutora-psicoterapeuta que dará muchas probabilidades a muchos robots modernos, e incluso a psicólogos.
Por ejemplo, en la oración "Mi padre me odia", Eliza respondió a la palabra clave "padre" y preguntó: "¿Quién más en la familia te odia?" Pero el robot psicoterapeuta no entendió la esencia de los problemas. Los chatbots modernos también funcionan: palabras clave, guiones lineales y una parodia del diálogo en vivo.

Pero algo ha cambiado desde los años 60: ahora, gracias al aprendizaje automático y las tecnologías de PNL, podemos enseñar a los bots de chat a comprender el lenguaje natural y el contexto. Esto sigue siendo una imitación, pero más significativo.

Para ver la diferencia, comparemos el chatbot y el asistente: imagine que necesitamos hacer un sumiller virtual que ayude a los clientes con la elección del vino.

Etapa 1


La primera etapa del chatbot y el asistente virtual es una: resolvemos las solicitudes de los usuarios y creamos frases que pueden escribir. Y luego prescribimos cómo actuará el robot en respuesta.

La solicitud básica es clara: recoger el vino. Pero esta solicitud puede tener muchos parámetros: razón, precio, país, color, variedad de uva. Quizás el usuario escriba inmediatamente el nombre del vino que se va a encontrar. O aclarará los detalles: "¿Dónde se hace?" O tal vez por curiosidad, comenzará a lanzar el bot con preguntas: "¿Qué botella es la más cara del mundo?" Y así sucesivamente. Además, además de las solicitudes en el caso, hay "hola", "adiós", "cómo estás" y otras frases de conversación que deben preguntarse.

Puedes fantasear infinitamente, pero aún así no podremos predecir todas las preguntas de los usuarios. Cuando nos parece que las situaciones descritas serán suficientes para cubrir el 98% de las solicitudes, nos detenemos (aunque la dura realidad se interrumpe y descubrimos que el 80% se cubrirá en el mejor de los casos).

Luego, dispersamos nuestras suposiciones sobre las necesidades de los usuarios para solicitudes específicas: intenciones. Las intenciones indican lo que el usuario quiere, pero descarta información sobre cómo escribió al respecto. Esta etapa es la misma para chatbots y asistentes.

Lista de intenciones


Intención 1 - Quiero cualquier vino
Frases:

- Ayudame a elegir un vino
- ¿Qué vino recomendarías?
- Quiero el mejor vino
- ...
Qué hacer con él: seleccione al azar uno de los vinos más populares e informe al usuario.

Intención 2 - vino más barato

Frases:

- ¿Hay buenos vinos de hasta 1000 rublos?
- Pero no hay nada más barato?
- demasiado caro para mi
- ...
Qué hacer: agregue un filtro de precios a la solicitud y elija uno de los vinos más populares.

Intención 3 - Quiero vino para carne
Frases:

- Aconsejar el vino a la carne.
"Voy a tener gulash para la cena". Que beber
- ...
Qué hacer al respecto: una solicitud a la base de datos según el criterio "a la carne", seleccione uno de los vinos más populares e informe al usuario.

... (y así sucesivamente cientos de intenciones diferentes)

Intención 290: no entendimos al usuario
Frases: cualquier otra

Qué hacer: emita una frase: "No sé a qué se refiere, pero el Pinista es encantador en cualquier época del año".

Etapa 2


En esta etapa, comenzamos a crear un algoritmo por el cual el robot funcionará. Aquí termina la similitud del chatbot y el asistente virtual.

Al codificar un chatbot, el programador determina manualmente las palabras clave para cada intención, y cuando el usuario escribe, el bot buscará estas palabras clave en la frase.

Al desarrollar un asistente, un programador enseña un algoritmo para comparar réplicas de usuarios de acuerdo con el significado léxico. Esto le permite encontrar la intención más cercana.

Vino selecto con un bot de chatSelección de vinos con un asistente virtual de IAQue paso
Usuario: ¡Hola! Quiero elegir vino para cenar antes de 2000r
Bot: Hola!
Bot: ¿Qué rango de precios estamos buscando?
Usuario: hasta 2000r
Bot: Puedo recomendar Ramírez de la Piscina. A lo mejor de la tarta, el hombre guapo de España es adecuado para la cena y para su serie favorita. 1240₽ por botella
Usuario: ¡Hola! Quiero elegir vino para cenar antes de 2000r
Asistente: Hola! Puedo recomendar Ramírez de la Piscina. A lo mejor de la tarta, el hombre guapo de España es adecuado para la cena y para su serie favorita. 1240₽ por botella
Bot: fui por palabras clave para elegir + vino. No entendí el rango de precios y volví a preguntar. Asistente: buscó la intención más cercana y recuperó el rango de precios.
Usuario: no me gusta la tarta
Bot: Tu candidato es Casillero del Diablo Cabernet Sauvignon Reserva
Bot: la tarta chilena Sauvignon definitivamente te calentará. Solo 872₽
Usuario: no me gusta la tarta
Asistente: Su candidato es Antigal, "Uno" Malbec.
Asistente: un argentino suave directamente desde 2015. El precio de una botella es de $ 20
Chatbot fue guiado por la palabra clave "tarta" y cometió un error. Y el asistente entendió que la intención más cercana a "No me gusta la tarta" eran los vinos suaves.
Usuario: Bueno, es muy barato. Probablemente lo tomaré.
Bot: Entonces prueba "FYI" Red Blend
Bot: a pesar de la alta calificación, su precio es de solo $ 10
Bot: buena elección
Usuario: Bueno, es muy barato. Probablemente lo tomaré.
Asistente: Buena Elección
El proceso de robots ofrece uno a la vez. El Sr. chatbot miró la palabra "económico", respondió de acuerdo con la plantilla; como resultado, no lo adivinó y se confundió. El asistente simplemente ignoró la primera oración, ya que entendió la segunda.

Cómo funciona: una tabla que compara chatbots y asistentes virtuales
Chat botAsistente virtual
Para entender al usuario, tomamos palabras clave.
Al crear un chatbot, el aprendizaje automático y las tecnologías NLU no se utilizan.
Para entender al usuario, hacemos una comparación "inteligente" y elegimos la intención más cercana (un poco más adelante explicamos cómo funciona).
El aprendizaje automático y los algoritmos NLU nos permiten medir la distancia entre réplicas. Por ejemplo, la frase "nave espacial" está más cerca de "avión" que "scooter". Y de la "venta del riñón" - muy lejos.
Preparación: para cada intención, escribimos las palabras clave (wine_year_meat: steak, meat, goulash, wine + meat)

Algoritmo
  • Tomamos las palabras de la réplica del usuario ("Aconsejar vino al bistec" → aconsejar, vino, bistec).
  • Elija la intención en la que la mayoría de las palabras clave provienen de la réplica del usuario (wine_meat_meat).
  • Si el bot no encontró intersecciones por palabras clave, seleccionamos la intención "no entendimos al usuario".
  • Realizar una acción que coincida con la intención.

Preparación: entrenamos el modelo para comparaciones inteligentes

Algoritmo
  • Compare la frase de un usuario con frases de intenciones usando una comparación inteligente.
  • Elige la intención con las frases más cercanas
  • Si la intención seleccionada no está lo suficientemente cerca de la réplica del usuario (el umbral no ha pasado), seleccionamos la intención "no entendimos al usuario".
  • Realizar una acción que coincida con la intención.

Cómo mejorar:
Para reducir errores, agregue comandos y botones.
Luego, los usuarios generalmente dejan de comunicarse en el idioma y simplemente hacen clic en los botones.
Tales mejoras conducen a la degradación de la inteligencia conversacional.
Cómo mejorar:
Después de que los usuarios hablen con el robot, tendremos nuevos ejemplos de frases y las distribuiremos de acuerdo con sus intenciones.
Con el tiempo, el porcentaje de cobertura aumentará, el asistente comenzará a lidiar mejor con la comunicación.
Tales mejoras conducen a una inteligencia conversacional mejorada.


¿Es cierto que los asistentes virtuales entienden el lenguaje?


Los algoritmos pueden distinguir algunas frases de otras, pero ¿podemos decir que los robots realmente entienden el lenguaje?

Para responder a esta pregunta, volvamos a una comparación del significado léxico de las frases. El significado para una computadora son tipos de datos comprensibles: cadenas, números y combinaciones de los mismos. Por lo tanto, el programador se enfrenta a la tarea de convertir el texto fuente en una forma adecuada para operaciones matemáticas de comparación: un vector.

vectorize(" ") = (0.004, 17.43, -0.021, ..., 18.68) vectorize("  ") = (0.004, 19.73, -0.001, ..., 25.28) vectorize("  ") = (-8.203, 15.22, -9.253, ..., 10.11) vectorize(" ") = (89.23, -68.99, -10.62, ..., -0.982) 

Para nuestras tareas, los vectores de frases léxicamente cercanas deben estar matemáticamente cerca uno del otro, los léxicamente distantes deben estar muy lejos, el vector de frases de otra ópera debe estar muy lejos. Por ejemplo, "Quiero vino" está más cerca de "Quiero vino blanco" que de "No quiero vino". Y lejos de los "ataques de Marte".

Una red neuronal adecuadamente entrenada podrá concluir el significado léxico en estos vectores. Resulta que, para comparar el significado de dos frases, necesitas comparar sus vectores.

Por lo tanto, la respuesta a la pregunta "¿Los robots entienden el lenguaje?" Será así: no entienden cómo es una persona, solo saben cómo comparar los significados léxicos y no confunden lo cálido con lo suave. Pero cuando los algoritmos pueden ofrecer mejoras sugerentes y sacar conclusiones, sinceramente decimos: sí, ha llegado la comprensión. Mientras tanto, "entender el idioma" es solo una hermosa frase de marketing.

De hecho, el robot solo funciona con analogías, como un niño de tres años. Sin embargo, si le da al niño un número suficiente de ejemplos, podrá fingir que es un intelectual y conducir una discusión. El operador "en vivo" de la primera línea de soporte funciona de la misma manera: describe un conjunto de situaciones y les dice cómo comportarse en ellas. Por lo tanto, los asistentes virtuales son muy adecuados para la automatización de soporte.

Cómo le enseñamos al robot a entender el contexto: lialang


Para un soporte normal, los robots necesitan poca "comprensión" del lenguaje natural; es importante que puedan responder preguntas y mantenerse en contexto. Para hacer esto, escribimos lialang, un lenguaje de marcado de diálogo donde los scripts se pueden describir y pasar al robot.

La tarea principal de un programador de lialang es describir todas las situaciones que pueden ocurrir en un diálogo entre una persona y una máquina. Para hacer esto, en nuestro idioma puede asociar los nombres de intenciones y acciones.

Considere un ejemplo simple: un saludo:

 if intent() { reaction(_) } 

Parece un código regular, pero una cuadrícula neural funciona detrás de la construcción de intención (...): lialang describe el diálogo en patrones generales ("si le pidieron algo") utilizando las construcciones de programación habituales. Por supuesto, para que esto funcione, debe aplicar el aprendizaje automático y las tecnologías NLU, porque el usuario puede escribir su solicitud como lo desee.

Y aquí está cómo describir situaciones contextuales.
Introdujimos el constructo "era" para captar saludos inapropiados en cualquier parte del diálogo:

 if intent() { if was_reaction(_) { reaction(___) } else { reaction(_) } } 

Dice: Lia, si te saludan, saluda en respuesta. Y si después de eso volvieron a decir "hola", di que ya has dicho hola.

Una reacción es una acción que Lia debe realizar en respuesta a una intención. En el 95% de los casos, esto es solo texto. Pero también el robot puede llamar a una función en el código, cambiar la comunicación al operador o realizar otras acciones complejas.

El código para enviar texto y funciones existe por separado del idioma: el idioma describe situaciones de la manera más simple posible.

Ahora intentemos escribir algo más complicado: en un chat con el banco, los clientes a menudo solicitan sus detalles. Aprendamos cómo enviarlos al chat y al correo usando lialang.

 if intent(_) or intent(___) { reaction(___) { if intent(__) { reaction(___) } } } if intent(___) { reaction(___) } 

Aquí se describen dos situaciones:

  1. Lia, si te pidieron que enviaras los detalles, envíalos al chat. Si después de que preguntaron "es necesario a la oficina de correos", envíelos a la oficina de correos.
  2. Lia, si te pidieron inmediatamente que envíes los detalles al correo, envía los detalles al correo.

Entonces lialang hace su trabajo, funciona en contexto. Incluso si una persona escribe "por correo, por favor", el robot comprenderá que estamos hablando de detalles.

Lia ha aprendido a soportar escenarios complejos: en el momento necesario para el usuario, obtendrá / pondrá datos de / a CRM, enviará SMS, ayudará con el pago o hablará de la vida.

Gradualmente, mejoramos el lenguaje: agregamos variables, funciones, entidades (fechas, direcciones, números de teléfono, nombres, etc.), estados y otras construcciones útiles. Por lo tanto, se hizo aún más conveniente escribir sobre él.

Prueba de caso: cómo automatizamos el soporte en tres bancos


Tan pronto como creamos la tecnología, tuvimos que finalizarla con urgencia: tuvimos nuestro primer cliente. VTB necesitaba automatizar el soporte en un nuevo banco de Internet para emprendedores.

Comenzamos con bastante éxito, especialmente para un producto que se creó en cuatro meses. Nuestro robot híbrido para VTB se basó en redes neuronales y fue efectivo de inmediato: respondió más de 800 preguntas, admitió varios escenarios complejos (declaraciones, cambios de tarifas, configuraciones de usuario) y habló como una persona. Como resultado, en dos meses, nuestra Lia redujo la carga de soporte en un 74%. Quedó claro: la idea con la automatización de soporte funciona.

imagen

Además, en base a Lia, automatizamos las preguntas frecuentes en Rocketbank y DeloBank, y en dos semanas cerraron el 32% de las aplicaciones sin operadores.

Parece que los niños llegaron al éxito. Sin embargo, después de los primeros clientes, quedó claro que el concepto necesitaba ser cambiado. Fue un infierno: tuvimos que modificar manualmente los guiones, hacer ediciones, desarrollar las ramas. Lo mismo con los robots simples, solo que es más difícil y requiere más fuerza. En esta situación, era difícil de escalar.

Luego decidimos hacer una herramienta en la que el cliente mismo pueda armar incluso un asistente complejo. Y solo ayudaremos con tutoriales y educaremos a los usuarios.

Lia Platform y motor para interfaces


Entonces, decidimos hacer una plataforma para aquellos que no entienden el desarrollo. Aunque lialang contiene menos de diez diseños diferentes, no todos los gerentes le enseñarán a crear su propio bot. Los gerentes aman el mouse.

Por lo tanto, comenzamos a pensar en una interfaz que sea capaz de hacer todo lo que lialang puede hacer. No tendrá problemas con ramas anidadas, transiciones de un guión a otro, y lo más importante, no solo nuestros programadores, sino todos los que quieran pueden crear guiones.

Mira cómo se ve:

Lia patform
Los diálogos son algo no lineal y es muy difícil escribir un motor universal para todo tipo de esquemas de conversación. Pero antes de pensar en los esquemas, ya teníamos lialang: se convirtió en el motor.

Independientemente de los diseñadores de interfaces que se les ocurran, no codificamos cerebros para ello, sino que solo escribimos un pequeño traductor de marcado de la interfaz al código de lialang. Si se vuelve a hacer la interfaz, solo necesitaremos cambiar el traductor, gracias a lo cual el comando de interfaz y el comando central pueden existir por separado.

¿Cómo funciona la plataforma para crear asistentes virtuales?


Para armar su propio asistente virtual en Lia, el usuario debe pasar por tres etapas.

Paso 1. Descargue el historial de chat con los usuarios para que el robot comprenda y resalte los escenarios principales


Si el cliente tiene un historial de conversaciones con los usuarios, puede subirlos al sistema y obtener clústeres de las consultas más populares. Será muy conveniente crear intenciones a partir de ellos.

Un ejemplo de desconocimiento del usuario

Con el tiempo, la efectividad de Lia aumentará. Los mensajes que el robot no pudo responder se distribuyen nuevamente en grupos: por ejemplo, "¿quién eres?", "¿Quién eres?", "¿Cuál es tu nombre?" Y "¿eres un robot?". Entonces, la plataforma aprende de forma semiautomática: el usuario ve dónde está la brecha y la cierra, agregando nuevos escenarios; como resultado, el porcentaje de solicitudes cubiertas crece del 30% al 70% en seis meses.

Si no hay un historial de correspondencia, omitimos este paso e inmediatamente comenzamos con el segundo paso: predecimos qué solicitudes los usuarios recurrirán al asistente.

Paso 2. Anotamos la intención: 10-20 opciones para las solicitudes de usuarios más frecuentes


En la segunda etapa, prescribimos intenciones basadas en las 10-20 consultas más populares: este número de opciones es suficiente gracias a las redes neuronales. Entonces, una frase como "Quiero pedir vino" le enseña al bot a reconocer solicitudes de usuarios similares: por ejemplo, "Obtener vino" o "Pedir vino".

Ejemplo de marcado de intención

Otro asistente comprende y extrae la esencia: nombres de ciudades, números de teléfono, direcciones, marcas de tiempo, períodos, fechas y maldiciones, incluso si dice "cansado, traiga una caja de vino mañana".

Además, los usuarios pueden agregar sus propios objetos y marcar manualmente frases de entrenamiento para que el asistente aprenda más rápido. Esta es una de las características más poderosas de la plataforma, gracias a la cual puede crear robots que no funcionan peor que un operador humano.

Paso 3. Crea un escenario: prescribe varias respuestas o acciones


Aquí el usuario debe encontrar respuestas a las solicitudes de los usuarios. El 95% del proyecto promedio generalmente toma un escenario simple de preguntas y respuestas: respuestas a preguntas populares.

imagen

Por cierto, el asistente puede responder con imágenes, videos y archivos de audio y, si es necesario, enviar una geolocalización.

El salto para construir es particularmente útil: gracias a él, Lia puede cambiar de un escenario a otro y luego regresar, resolviendo varios problemas. Esto es útil si necesita apartarse en el diálogo, pero luego volver al camino correcto: por ejemplo, haga una pregunta aclaratoria.

Ejemplo de diálogo saltar a:

Asistente: Necesitamos aclarar la dirección de entrega, porque el destinatario no responde.
Cliente: ¿Y sobre qué? Cual orden? (JumpTo para aclarar el pedido)
Asistente: Orden 21 de agosto, Antigal, "Uno" Malbec.
Asistente: Entonces, ¿podemos aclarar la dirección de entrega actual? (Regrese al guión principal)

Cuando el creador quiere que su asistente no solo responda con texto, sino que tome medidas, podrá llamar a un programador para escribir fragmentos de JS para el especialista. Le permitimos ejecutar JavaScript directamente durante las secuencias de comandos: acceder a la API externa, enviar un correo electrónico o realizar otras acciones complejas.

4. Resumen


Un asistente puede integrarse con cualquier cosa: hablar con una persona por teléfono, en mensajería instantánea o un widget que el cliente publicará en el sitio.

Montar un asistente inteligente en la plataforma lleva de un par de horas a un mes. Luego, el robot aprende a comprender de manera realista las solicitudes y a reconocer los patrones: lleva unos seis meses (todo este tiempo una persona viva lo supervisa). Las empresas pueden hacer la mayoría de las tareas de rutina para la chica robótica de Lia: desde coordinar la entrega y llamar a un taxi hasta consultar a los clientes.

Ejemplo de chat de Virtual Wine Assistant

Por cierto, ya hemos transferido proyectos con bancos a la plataforma. Funcionan igual de bien, pero están mucho más convenientemente moderados.

En un futuro cercano, planeamos agregar extractores, lo que permitirá a nuestros usuarios extraer datos más complejos (por ejemplo, el robot comprenderá la frase "pasado mañana después del almuerzo"). También finalizaremos el control de versiones para que los clientes puedan rodar y revertir rápidamente versiones de proyectos. Y también liberaremos el sistema de roles de la organización.

Esperamos que los pronósticos de Gartner sean correctos, y en 2022, hasta el 70% de todas las interacciones con los clientes pasarán por algún tipo de IA. Según nuestra idea, los diseñadores como Lia ayudarán a transferir el servicio al cliente a los robots aún más rápido.

Source: https://habr.com/ru/post/478572/


All Articles