Comment nous enseignons à Yandex à répondre aux questions et à économiser 20 000 heures par jour aux utilisateurs



Lorsque nous saisissons une requĂȘte dans la barre de recherche, nous recherchons des informations, pas des liens. De plus, nous avons souvent besoin d'une courte phrase ou d'un fait bien connu. Par exemple, [la formule du volume de la pyramide tronquĂ©e ] est la mĂȘme sur tous les sites - les liens ne sont pas nĂ©cessaires, il suffit de donner une rĂ©ponse.

Personne ne peut surprendre qui que ce soit avec des réponses factuelles (informatives), mais peu de gens savent comment ils sont formés, comment ils diffÚrent et ce qui s'est passé dans ce domaine récemment. Je m'appelle Anton Ivanov. Aujourd'hui, avec mon collÚgue Mikhail Ageevdminernous allons raconter l'histoire des réponses dans la recherche et partager certains des détails dont nous n'avons pas parlé auparavant. J'espÚre que ce sera utile.

L'histoire d'Internet est l'histoire de la simplification de la recherche d'informations. Il Ă©tait une fois, les gens visitaient les catalogues en ligne pour trouver des rĂ©ponses oĂč les liens vers les sites Ă©taient regroupĂ©s par sujet. Au fil du temps, les moteurs de recherche sont apparus, ils ont appris Ă  rechercher des sites par mots clĂ©s. La demande d'une recherche rapide d'informations a stimulĂ© le dĂ©veloppement de la technologie: une recherche de mots a progressivement Ă©voluĂ© vers une recherche de sens, lorsque la rĂ©ponse pouvait ĂȘtre trouvĂ©e sur une page sans intersection par mots-clĂ©s. Mais mĂȘme dans ce cas, j'ai dĂ» cliquer sur les liens. Les gens ont toujours rĂȘvĂ© de plus.

Premiers faits


Maintenant, il est difficile de se rappeler comment les rĂ©ponses factuelles de Yandex ont commencĂ©. Nous pouvons dire que la solution Ă©tait un format spĂ©cial du sorcier, qui suppose une rĂ©ponse textuelle courte sans interactivitĂ© (par opposition Ă  rĂ©pondre aux demandes [ mon adresse IP ] ou [ aqua color ]). Comme vous le savez, l'implĂ©mentation d'un tel format n'est pas difficile. La question principale est diffĂ©rente: oĂč trouver les rĂ©ponses?



Nous avons commencĂ© par la mĂ©thode technique la plus simple. Des personnes spĂ©ciales (Ă©valuateurs) ont analysĂ© les requĂȘtes les plus populaires, ont choisi celles pour lesquelles vous pouvez trouver une rĂ©ponse courte. Un exemple classique d'une telle requĂȘte est [ combien de pattes a une mouche ].



De cette façon, il Ă©tait possible de couvrir uniquement les requĂȘtes les plus populaires, et la longue queue des autres requĂȘtes Ă©tait ignorĂ©e. En partie, nous avons rĂ©solu ce problĂšme Ă  l'aide du crowdsourcing.

Il y a quelques annĂ©es, les tolokers ont commencĂ© Ă  nous aider Ă  reconstituer la base de donnĂ©es des rĂ©ponses factuelles. Des requĂȘtes frĂ©quentes ont Ă©tĂ© tĂ©lĂ©chargĂ©es sur la plateforme, les tolokers ont vu la tĂąche: «Est-il vrai que vous pouvez donner une rĂ©ponse exhaustive Ă  cette requĂȘte? Et si c'est vrai, alors donnez-le. " Bien sĂ»r, d'autres tolokers ont vĂ©rifiĂ© l'adĂ©quation des rĂ©ponses et nous avons dĂ©tectĂ© les erreurs avec l'aide d'un garde de recherche . Soit dit en passant, les tolokers nous ont Ă©galement aidĂ©s Ă  dĂ©couvrir que les rĂ©ponses rĂ©elles avec une image sont gĂ©nĂ©ralement apprĂ©ciĂ©es par les utilisateurs plus qu'un simple texte.

L'aide des tolokers est importante, mais mĂȘme elle n'aidera pas Ă  couvrir la longue queue des requĂȘtes basse frĂ©quence. Il y a simplement trop de demandes de ce type pour un balisage manuel: il n'y en a pas des dizaines de milliers, mais des millions! Pour rĂ©soudre ce problĂšme, l'expĂ©rience de classement de la recherche nous a Ă©tĂ© utile.

Extrait de faits


Lorsque vous recherchez quelque chose dans la recherche Yandex, vous voyez non seulement 10 liens, mais aussi un titre, une description, une icÎne et d'autres données.

