Bot em redes neurais: como um assistente virtual funciona e aprende

Em 2016, no auge da popularidade dos chatbots, nossa equipe criou assistentes de botão para os negócios. Até surgir um pensamento interessante: "E se automatizarmos o suporte ao cliente com redes neurais?" Queríamos que os robôs de bate-papo finalmente aprendessem a entender a linguagem natural e se sentissem confortáveis.

Foram necessários quatro matemáticos, seis meses de trabalho duro, uma nova linguagem de programação e muitos erros - e criamos um construtor no qual todos podem montar um assistente virtual com IA.

No material, vamos contar


  • Como um assistente virtual difere de um bot de bate-papo comum
  • É verdade que os assistentes virtuais entendem o idioma
  • Como ensinamos o robĂ´ a entender o contexto e escrevemos a linguagem lialang
  • Teste de caso: como automatizamos o suporte em trĂŞs bancos
  • Criação da plataforma Lia e mecanismo para interfaces
  • TrĂŞs etapas: como funciona a plataforma de montagem de assistentes virtuais (onde qualquer pessoa, mesmo um nĂŁo programador, pode montar um robĂ´)


Bot de bate-papo vs assistente virtual


Os chatbots avançados conseguiram destacar palavras-chave e imitar o diálogo humano nos anos 60. Os hippies se jogaram no LSD, os Beatles reuniram estádios e Joseph Weizenbaum criou Eliza, uma interlocutora-psicoterapeuta que dará chances a muitos bots modernos e até psicólogos.
Por exemplo, na frase "Meu pai me odeia", Eliza respondeu à palavra-chave "pai" e perguntou: "Quem mais te odeia da família?" Mas o psicoterapeuta-robô não entendeu a essência dos problemas. Os chatbots modernos também funcionam: palavras-chave, scripts lineares e uma paródia do diálogo ao vivo.

Mas algo mudou desde os anos 60: agora, graças ao aprendizado de máquina e às tecnologias de PNL, podemos ensinar bots de bate-papo a entender a linguagem e o contexto naturais. Isso ainda é uma imitação, mas mais significativo.

Para ver a diferença, vamos comparar o chatbot e o assistente - imagine que precisamos criar um sommelier virtual que ajude os clientes na escolha do vinho.

Etapa 1


A primeira etapa do chatbot e do assistente virtual é uma: descobrimos as solicitações dos usuários e criamos frases que eles podem escrever. E então prescrevemos como o robô reagirá.

O pedido básico é claro - pegue o vinho. Mas esse pedido pode ter muitos parâmetros: motivo, preço, país, cor, variedade de uva. Talvez o usuário escreva imediatamente o nome do vinho a ser encontrado. Ou ele esclarecerá os detalhes: "Onde é feito?" Ou talvez por curiosidade, ele começará a jogar o bot com perguntas: “Qual garrafa é a mais cara do mundo?” E assim por diante. Além disso, além dos pedidos no caso, existem “olá”, “tchau”, “como você está” e outras frases pequenas que precisam ser feitas.

Você pode fantasiar sem parar, mas ainda não conseguiremos prever todas as perguntas dos usuários. Quando parece-nos que as situações descritas serão suficientes para cobrir 98% dos pedidos, paramos (embora a dura realidade se interrompa e descobrimos que 80% será coberto na melhor das hipóteses).

Em seguida, dispersamos nossas suposições sobre as necessidades dos usuários para solicitações específicas - intenções. As intenções indicam o que o usuário deseja, mas descarte informações sobre como ele escreveu sobre isso. Esta fase é a mesma para chatbots e assistentes.

Lista de intenções


Intenção 1 - Quero qualquer vinho
Frases:

- Me ajude a escolher um vinho
- Que vinho vocĂŞ recomendaria?
- eu quero o melhor vinho
- ...
O que fazer com isso: selecione aleatoriamente um dos vinhos mais populares e informe o usuário.

Intenção 2 - vinho mais barato

Frases:

- existem bons vinhos de até 1000 rublos?
- Mas não há nada mais barato?
- muito caro para mim
- ...
O que fazer: adicione um filtro de preços à solicitação e escolha um dos vinhos mais populares.

Intenção 3 - Quero vinho para carne
Frases:

- Aconselhar o vinho ao bife
"Vou comer goulash para o jantar." O que beber?
- ...
O que fazer sobre isso: uma solicitação ao banco de dados pelo critério “carne”, selecione um dos vinhos mais populares e informe o usuário.

