Como ensinamos inteligência artificial a responder perguntas de suporte. Experimente o Yandex.Taxi

Não há serviços ideais - às vezes o usuário tem dúvidas sobre o suporte técnico. É difícil dizer que, nesses casos, é mais desagradável tentar combinar uma combinação de réplicas de modelos de bot que podem resolver o problema ou aguardar a resposta de um especialista que entrará em contato com você já por meio dia.

No Yandex.Taxi, das duas opções, escolhemos a terceira - usando inteligência de máquina para criar suporte técnico com um rosto humano. Meu nome é Tatyana Savelyeva, meu grupo está envolvido no aprendizado de máquina com dados não estruturados. Por trás disso, compartilho idéias do usuário, converso sobre como automatizar um processo complexo, organizo o trabalho de equipes completamente diferentes e, é claro, coloco em prática o Deep Learning e hacks técnicos (onde sem eles).



Por que automatizar alguma coisa?


Parece, por que inventar uma estrutura de suporte em vários estágios - contratar mais pessoas. Talvez isso funcione se houver cerca de 10 solicitações por dia em suporte. Mas quando o número de chamadas de usuários tende a um milhão (o que é uma pequena porcentagem de viagens para o Yandex Taxi, mas é absolutamente impressionante), você precisa pensar em táticas mais confiáveis: encontrar e treinar um número suficiente de operadores que possam lidar com problemas atípicos em tais volumes é pelo menos mais difícil. .

Há algum tempo, a indústria decidiu resolver esse problema com a ajuda de vários níveis de suporte. No primeiro estágio, as perguntas mais simples e previsíveis foram filtradas: se a resposta pronta não couber, o problema foi classificado e passado para um especialista mais qualificado. Elegante, mas há uma nuance.

O número de chamadas está aumentando - leva mais tempo para processá-las. A taxa de transferência dos operadores, o fator humano - existem muitas razões para desacelerar o sistema, onde a conta fica por minutos? Muitas dessas restrições podem ser contornadas com a ajuda de uma máquina: não se enganará se ficar cansada e tomar decisões mais rapidamente.

Há cerca de um ano, começamos a usar o aprendizado de máquina para solicitar imediatamente ao operador possíveis cenários de interação. Agora, os clientes obtêm respostas mais rapidamente. Mas não há limite para a perfeição!

Por onde começar?


Suponha que você esteja sem sorte: o motorista não chegou e não entrou em contato. O que acontecerá com o contato com o suporte do Yandex.Taxi?



O que pode ser otimizado para resolver problemas ainda mais rapidamente? Vamos começar da primeira etapa , onde o ticket vai para uma das duas linhas. Inicialmente, a escolha dependia das palavras-chave na consulta - funcionava, mas a precisão da determinação era bastante baixa. Para corrigir isso, um classificador baseado no codificador de modelo de rede neural clássico BERT ajudou.

Nesta tarefa, a integridade é fixada para linhas de especialistas: casos que requerem procedimentos não devem passar por elas. Mas não se esqueça da luta para melhorar a precisão: o menor número possível de chamadas simples deve entrar na linha de especialistas, para que o tempo de resposta para casos realmente críticos não ultrapasse a paciência do usuário. A precisão da classificação pelos métodos de aprendizado de máquina acabou sendo duas vezes mais eficaz que a análise de palavras-chave. A velocidade de resposta a situações de emergência aumentou 1,5 vezes.

Tentar automatizar o trabalho de uma linha de especialistas dentro da estrutura das tecnologias existentes hoje é complicado: é difícil sistematizar a lógica do que está acontecendo e qualquer erro será muito caro. Voltemos às perguntas típicas e bem estudadas de primeira linha - talvez confie seu processamento a algoritmos? Assim, as tarefas rotineiras serão resolvidas ainda mais rapidamente e os funcionários poderão prestar mais atenção a casos controversos que vão além do escopo dos modelos.

Para testar essa idéia, uma sujest foi desenvolvida - um sistema de dicas que oferece à equipe de suporte as três opções preferidas para responder à solicitação atual: o



experimento foi bem-sucedido: em 70% dos casos, os operadores escolheram uma das mensagens propostas, o que reduziu o tempo de resposta em 10%. Parece que é hora de automatizar completamente a primeira linha.

Precisa de um plano.O que um funcionário da linha de frente faz ?

  1. Lê o texto, define o assunto do tratamento.
  2. Examina informações de viagem.
  3. Seleciona uma das respostas preparadas, levando em consideração os dois primeiros pontos.

Um exemplo para penetrar. Dado: uma solicitação de texto para um usuário angustiado, algumas informações de viagem, uma equipe de suporte atenciosa.



Primeiro de tudo, o funcionário determinará o assunto do recurso: "Débito duplo no cartão". Em seguida, verifique o método de pagamento, status e valor cobrado. Dinheiro baixado uma vez: qual poderia ser o motivo? Sim, aqui está: duas notificações seguidas.