Nous nous concentrons sur la description. Notre recherche le crĂ©e automatiquement. Pour mettre en Ă©vidence le meilleur fragment de texte, le modĂšle lĂ©ger CatBoost est utilisĂ©, qui estime la proximitĂ© d'un fragment de texte et d'une requĂȘte. Il s'avĂšre que les descriptions de liens contiennent parfois dĂ©jĂ  des rĂ©ponses factuelles. Il serait Ă©trange de ne pas en profiter - mais pas si simple.

Il peut sembler que la tùche se résume à choisir la description «la plus factuelle» parmi toutes les descriptions des pages trouvées sur demande, mais cette approche ne fonctionnera pas bien. La raison en est que la description informative de la page ne coïncide pas toujours avec une bonne réponse à la question directe d'une personne. Par conséquent, notre technologie Fact Snippet construit des faits en parallÚle avec les descriptions de page, mais en fonction d'autres paramÚtres afin que le résultat soit similaire à la réponse. Et maintenant, parmi eux, vous devez choisir la réponse la plus haute qualité.

Nous avons dĂ©jĂ  ditsur HabrĂ© sur les algorithmes de recherche "Palekh", "Korolev" et sur l'approche DSSM. La tĂąche s'est alors rĂ©sumĂ©e Ă  trouver des textes proches dans le classement des pages. En fait, nous avons comparĂ© deux vecteurs: le vecteur de requĂȘte et le vecteur de texte du document. Plus ces vecteurs sont proches dans un espace multidimensionnel, plus les significations des textes sont proches. Pour choisir les meilleurs faits de qualitĂ©, nous avons fait de mĂȘme. Notre modĂšle de rĂ©seau de neurones, formĂ© sur les rĂ©ponses que nous connaissons dĂ©jĂ , construit des vecteurs de rĂ©ponse pour les pages trouvĂ©es dans la recherche et les compare avec le vecteur de requĂȘte. Nous obtenons donc la meilleure rĂ©ponse.

Il est clair que répondre à toutes les demandes de cette maniÚre ne vaut pas la peine: la plupart des demandes ne nécessitent pas de réponse factuelle. Par conséquent, nous utilisons un autre modÚle pour supprimer les demandes «non factuelles».

Extrait de faits 2.0


Tout ce dont nous avons parlé ci-dessus concernait des réponses factuelles «classiques»: courtes, complÚtes, comme dans l'encyclopédie. Cette direction est depuis longtemps la seule. Mais plus loin, plus nous avons vu que la division sur la base de l'existence d'une réponse exhaustive, d'une part, est trÚs fragile, et d'autre part - opaque pour l'utilisateur: il lui suffit de résoudre son problÚme plus rapidement. Il m'a fallu aller au-delà des faits habituels. Le projet est donc apparu Fact Snippet 2.0.



Pour simplifier les choses, Fact Snippet 2.0 est le mĂȘme Fact Snippet, mais sans l'exigence de trouver une «rĂ©ponse complĂšte». En fait, tout est un peu plus compliquĂ©.

Permettez-moi de vous rappeler que Fact Snippet fonctionne en deux Ă©tapes. Dans un premier temps, Ă  l'aide d'un modĂšle simple, nous Ă©valuons la «nature factuelle» de la demande: s'agit-il ou non d'une rĂ©ponse factuelle? Si oui, Ă  la deuxiĂšme Ă©tape, nous recherchons une rĂ©ponse, elle apparaĂźt dans les rĂ©sultats de la recherche. Pour Fact Snippet 2.0, nous avons adaptĂ© les deux Ă©tapes pour trouver des rĂ©ponses Ă  un plus large Ă©ventail de questions. Ces rĂ©ponses ne prĂ©tendent pas ĂȘtre encyclopĂ©diques dans leur intĂ©gralitĂ©, mais sont toujours utiles.

Il est possible, mais pas toujours nĂ©cessaire, de sĂ©lectionner un paragraphe de texte pour toute demande. Parfois, les textes trouvĂ©s ne sont pas suffisamment pertinents pour la requĂȘte. Parfois, nous avons dĂ©jĂ  de bonnes rĂ©ponses d'autres sources - et nous devons dĂ©cider laquelle choisir. Par exemple, pourquoi proposer l'adresse de l'organisation sous forme de texte si vous pouvez afficher une carte interactive, un numĂ©ro de tĂ©lĂ©phone et des avis. Nous rĂ©solvons ce problĂšme Ă  l'aide d'un classificateur de mĂ©langeur, avec lequel Andrei Styskin connaissait dĂ©jĂ  les lecteurs de Habr . Et la rĂ©ponse ne doit pas ĂȘtre grossiĂšre, insultante. Presque toutes ces restrictions raisonnables ont leur propre classificateur, et le faire fonctionner en runtime en une fraction de seconde est une autre quĂȘte.

Reformulations des requĂȘtes