... (e assim por diante, centenas de intenções diferentes)

Intenção 290 - não entendemos o usuário
Frases: qualquer outra

O que fazer: emita uma frase curta: "Não sei o que você quis dizer, mas o Pinista é delicioso em qualquer época do ano".

Etapa 2


Nesse estágio, começamos a criar um algoritmo pelo qual o robô funcionará. Aqui a semelhança do chatbot e do assistente virtual termina.

Ao codificar um chatbot, o programador determina manualmente as palavras-chave para cada intenção e, quando o usuário escreve, o bot procurará essas palavras-chave na frase.

Ao desenvolver um assistente, um programador ensina um algoritmo para comparar réplicas de usuários de acordo com o significado lexical. Isso permite que você encontre a intenção mais próxima.

Escolha vinho com um bot de bate-papoSeleção de vinhos com um assistente virtual de IAO que aconteceu
Usuário: Olá! Quero escolher vinho para o jantar antes de 2000r
Bot: Olá!
Bot: Qual faixa de preço estamos procurando?
Usuário: até 2000r
Bot: Eu posso recomendar Ramirez de la Piscina. Para o melhor da torta, um homem bonito da Espanha é adequado para o jantar e para a sua série favorita. 1240₽ por garrafa
Usuário: Olá! Quero escolher vinho para o jantar antes de 2000r
Assistente: Olá! Eu posso recomendar Ramirez de la Piscina. Para o melhor da torta, um homem bonito da Espanha é adequado para o jantar e para a sua série favorita. 1240₽ por garrafa
Bot - usei as palavras-chave para escolher + vinho. Não entendi a faixa de preço e perguntei novamente. Assistente - procurou a intenção mais próxima e recuperou a faixa de preço.
Usuário: Eu não gosto de torta
Bot: Seu candidato Ă© Casillero del Diablo Cabernet Sauvignon Reserva
Bot: a torta chilena de Sauvignon definitivamente vai te aquecer. Apenas 872â‚˝
Usuário: Eu não gosto de torta
Assistente: Seu candidato Ă© Antigal, "Uno" Malbec.
Assistente: Um argentino macio, direto de 2015. O preço de uma garrafa é de US $ 20
O Chatbot foi guiado pela palavra-chave "azedo" e cometeu um erro. E o assistente entendeu que a intenção mais próxima de “não gosto de torta” eram os vinhos suaves.
Usuário: Bem, é tão barato. Provavelmente vou aceitar.
Bot: Então tente a mistura vermelha “FYI”
Bot: Apesar da alta classificação, seu preço é de apenas US $ 10
Bot: boa escolha
Usuário: Bem, é tão barato. Provavelmente vou aceitar.
Assistente: Good Choice
O processo de robĂ´s oferece um de cada vez. O Sr. chatbot olhou para a palavra "barato", respondeu de acordo com o modelo - como resultado, ele nĂŁo adivinhou e ficou confuso. O assistente simplesmente ignorou a primeira frase, como ele entendeu a segunda.

Como funciona: uma tabela comparando chatbots e assistentes virtuais
Bot de bate-papoAssistente virtual
Para entender o usuário, usamos palavras-chave.
Ao criar um chatbot, o aprendizado de máquina e as tecnologias NLU não são usadas.
Para entender o usuário, fazemos uma comparação “inteligente” e escolhemos a intenção mais próxima (um pouco mais tarde explicamos como funciona).
Os algoritmos de aprendizado de máquina e NLU nos permitem medir a distância entre réplicas. Por exemplo, a frase "nave espacial" está mais próxima de "avião" do que "scooter". E a partir da "venda do rim" - muito longe.
Preparação: para cada intenção, escrevemos as palavras-chave (vinho_ano_carne: bife, carne, goulash, vinho + carne)

Algoritmo:
  • Pegamos as palavras da rĂ©plica do usuário (“Aconselhar vinho para bife” → aconselhar, vinho, bife).
  • Escolha a intenção na qual a maioria das palavras-chave está na rĂ©plica do usuário (wine_meat_meat).
  • Se o bot nĂŁo encontrou interseções por palavras-chave, selecionamos a intenção "nĂŁo entendemos o usuário".
  • Execute uma ação que corresponda Ă  intenção.

Preparação: treinamos o modelo para comparações inteligentes

