Como ensinamos o Yandex a responder perguntas e economizar usuários 20 mil horas por dia



Quando inserimos uma consulta na barra de pesquisa, procuramos informações, não links. Além disso, muitas vezes precisamos de uma frase curta ou de um fato conhecido. Por exemplo, [a fórmula para o volume da pirâmide truncada ] é a mesma em todos os sites - os links não são necessários, basta dar uma resposta.

Ninguém pode surpreender ninguém com as respostas factuais (informativas) agora, mas poucas pessoas sabem exatamente como elas são formadas, como diferem e o que aconteceu recentemente nessa área. Meu nome é Anton Ivanov. Hoje, junto com meu colega Mikhail Ageevdminercontaremos a história das respostas na pesquisa e compartilharemos alguns dos detalhes sobre os quais não falamos antes. Espero que seja útil.

A história da Internet é a história de simplificação da busca por informações. Era uma vez, as pessoas visitavam catálogos on-line para encontrar respostas onde os links para sites eram agrupados por tópico. Com o tempo, os mecanismos de pesquisa apareceram, eles aprenderam a procurar sites por palavras-chave. A demanda por uma busca rápida por informações estimulou o desenvolvimento da tecnologia: uma busca por palavras evoluiu gradualmente para uma busca por significado, quando a resposta pôde ser encontrada em uma página com interseção zero por palavras-chave. Mas mesmo neste caso, eu tive que clicar nos links. As pessoas sempre sonharam com mais.

Primeiros fatos


Agora é difícil lembrar como as respostas factuais da Yandex começaram. Podemos dizer que a solução foi um formato especial do feiticeiro, que assume uma resposta curta de texto sem interatividade (em vez de responder a solicitações [ meu endereço IP ] ou [ cor aqua ]). Como você sabe, implementar esse formato não é difícil. A questão principal é diferente: onde obter as respostas?



Começamos com a maneira técnica mais fácil. Pessoas especiais (avaliadores) analisaram as consultas mais populares e escolheram aquelas para as quais você pode encontrar uma resposta curta. Um exemplo clássico dessa consulta é [ quantas patas uma mosca possui ].



Dessa forma, foi possível cobrir apenas as consultas mais populares e a cauda longa de outras consultas foi ignorada. Em parte, resolvemos esse problema com a ajuda do crowdsourcing.

Alguns anos atrás, os tolokers começaram a nos ajudar a reabastecer o banco de dados de respostas factuais. Solicitações frequentes foram enviadas para a plataforma; os tolokers viram a tarefa: “É verdade que você pode dar uma resposta exaustiva a essa solicitação? E se for verdade, então dê. É claro que outros tolokers verificaram a adequação das respostas e detectamos os erros com a ajuda de um guarda de busca . A propósito, os tolokers também nos ajudaram a descobrir que as respostas reais de uma imagem geralmente são mais apreciadas pelos usuários do que apenas texto.

A ajuda dos tolokers é significativa, mas mesmo eles não ajudarão a cobrir a longa cauda das consultas de baixa frequência. Existem simplesmente muitos pedidos de marcação manual: não existem dezenas de milhares, mas milhões! Para resolver esse problema, a experiência no ranking de pesquisa foi útil para nós.

Fragmento de fatos


Ao procurar algo na pesquisa Yandex, você vê não apenas 10 links, mas também um título, descrição, ícone e outros dados.

Nós nos concentramos na descrição. Nossa pesquisa cria automaticamente. Para destacar o melhor fragmento de texto, é usado o leve modelo CatBoost, que estima a proximidade de um fragmento de texto e uma solicitação. Acontece que as descrições de links às vezes já contêm respostas factuais. Seria estranho não tirar proveito disso - mas não tão simples.

Pode parecer que a tarefa se resume a escolher a descrição "mais factual" entre todas as descrições de páginas encontradas por solicitação, mas essa abordagem não funcionará bem. O motivo é que a descrição informativa da página nem sempre coincide com uma boa resposta à pergunta direta de uma pessoa. Portanto, nossa tecnologia de snippets de fatos constrói fatos em paralelo com as descrições das páginas, mas com base em outros parâmetros para que o resultado seja semelhante à resposta. E agora, entre eles, você precisa escolher a resposta da mais alta qualidade.

Nós já dissemosem Habré sobre os algoritmos de pesquisa "Palekh", "Korolev" e sobre a abordagem DSSM. A tarefa se resumiu a encontrar textos com significado próximo ao classificar as páginas. De fato, comparamos dois vetores: o vetor de consulta e o vetor de texto do documento. Quanto mais próximos esses vetores estão do espaço multidimensional, mais próximos estão os significados dos textos. Para escolher os fatos da melhor qualidade, fizemos o mesmo. Nosso modelo de rede neural, treinado nas respostas que já sabemos, cria vetores de resposta para as páginas encontradas na pesquisa e os compara com o vetor de consulta. Então, temos a melhor resposta.

É claro que responder a todos os pedidos dessa maneira não vale a pena: a maioria dos pedidos não exige uma resposta factual. Portanto, usamos outro modelo para descartar solicitações "não factuais".

Fragmento de fato 2.0