Ils couvraient une autre partie de la longue queue, mais de nombreuses demandes «uniques» restaient en suspens. Une proportion importante d'entre eux sont d'autres formulations de requĂȘtes que nous connaissons dĂ©jĂ . Par exemple, [ quand un brochet change de dent ] et [Ă  quelle heure le brochet change de dent ] sont presque la mĂȘme chose.



Pour rĂ©soudre ce problĂšme, nous avons trouvĂ© un mĂ©canisme qui comprend Ă  la volĂ©e que la demande entrante est un alias (signifie la mĂȘme chose) d'une autre demande, la rĂ©ponse Ă  laquelle nous avons dĂ©jĂ . C'est plus facile et plus rapide que de gĂ©nĂ©rer indĂ©pendamment deux rĂ©ponses factuelles.

Nous prenons toutes les requĂȘtes pour lesquelles il y a des rĂ©ponses, les convertissons en vecteurs et les mettons dans l'index k-NN (plus prĂ©cisĂ©ment, dans sa version optimisĂ©e de HNSWqui vous permet de rechercher beaucoup plus rapidement). Ensuite, nous construisons des vecteurs de requĂȘte pour lesquels il n'y a pas de rĂ©ponse par coĂŻncidence directe, et recherchons les N requĂȘtes les plus similaires dans notre k-NN.

Ensuite, nous passons par ce sommet et parcourons le classificateur katbust du triple:

- demande de l'utilisateur;
- demande de k-NN;
- réponse à une demande de k-NN.

Si le vérificateur vérificateur est positif, la demande est considérée comme un alias de la demande de k-NN, on peut retourner la réponse déjà connue.

La partie créative principale de cette conception est d'écrire des facteurs pour le classificateur. Ici, nous avons essayé beaucoup d'idées différentes. Parmi les facteurs les plus forts:

- vecteurs de requĂȘte;
- distances Levenshtein;
- encastrements mot Ă  mot;
- facteurs basés sur une variété de sorciers pour chacune des demandes;
- distance entre les mots de requĂȘte.

Séparément, je parlerai d'une astuce utilisant le réseau neuronal BERT. Nous avons des restrictions assez strictes sur le temps de recherche d'un alias: un maximum de quelques millisecondes. Il est impossible d'effectuer BERT dans un tel temps avec une charge de plusieurs milliers de RPS sur les ressources actuelles. Par conséquent, avec notre modÚle BERT, nous avons collecté un grand nombre (des centaines de millions) d'estimations artificielles et formé sur eux un réseau neuronal DSSM plus simple, qui fonctionne trÚs rapidement lors de l'exécution. En conséquence, avec une certaine perte de précision, un facteur fort a été obtenu.

En fait, on peut dĂ©terminer la proximitĂ© sĂ©mantique des demandes par d'autres moyens. Par exemple, si deux requĂȘtes diffĂšrent l'une de l'autre en un seul mot - vĂ©rifiez en quoi les rĂ©sultats de recherche de ces requĂȘtes diffĂšrent (regardez le nombre de liens correspondants en haut). Si vous rĂ©pĂ©tez cela plusieurs millions de fois et faites la moyenne des rĂ©sultats, vous obtenez une assez bonne estimation de la façon dont la signification de la requĂȘte change si vous changez un mot pour un autre. AprĂšs cela, vous pouvez ajouter toutes les donnĂ©es dans une structure (par exemple, trie) et calculer la mesure de la proximitĂ© des requĂȘtes Ă  travers la distance de Levenshtein gĂ©nĂ©ralisĂ©e. Vous pouvez Ă©tendre cette approche et considĂ©rer non seulement les mots, mais aussi les paires de mots (mais le trie est obtenu beaucoup plus en raison de la croissance exponentielle des donnĂ©es).

Et aprĂšs


Selon nos estimations, grĂące aux rĂ©ponses factuelles / informatives, nous Ă©conomisons 20 000 heures par jour aux utilisateurs, car ils n'ont pas Ă  parcourir les liens dans les rĂ©sultats de recherche (et cela ne compte pas le temps qu'ils auraient consacrĂ© Ă  trouver la rĂ©ponse sur les sites). C'est bien, mais il y a toujours de la place pour grandir. Par exemple, nous utilisons maintenant le texte que nous trouvons sur Internet pour les rĂ©ponses, mais le texte fini ne peut pas toujours ĂȘtre trouvĂ© au mĂȘme endroit ou sous la bonne forme. Avec l'aide de rĂ©seaux de neurones, ce problĂšme peut ĂȘtre rĂ©solu: gĂ©nĂ©rer une rĂ©ponse pour qu'elle corresponde Ă  la demande et ne contienne pas de contenu inutile. Il s'agit de notre projet de recherche de neurosummarisation, dont j'espĂšre que nous parlerons la prochaine fois.

All Articles