O que um sistema de resposta automática deve fazer?

Tudo o mesmo. Mesmo os principais requisitos para as respostas não mudam:

Qualidade

Se o usuário reclamar da aplicação, não há necessidade de prometer pedir ao motorista que lave o carro. Não basta entender exatamente qual é o problema, é preciso descrever em detalhes como resolvê-lo.

Velocidade
Especialmente se a situação for crítica e a resposta for importante agora.

Flexibilidade e escalabilidade.A

tarefa com um asterisco: embora a criação de um sistema de suporte com o Taxi tenha começado, é útil transferir o resultado para outros serviços: Yandex.Food ou Yandex.Lavka, por exemplo. Ou seja, ao alterar a lógica de suporte - modelos de resposta, tópicos de chamadas etc. - desejo reconfigurar o sistema em dias, não meses.

Como é implementado


Etapa 1. Determinamos o assunto do texto usando o ML.

Primeiro, compilamos uma árvore de tópicos de referências e treinamos o classificador para navegar neles. Havia cerca de 200 problemas possíveis: com a viagem (o motorista não chegou), com o aplicativo (não consigo anexar o cartão), com o carro (carro sujo) etc.

Como mencionado acima, usamos um modelo pré-treinado baseado no BERT. Ou seja, para classificar o texto da consulta, é necessário apresentá-lo na forma de vetores para que sentenças de significado semelhante fiquem lado a lado no espaço resultante.

O BERT é pré-treinado em duas tarefas com textos não alocados. No primeiro, 15% dos tokens são substituídos aleatoriamente por [MASK], e a rede, com base no contexto, prediz os tokens iniciais - isso fornece ao modelo uma “bidirecionalidade” natural. A segunda tarefa nos ensina a determinar a relação entre as propostas: duas entradas foram enviadas em uma linha ou espalhadas pelo texto?

Após concluir a arquitetura BERT em uma amostra de solicitações de suporte técnico Yandex.Taxi, obtivemos uma rede capaz de prever o assunto da mensagem, ajustada para as especificidades de nosso serviço. No entanto, a frequência dos tópicos e dos próprios tópicos muda: para que a rede seja atualizada com eles, treinaremos separadamente apenas as camadas inferiores do modelo nos dados mais recentes - nas últimas semanas. Portanto, o conhecimento dos recursos dos textos de suporte é preservado e as probabilidades de possíveis classes são distribuídas adequadamente para o dia atual.

Um pouco mais sobre a adequação: para todos os nossos serviços - incluindo o Taxi - foi desenvolvida uma biblioteca inteira de módulos de arquitetura de modelos e métodos para validar limites de probabilidade. Ele permite que você:

  • , : , — ;
  • , . , . , , , .

Etapa 2. Trabalhamos com informações sobre a viagem: prescrevemos regras de negócios para cada modelo

A equipe de suporte recebeu uma interface na qual, para cada modelo de resposta, era necessária alguma regra obrigatória. Como se parece, por exemplo, no caso de pagamento duplo:

Predefinição: “Olá! Eu verifiquei tudo: a viagem foi paga uma vez. O dinheiro é primeiro “congelado” no seu cartão e depois debitado, por isso o banco pode informar duas vezes sobre uma transação. Verifique seu extrato bancário para ter certeza. Se houver dois valores baixados, envie uma digitalização ou uma foto do extrato ”

Regra: o tipo de pagamento é“ cartão ”e o status da transação é“ clear_success ”e transaction_sum == order_cost

Somente para modelos de suporte ao cliente, nossos especialistas já concluíram mais de 1,5 mil regras.

Etapa 3. Escolhemos a resposta: combinamos os tópicos de texto e as regras de negócios apropriados para os modelos.

Cada tópico é correspondido aos modelos de resposta apropriados: o tópico é determinado pelos métodos de ML e os modelos que respondem a ele são verificados pela veracidade pela regra do parágrafo anterior. O usuário receberá uma resposta cuja verificação produz o valor "Verdadeiro". Se houver várias opções, a mais popular entre a equipe de suporte será selecionada.



A propósito, os processos de interação com os drivers no Yandex.Taxi não mudam nada: o modelo seleciona apenas o modelo desejado para o operador e responde de forma independente ao usuário.

Finalizar


Viva! O sistema foi projetado, o lançamento ocorreu, a otimização mostra excelentes resultados, mas ainda é cedo para relaxar. Os respondedores automáticos devem funcionar de forma estável, sem intervenção constante, e podem ser facilmente escaláveis ​​- por conta própria ou no modo semi-manual. Isso conseguimos graças à estrutura em três partes do sistema:

  1. Desenvolvimento offline - nesta fase, os modelos mudam, as regras são preparadas;
  2. Serviço de produção - um microsserviço que coleta atualizações, as aplica e responde aos usuários em tempo real;
  3. Após a análise dos resultados para garantir que o novo modelo esteja funcionando corretamente, os usuários ficam satisfeitos com as respostas automáticas.