Algoritmo:
  • Compare a frase de um usuário com frases de intenções usando uma comparação inteligente.
  • Escolha a intenção com as frases mais prĂłximas
  • Se a intenção selecionada nĂŁo estiver prĂłxima o suficiente da rĂ©plica do usuário (o limite nĂŁo passou), selecionamos a intenção "nĂŁo entendemos o usuário".
  • Execute uma ação que corresponda Ă  intenção.

Como melhorar:
Para reduzir erros, adicione comandos e botões.
Em seguida, os usuários geralmente deixam de se comunicar no idioma e simplesmente clicam nos botões.
Tais melhorias levam à degradação da inteligência conversacional.
Como melhorar:
Depois que os usuários conversarem com o robô, teremos novos exemplos de frases e os distribuiremos de acordo com suas intenções.
Com o tempo, a porcentagem de cobertura aumentará, o assistente começará a lidar melhor com a comunicação.
Tais melhorias levam a uma inteligĂŞncia conversacional aprimorada.


É verdade que os assistentes virtuais entendem o idioma?


Os algoritmos podem distinguir algumas frases de outras - mas podemos dizer que os robĂ´s realmente entendem a linguagem?

Para responder a essa pergunta, voltemos a uma comparação do significado lexical das frases. O significado para um computador são tipos de dados compreensíveis: cadeias, números e combinações dos mesmos. Portanto, o programador enfrenta a tarefa de transformar o texto de origem em uma forma adequada para operações matemáticas de comparação - um vetor.

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 nossas tarefas, os vetores de frases lexicamente próximas devem estar matematicamente próximos, os lexicamente distantes devem estar distantes, o vetor de frases de outra ópera deve estar muito distante. Por exemplo, "eu quero vinho" está mais próximo de "eu quero vinho branco" do que "eu não quero vinho". E longe de "ataques de Marte".

Uma rede neural adequadamente treinada será capaz de concluir um significado lexical nesses vetores. Acontece que, para comparar o significado de duas frases, você precisa comparar seus vetores.

Portanto, a resposta para a pergunta “Os robôs entendem a linguagem?” Será assim: eles não entendem como é uma pessoa, eles apenas sabem como comparar significados lexicais e não confundem o quente com o macio. Mas quando os algoritmos podem oferecer refinamentos sugestivos e tirar conclusões, honestamente dizemos: sim, a compreensão chegou. Enquanto isso, "entender a linguagem" é apenas uma bela frase de marketing.

De fato, o robô só trabalha com analogias, como uma criança de três anos de idade. No entanto, se você der à criança um número suficiente de exemplos, ela poderá fingir ser intelectual e liderar uma discussão. O operador “ativo” da primeira linha de suporte funciona da mesma maneira - eles descrevem um conjunto de situações e dizem a eles como se comportar nelas. Portanto, os assistentes virtuais são adequados para automação de suporte.

Como ensinamos o robĂ´ a entender o contexto: lialang


Para suporte normal, os robôs precisam de pouco "entendimento" da linguagem natural - é importante que eles possam responder perguntas e permanecer no contexto. Para fazer isso, escrevemos lialang, uma linguagem de marcação de diálogo em que os scripts podem ser descritos e passados ​​para o robô.

A principal tarefa de um programador lialang é descrever todas as situações que podem acontecer no diálogo entre uma pessoa e uma máquina. Para fazer isso, em nosso idioma você pode associar os nomes de intenções e ações.

Considere um exemplo simples - uma saudação:

 if intent() { reaction(_) } 

Parece código normal, mas uma grade neural trabalha por trás do construto intent (...) - lialang descreve o diálogo em padrões gerais (“se ​​você for solicitado algo”) usando as construções de programação usuais. Obviamente, para que isso funcione, é necessário aplicar as tecnologias de aprendizado de máquina e NLU, porque o usuário pode escrever sua solicitação conforme desejar.

E aqui está como descrever situações contextuais.
Introduzimos o constructo “was” para capturar saudações inadequadas em qualquer lugar do diálogo:

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

Diz: Lia, se eles disseram oi para você, diga oi em resposta. E se depois disso eles disseram novamente “olá” - diga que você já disse olá.

Uma reação é uma ação que Lia deve executar em resposta a uma intenção. Em 95% dos casos, isso é apenas texto. Mas também o robô pode chamar uma função no código, alternar a comunicação com o operador ou executar outras ações complexas.