Tudo o que falamos acima dizia respeito a respostas factuais "clássicas": curtas, abrangentes, como na enciclopédia. Essa direção tem sido a única. Mas quanto mais longe, mais vimos que a divisão com base na existência de uma resposta exaustiva, por um lado, é muito instável e, por outro, opaca para o usuário: ele só precisa resolver seu problema mais rapidamente. Levei para ir além dos fatos habituais. Portanto, o projeto apareceu o Fact Snippet 2.0.



Para simplificar, o Snippet de fatos 2.0 é o mesmo Snippet de fatos, mas sem a necessidade de encontrar uma "resposta abrangente". De fato, tudo é um pouco mais complicado.

Deixe-me lembrá-lo de que o Snippet de fatos funciona em dois estágios. Na primeira etapa, usando um modelo fácil, avaliamos a “natureza factual” da solicitação: significa uma resposta factual ou não. Se sim, na segunda etapa, estamos procurando uma resposta, ela aparece nos resultados da pesquisa. Para o Fact Snippet 2.0, adaptamos as duas etapas para encontrar respostas para uma ampla gama de perguntas. Tais respostas não pretendem ser enciclopédicas por completo, mas ainda são úteis.

É possível, mas nem sempre necessário, selecionar um parágrafo de texto para qualquer solicitação. Às vezes, os textos encontrados não são relevantes o suficiente para a consulta. Às vezes, já temos boas respostas de outras fontes - e precisamos decidir qual escolher. Por exemplo, por que oferecer o endereço da organização em texto se você pode mostrar um mapa interativo, número de telefone e comentários. Resolvemos esse problema com a ajuda de um classificador de liquidificador, com o qual Andrei Styskin conhecia os leitores da Habr . E a resposta não deve ser grosseira, ofensiva. Quase todas essas restrições razoáveis ​​têm seu próprio classificador, e fazê-lo funcionar em tempo de execução em uma fração de segundo é outra questão.

Reformulações de consulta


Eles cobriram outra parte da cauda longa, mas muitos pedidos "únicos" ficaram para trás. Uma proporção significativa deles são outras formulações de consultas já conhecidas por nós. Por exemplo, [ quando um pique muda de dente ] e [a que horas o pique muda de dente ] é quase a mesma coisa.



Para resolver esse problema, criamos um mecanismo que compreende rapidamente que a solicitação recebida é um alias (significa o mesmo) de outra solicitação, a resposta à qual já temos. Isso é mais fácil e rápido do que gerar independentemente duas respostas factuais.

Tomamos todas as solicitações para as quais existem respostas, as convertemos em vetores e as colocamos no índice k-NN (mais precisamente, em sua versão otimizada do HNSWque permite pesquisar muito mais rápido). Em seguida, construímos vetores de consulta para os quais não há resposta por coincidência direta e procuramos as N consultas mais semelhantes no nosso k-NN.

Em seguida, percorremos esse topo e percorremos o classificador katbust do triplo:

- solicitação do usuário;
- pedido do k-NN;
- resposta a uma solicitação do k-NN.

Se o verificador do verificador for positivo, a solicitação é considerada um alias da solicitação do k-NN, podemos retornar a resposta já conhecida.

A principal parte criativa desse design está nos fatores de escrita para o classificador. Aqui tentamos muitas idéias diferentes. Entre os fatores mais fortes:

- vetores de consulta;
- distâncias de Levenshtein;
- casamentos palavra por palavra;
- fatores baseados em uma variedade de feiticeiros para cada uma das solicitações;
- distância entre as palavras da consulta.

Separadamente, falarei sobre um truque usando a rede neural BERT. Temos restrições bastante fortes no tempo para pesquisar um alias: no máximo alguns milissegundos. É impossível executar o BERT nesse período com uma carga de vários milhares de RPS nos recursos atuais. Portanto, com o nosso modelo BERT, coletamos muitas (centenas de milhões) de estimativas artificiais e treinamos nelas uma rede neural DSSM mais simples, que funciona muito rápido em tempo de execução. Como resultado, com alguma perda de precisão, um fator forte foi obtido.

De fato, pode-se determinar a proximidade semântica de solicitações de outras maneiras. Por exemplo, se duas consultas diferirem uma da outra em uma palavra - verifique como os resultados da pesquisa diferem (veja o número de links correspondentes na parte superior). Se você repetir isso muitos milhões de vezes e calcular a média dos resultados, obterá uma estimativa bastante boa de quanto o significado da consulta muda se você alterar uma palavra por outra. Depois disso, você pode adicionar todos os dados em uma estrutura (por exemplo, trie) e calcular a medida da proximidade das consultas através da distância de Levenshtein generalizada. Você pode expandir essa abordagem e considerar não apenas palavras, mas também pares de palavras (mas isso é obtido muito mais devido ao crescimento exponencial dos dados).

Qual é o próximo


De acordo com nossas estimativas, graças a respostas factuais / informativas, economizamos 20.000 horas por dia para os usuários, porque eles não precisam procurar nos links dos resultados da pesquisa (e isso não está contando o tempo que eles gastariam para encontrar a resposta nos sites). Isso é bom, mas sempre há espaço para crescer. Por exemplo, agora usamos o texto que encontramos na Internet para obter respostas, mas a parte final do texto nem sempre pode ser encontrada em um local ou na forma correta. Com a ajuda de redes neurais, esse problema pode ser resolvido: gere uma resposta para que ela corresponda à solicitação e não contenha desnecessários. Este é o nosso projeto de neurossummarização de pesquisas, sobre o qual, espero, falaremos da próxima vez.

All Articles