Meta e objetivo
Em uma série de artigos, consideramos os classificadores de chamadas de voz, por que são necessários, como trazê-los rapidamente para o produtivo. Vou falar sobre abordagens que reduzirão o tempo de definir uma tarefa para iniciar um modelo e obter um resultado comercial.
Para este artigo, você pode ver o relatório no link
Como Metódio se tornou Anna. Série No. 1
Vamos começar!
Meu nome é Julia, sou engenheiro no departamento de aprendizado de máquina de um grande fornecedor. Cerca de 3.000 ligações de clientes chegam ao nosso call center por dia. Cada operadora recebe uma média de 100 chamadas por dia. E daí? Parece que isso aceita 100 chamadas. Mas há muitos tópicos de chamadas para a empresa, o operador precisa entender todos os produtos, serviços e processos da empresa. Se atendermos às solicitações mais comuns dos clientes, elas podem ser agrupadas em 40 (!) Tópicos, e ainda existem aplicativos atípicos que também precisam poder ser processados.

Devido à variedade de tópicos, o treinamento do operador levou três meses. Primeiro você precisa estudar todas as instruções e só então é permitido receber chamadas. Uma enorme quantidade de recursos está sendo gasta para criar um novo operador competente. Então surgiu a idéia de alinhar o operador gradualmente. Ou seja, ele receberá chamadas apenas sobre os tópicos que dominou, com o tempo, aumentando sua habilidade, estudando outros tópicos.
Boa ideia, por que não fazer ... uma simples URA? (um sistema de mensagens de voz pré-gravadas que roteiam chamadas dentro da central de atendimento usando as informações inseridas pelo cliente no teclado do telefone usando a discagem por tom. wiki )

Mas poucas pessoas gostam de ouvir uma voz gravada por um longo tempo, esperar, qual número deve ser pressionado, mas, no final, elas ainda não obtêm as informações necessárias.
Não queríamos atormentar nossos clientes com IVR e definimos a tarefa - classificar a solicitação do assinante de acordo com a primeira frase. Assim, de acordo com a solicitação expressa, o roteamento entre operadores ocorrerá.
Dados
Os operadores de suporte técnico no resultado de cada chamada expõem o assunto da chamada há cerca de 10 anos. Identificamos os 16 grupos mais numerosos e a marcação apareceu nesses tópicos. Em seguida, enviamos registros de 120 mil conversas sobre vários tópicos, reconhecemos a gravação de conversas do cliente usando o Yandex.SpeechKit e dividimos em frases por silêncio. Então, temos partes de áudio com frases separadas.
Lembre-me de que meu objetivo era classificar a solicitação inicial do cliente; portanto, apenas a primeira frase foi selecionada em cada chamada. No total, os dados continham 120 mil frases de clientes em formato de texto com marcação dos operadores. Pré-processamento de texto padrão: removendo palavras de parada, normalizando o texto (truques: anexando uma partícula "não" à próxima palavra) e os dados estão prontos. Vou falar mais sobre nosso pipeline de pré-processamento em outro artigo.
Classificação
Depois de receber o texto processado, realizamos muitos experimentos, classificados através de várias configurações de modelos e incorporação.
Tabela com comparação dos resultados experimentais O melhor resultado foi dado pelo conjunto padrão de TF-IDF e regressão logística. A tabela mostra a métrica do f-score. Em algumas experiências, além do texto, 11 sinais adicionais sobre o cliente (contexto) foram adicionados no momento da chamada. Na esperança de que isso de alguma forma aumente a qualidade. Contexto - são sinais booleanos, se o cliente tem um saldo negativo agora, se o reparo está atribuído ao endereço e outros que caracterizam o cliente no momento. Mas mesmo com o contexto, a qualidade é ruim, apenas 72% foi alcançado.
Análise de erro
Sem análise de erro, a qualidade da classificação não foi melhorada. Depois de examinar os casos em que os modelos estão errados, identificamos os seguintes problemas típicos:
- marcação incorreta
- desequilíbrio de classe
- é difícil para as pessoas formularem um pensamento
- reconhecimento de fala
Marcação
A marcação geralmente estava incorreta devido ao fato de a conversa poder começar com um tópico e terminar com outro, e o operador definiu o assunto da chamada, o que foi dito no final do diálogo. Redistribuiu manualmente esses casos e o problema desapareceu.
Saldo de classe
Existem várias abordagens para balancear classes.
Mais detalhes- Subamostragem. Remoção aleatória de exemplos de grandes classes.
- Sobre-amostragem. Adição aleatória de exemplos de classes menores.
- Sobre-amostragem minoritária sintética. Adição aleatória de exemplos das classes mais pequenas, mas alterando-os ligeiramente.
Qual abordagem escolher depende da tarefa e da quantidade de dados. Como parte dessa tarefa, foi possível equilibrar o conjunto de dados removendo exemplos das classes de maior frequência para o valor mediano do número de exemplos, mas as classes menores permaneceram inalteradas.
Depois de ler as primeiras frases, notamos que 36% das solicitações continham texto não informativo, por exemplo: "Olá, olá" ou "Olá, tenho uma pergunta". Somente depois que o operador perguntou: “qual é a sua pergunta?”, O cliente formulou o problema.
Portanto, era errado retirar apenas a primeira frase do cliente da conversa; alguém simplesmente não era capaz de formular uma solicitação imediatamente. Portanto, para cada primeira frase, “informatividade” foi calculada. Se o modelo não atribuiu a solicitação com alta confiança a nenhuma das classes, ou seja, todas as classes receberam um valor de probabilidade igual, a mensagem não é informativa e você deve usar a segunda frase. E se a classe já estiver determinada com alta probabilidade, a primeira frase será suficiente.
Aqui, a pergunta certa pode aparecer, mas o que fazer no produto, porque haverá as mesmas consultas não informativas. Falarei sobre isso mais adiante no próximo artigo.
Reconhecimento de fala
Ao analisar os erros, notamos imprecisões no reconhecimento de texto, devido às quais a classe foi definida incorretamente. Por exemplo, a palavra "saldo" às vezes era substituída por "banana". Decidimos comparar o reconhecimento do Yandex e do Google. O Google mostrou-se melhor em nossos dados, mas não a ponto de pagar demais, o preço é quase o dobro.
Comparação do reconhecimento de fala entre dois sistemas. Resumo da Análise de Erro
Após analisar e corrigir os erros, conseguimos melhorar a qualidade para um f-score médio de 84%; a melhor qualidade ainda era o resultado da regressão logística.
Ganho de qualidade para cada classe Conclusões
Resumindo o primeiro estágio do desenvolvimento, podemos tirar a seguinte conclusão.
Primeiro de tudo, você precisa lidar com dados e marcação. Você não deve treinar imediatamente as redes neurais; em dados incorretos, não haverá muito benefício disso. Para evitar desperdiçar tempo e energia, basta analisar erros em modelos "simples".
Vejo você na segunda série , onde falaremos sobre como executar um modelo treinado de uma maneira produtiva. Vamos ouvir exemplos de como o robô Methodius recebe chamadas e entenderemos por que ele se tornou Anna.