O código para enviar texto e funções existe separadamente do idioma - o idioma descreve as situações da maneira mais simples possível.

Agora, vamos tentar escrever uma coisa mais complicada - em um bate-papo com o banco, os clientes geralmente solicitam seus detalhes. Vamos aprender como enviá-los para bate-papo e e-mail usando lialang.

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

Duas situações são descritas aqui:

  1. Lia, se você foi solicitado a enviar os detalhes - envie-os para o bate-papo. Se depois que eles perguntarem "é necessário para os correios", envie-os para os correios.
  2. Lia, se vocĂŞ foi imediatamente solicitado a enviar os detalhes pelo correio - envie os detalhes pelo correio.

Então lialang faz seu trabalho - trabalha em contexto. Mesmo que uma pessoa escreva "por correio, por favor", o robô entenderá que estamos falando de detalhes.

Lia aprendeu a suportar cenários complexos - no momento necessário para o usuário, ela obtém / coloca dados de / para o CRM, envia SMS, ajuda no pagamento ou fala sobre a vida.

Gradualmente, aprimoramos o idioma: adicionamos variáveis, funções, entidades (datas, endereços, números de telefone, nomes etc.), estados e outras construções úteis. Por isso, tornou-se ainda mais conveniente escrever nele.

Teste de caso: como automatizamos o suporte em trĂŞs bancos


Assim que fabricamos a tecnologia, ela teve que ser finalizada com urgĂŞncia - tivemos nosso primeiro cliente. O VTB precisava automatizar o suporte em um novo banco da Internet para empreendedores.

Começamos com bastante sucesso - especialmente para um produto que foi criado em quatro meses. Nosso robô híbrido para VTB foi baseado em redes neurais e foi imediatamente eficaz: respondeu a mais de 800 perguntas, suportou vários cenários complexos (declarações, alterações de tarifas, configurações do usuário) e falou como pessoa. Como resultado, em dois meses, nosso Lia reduziu a carga de suporte em 74%. Ficou claro: a idéia com automação de suporte funciona.

imagem

Além disso, com base no Lia, automatizamos as perguntas frequentes no Rocketbank e no DeloBank - e em duas semanas eles fecharam 32% dos aplicativos sem operadores.

Parece que os meninos chegaram ao sucesso. No entanto, após os primeiros clientes, ficou claro que o conceito precisava ser alterado. Foi um inferno - tivemos que modificar manualmente os scripts, fazer edições, desenvolver os ramos. A mesma coisa com bots simples, apenas mais difícil e requer mais força. Nessa situação, era difícil escalar.

Decidimos então fazer uma ferramenta na qual o próprio cliente seria capaz de montar até um assistente complexo. E apenas ajudaremos com tutoriais e educaremos os usuários.

Plataforma Lia e mecanismo para interfaces


Então, decidimos criar uma plataforma para quem não entende o desenvolvimento. Embora o lialang contenha menos de dez designs diferentes, nem todo gerente o ensinará a criar seu próprio bot. Os gerentes adoram o mouse.

Portanto, começamos a pensar em uma interface que será capaz de fazer tudo o que o lialang pode fazer. Ele não terá problemas com ramificações aninhadas, transições de um script para outro e o mais importante - não apenas nossos programadores, mas qualquer pessoa que queira criar scripts.

Veja como fica:

Lia patform
Os diálogos são algo não linear e é muito difícil escrever um mecanismo universal para todos os tipos de esquemas de conversação. Mas antes de pensarmos nos esquemas, já tínhamos o lialang - ele se tornou o motor.

Quaisquer que sejam os designers de interface, não codificamos cérebros para isso, mas escrevemos apenas um pequeno tradutor de marcação da interface para o código lialang. Se a interface for refeita, precisaremos apenas alterar o tradutor - graças ao qual o comando da interface e o comando do núcleo podem existir separadamente.

Como funciona a plataforma de criação de assistentes virtuais?


Para montar seu próprio assistente virtual no Lia, o usuário precisa passar por três etapas.

Etapa 1. Baixe o histórico de bate-papo com os usuários para que o robô entenda e destaque os principais cenários


Se o cliente tiver um histórico de conversas com os usuários, ele poderá enviá-las ao sistema e obter clusters das consultas mais populares. Será muito conveniente criar intenções a partir deles.

Um exemplo de desconhecimento do usuário