E novamente para os exemplos. Topo da lista de desejos dos clientes mais populares (e como lidamos com eles sem escrever código): O

táxi tem respostas automáticas legais: quero o mesmo no Yandex.Ed

Para conectar qualquer suporte ao nosso sistema, você precisa de quatro etapas simples:

  1. Crie uma árvore de tópicos para textos;
  2. Combine cada tema com padrões;
  3. Preencha um conjunto de regras com modelos em nosso painel de administração;
  4. Forneça uma tabela de correspondência entre solicitações do usuário e respostas de suporte.

Se tudo isso estiver lá, definiremos o caminho para um novo upload, o modelo aprenderá com os dados recebidos e acessará nosso microsserviço, juntamente com todas as regras definidas (integrar com um tema específico de ML). Observe: nenhuma nova lógica é escrita, tudo dentro da estrutura de um processo existente!

A lógica do suporte mudou, queremos novas regras.

Por favor, preencha as novas regras em nosso painel de administração. O sistema analisará como as alterações afetarão a porcentagem de respostas automáticas *, levando em consideração a exigência da regra. Se tudo der certo, as regras concluídas serão transformadas em uma configuração e carregadas no serviço ML. Viva! Menos de uma hora se passou e as regras de negócios foram atualizadas na produção, nenhuma linha de código foi escrita, os programadores não são perturbados.

* Parece que isso não é muito óbvio, então vamos adicionar um exemplo ao exemplo. Suponhamos que os especialistas tenham introduzido uma regra: o uso de um determinado modelo de resposta é possível apenas para pedidos com valor superior a 200 rublos. Se essa restrição funcionar, os tíquetes para viagens por um valor menor permanecerão fechados, a proporção de respostas selecionadas automaticamente diminuirá e a eficiência de todo o sistema diminuirá. Para impedir que isso aconteça, é importante interceptar as regras com falha a tempo e enviá-las para revisão.

Adicionamos um novo tema, queremos mudar o modelo, precisamos que tudo funcione amanhã.

Geralmente, os especialistas em conteúdo desejam adicionar novos tópicos, dividi-los em tópicos existentes ou excluir tópicos irrelevantes. Não tem problema - você precisa alterar a correspondência entre os tópicos e os modelos de resposta no painel de administração.

Se tópicos novos ou alterados já apareceram nas respostas dos funcionários de suporte de primeira linha, o modelo, com reciclagem periódica, aumentará automaticamente esses dados e calculará os limites para eles (para dados da última semana, exceto para o conjunto adiado para teste).

Na amostra de teste, os modelos antigos e novos são comparados de acordo com métricas especiais - precisão, o compartilhamento é corrigido automaticamente. Se as alterações forem positivas, um novo modelo será lançado na produção.

Analisamos métricas: não afunde, não quebre


Vamos nos concentrar em dois critérios - a classificação média de uma resposta automática por um usuário e a aparência de perguntas adicionais. As mudanças foram monitoradas no ab-experimento, não foi observado nenhum rebaixamento estatisticamente significativo das métricas; além disso, muitas vezes os usuários classificaram os resultados do modelo com alta classificação devido à velocidade da resposta.

No entanto, por mais que tentemos, os métodos de aprendizado de máquina às vezes produzem reações absurdas. Após a próxima atualização do modelo, pegamos um caso:

Usuário: Graças ao motorista, o carro chegou a tempo, o motorista saiu bem, tudo correu perfeitamente! Suporte
: Vamos punir o motorista, isso não acontecerá novamente.

Felizmente, o lançamento foi um teste. E o problema era este: o modelo aprendeu a responder a críticas com uma classificação inferior a 4 e, às vezes, mostramos por engano suas críticas com 4 e 5 estrelas. Obviamente, devido às limitações de aprendizado, nada mais inteligente do neurônio poderia responder. Quando implementados, esses casos são raros (0,1% do total) - nós os rastreamos e tomamos as medidas apropriadas: a rede neural responde à mensagem repetida do usuário.

Conclusões e planos para o futuro


Depois de conectar o sistema de resposta automática, começamos a responder muito mais rapidamente às solicitações do usuário e prestamos a máxima atenção a casos realmente complexos que requerem investigação detalhada. Esperamos que isso nos ajude a melhorar a qualidade do Yandex.Taxi e a minimizar o número de incidentes desagradáveis.

O modelo de correção automática fecha cerca de 60% da primeira linha, sem desperdiçar a classificação média do usuário. Planejamos desenvolver ainda mais o método e aumentar a porcentagem de respostas automáticas na primeira linha para 99,9%. E, é claro, continue a ajudá-lo - suporte em nossos aplicativos e compartilhe experiências sobre ele no Habré.

All Articles