Com o tempo, a eficácia do Lia aumentará. As mensagens que o robô não pôde responder são novamente distribuídas em clusters: por exemplo, “quem é você?”, “Quem é você?”, “Qual é o seu nome?” E “você é um robô?” Se enquadram em um grupo. Portanto, a plataforma aprende automaticamente de maneira semi-automática: o usuário vê onde está a lacuna e a fecha, adicionando novos cenários - como resultado, o percentual de solicitações cobertas cresce de 30% a 70% em seis meses.

Se não houver histórico de correspondência, pule esta etapa e comece imediatamente com a segunda etapa: prevemos quais solicitações os usuários recorrerão ao assistente.

Etapa 2. Anotamos a intenção: 10 a 20 opções para as solicitações de usuário mais frequentes


No segundo estágio, prescrevemos intenções com base nas 10 a 20 consultas mais populares: esse número de opções é suficiente graças às redes neurais. Portanto, uma frase como "Quero pedir vinho" ensina o bot a reconhecer solicitações de usuários semelhantes: por exemplo, "Obter vinho" ou "Pedir vinho".

Exemplo de marcação de intenção

Outro assistente entende e extrai a essência: nomes de cidades, números de telefone, endereços, horários, períodos, datas e maldições - mesmo se você disser “cansado, traga uma caixa de vinho amanhã”.

Além disso, os usuários podem adicionar seus próprios objetos e marcar manualmente as frases de treinamento para que o assistente aprenda mais rapidamente. Esse é um dos recursos mais poderosos da plataforma, graças ao qual ele pode criar robôs que não funcionam pior do que um operador humano.

Etapa 3. Crie um cenário: prescreva várias respostas ou ações


Aqui, o usuário deve apresentar respostas às solicitações do usuário. 95% do projeto médio geralmente usa um cenário simples de pergunta-resposta - respostas a perguntas populares.

imagem

A propósito, o assistente pode responder com fotos, vídeos e arquivos de áudio e, se necessário, enviar uma localização geográfica.

O salto para construir é particularmente útil - graças a ele, Lia pode alternar de um cenário para outro e depois retornar, resolvendo vários problemas. Isso é útil se você precisar se afastar do diálogo, mas depois retornar ao caminho certo: por exemplo, faça uma pergunta esclarecedora.

Caixa de diálogo de exemplo pule para:

Assistente: precisamos esclarecer o endereço de entrega, porque o destinatário não está respondendo.
Cliente: E sobre o que? Qual ordem? (JumpTo para esclarecimentos de pedidos)
Assistente: Ordem 21 de agosto, Antigal, "Uno" Malbec.
Assistente: Então, podemos esclarecer o endereço de entrega atual? (Retorne ao script principal)

Quando o criador deseja que seu assistente não apenas responda com texto, mas realize ações, ele poderá chamar um programador para escrever trechos de JS para o especialista. Permitimos que você execute o JavaScript diretamente durante os scripts: acesse a API externa, envie um email ou execute outra ação complexa.

4. Resumo


Um assistente pode se integrar a qualquer coisa: converse com uma pessoa ao telefone, em mensagens instantâneas ou em um widget que o cliente postará no site.

A montagem de um assistente inteligente na plataforma leva de duas horas a um mês. Em seguida, o robô aprende a entender realisticamente solicitações e reconhecer padrões - leva cerca de seis meses (todo esse tempo que uma pessoa viva supervisiona). Os negócios podem realizar a maioria das tarefas rotineiras da garota robótica Lia: desde coordenar a entrega e chamar um táxi até consultar clientes.

Exemplo de bate-papo do Virtual Wine Assistant

A propósito, já transferimos projetos com bancos para a plataforma. Eles funcionam tão bem, mas são muito mais convenientemente moderados.

Em um futuro próximo, planejamos adicionar extratores, o que permitirá que nossos usuários extraiam dados mais complexos (por exemplo, o robô entenderá a frase "depois de amanhã depois do almoço"). Também finalizaremos o controle de versão para que os clientes possam reverter rapidamente as versões dos projetos. E também liberaremos o sistema de funções da organização.

Esperamos que as previsões do Gartner estejam corretas - e em 2022, até 70% de todas as interações com os clientes passarão por algum tipo de IA. De acordo com a nossa ideia, designers como Lia ajudarão a transferir o serviço ao cliente para robôs ainda mais rapidamente.

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


All Articles