Wie wir Yandex beibringen, Fragen zu beantworten und Benutzern 20.000 Stunden pro Tag zu sparen



Wenn wir eine Abfrage in die Suchleiste eingeben, suchen wir nach Informationen, nicht nach Links. Außerdem brauchen wir oft einen kurzen Satz oder eine bekannte Tatsache. Zum Beispiel ist [die Formel fĂŒr das Volumen der abgeschnittenen Pyramide ] auf allen Websites gleich - Links werden nicht benötigt, geben Sie einfach eine Antwort.

Niemand kann jemanden mit sachlichen (informativen) Antworten ĂŒberraschen, aber nur wenige Menschen wissen, wie sie gebildet werden, wie sie sich unterscheiden und was in letzter Zeit in diesem Bereich passiert ist. Ich heiße Anton Ivanov. Heute zusammen mit meinem Kollegen Mikhail AgeevdminerWir werden die Geschichte der Antworten in der Suche erzĂ€hlen und einige der Details teilen, ĂŒber die wir vorher noch nicht gesprochen haben. Hoffe es wird hilfreich sein.

Die Geschichte des Internets ist die Geschichte der Vereinfachung der Suche nach Informationen. Es war einmal eine Zeit, in der Menschen Online-Kataloge besuchten, um Antworten zu finden, bei denen Links zu Websites nach Themen gruppiert wurden. Im Laufe der Zeit tauchten Suchmaschinen auf und lernten, nach Websites anhand von SchlĂŒsselwörtern zu suchen. Die Forderung nach einer schnellen Suche nach Informationen stimulierte die Entwicklung der Technologie: Eine Wortsuche entwickelte sich allmĂ€hlich zu einer Suche nach Bedeutung, wenn die Antwort auf einer Seite ohne Schnittpunkt durch SchlĂŒsselwörter gefunden werden konnte. Aber auch in diesem Fall musste ich auf die Links klicken. Die Menschen haben immer von mehr getrĂ€umt.

Erste Fakten


Jetzt fÀllt es schwer, sich daran zu erinnern, wie die sachlichen Antworten von Yandex begannen. Wir können sagen, dass die Lösung ein spezielles Format des Zauberers war, das eine kurze Textantwort ohne InteraktivitÀt voraussetzt (im Gegensatz zur Beantwortung von Anfragen [ meine IP-Adresse ] oder [ Aquafarbe ]). Wie Sie wissen, ist die Implementierung eines solchen Formats nicht schwierig. Die Hauptfrage ist anders: Wo bekommt man die Antworten?



Wir haben mit dem einfachsten technischen Weg begonnen. Spezielle Personen (PrĂŒfer) analysierten die beliebtesten Fragen und wĂ€hlten diejenigen aus, fĂŒr die Sie eine kurze Antwort finden. Ein klassisches Beispiel fĂŒr eine solche Abfrage ist [ wie viele Pfoten eine Fliege hat ].



Auf diese Weise konnten nur die beliebtesten Abfragen abgedeckt werden, und der lange Schwanz anderer Abfragen wurde ignoriert. Teilweise haben wir dieses Problem mit Hilfe von Crowdsourcing gelöst.

Vor einigen Jahren begannen Toloker, uns dabei zu helfen, die Datenbank mit sachlichen Antworten aufzufĂŒllen. HĂ€ufige Anfragen wurden auf die Plattform hochgeladen, Toloker sahen die Aufgabe: „Stimmt es, dass Sie eine vollstĂ€ndige Antwort auf diese Anfrage geben können? Und wenn es wahr ist, dann gib es. “ NatĂŒrlich ĂŒberprĂŒft andere tolokers die Angemessenheit der Antworten, und wir die Fehler mit Hilfe eines Such gefangen Wache . Übrigens haben uns Toloker auch dabei geholfen herauszufinden, dass tatsĂ€chliche Antworten mit einem Bild den Benutzern normalerweise mehr gefallen als nur Text.

Die Hilfe von Tolokern ist bedeutend, aber selbst sie werden nicht dazu beitragen, den langen Schwanz niederfrequenter Abfragen abzudecken. Es gibt einfach zu viele solcher Anfragen fĂŒr ein manuelles Markup: Es gibt nicht Zehntausende, sondern Millionen! Um dieses Problem zu lösen, war das Suchranking fĂŒr uns hilfreich.

Faktenschnipsel


Wenn Sie in der Yandex-Suche nach etwas suchen, sehen Sie nicht nur 10 Links, sondern auch einen Titel, eine Beschreibung, ein Symbol und andere Daten.

Wir konzentrieren uns auf die Beschreibung. Unsere Suche erstellt es automatisch. Um das beste Textfragment hervorzuheben, wird das kompakte CatBoost-Modell verwendet, das die NÀhe eines Textfragments und einer Anforderung schÀtzt. Es stellt sich heraus, dass Linkbeschreibungen manchmal bereits sachliche Antworten enthalten. Es wÀre seltsam, dies nicht auszunutzen - aber nicht so einfach.

Es mag den Anschein haben, dass die Aufgabe darin besteht, die „sachlichste“ Beschreibung unter allen Beschreibungen der auf Anfrage gefundenen Seiten auszuwĂ€hlen, aber dieser Ansatz wird nicht gut funktionieren. Der Grund ist, dass die informative Beschreibung der Seite nicht immer mit einer guten Antwort auf die direkte Frage einer Person ĂŒbereinstimmt. Daher erstellt unsere Fact Snippet-Technologie Fakten parallel zu Seitenbeschreibungen, basiert jedoch auf anderen Parametern, sodass das Ergebnis der Antwort Ă€hnlich ist. Und jetzt mĂŒssen Sie unter ihnen die qualitativ hochwertigste Antwort auswĂ€hlen.

Das haben wir schon gesagtauf HabrĂ© ĂŒber Suchalgorithmen "Palekh", "Korolev" und ĂŒber den DSSM-Ansatz. Die Aufgabe bestand dann darin, beim Ranking von Seiten Texte zu finden, deren Bedeutung nahe beieinander lag. TatsĂ€chlich haben wir zwei Vektoren verglichen: den Abfragevektor und den Dokumenttextvektor. Je nĂ€her diese Vektoren im mehrdimensionalen Raum liegen, desto nĂ€her sind die Bedeutungen der Texte. Um die Fakten von bester QualitĂ€t auszuwĂ€hlen, haben wir dasselbe getan. Unser neuronales Netzwerkmodell, das auf den bereits bekannten Antworten basiert, erstellt Antwortvektoren fĂŒr die in der Suche gefundenen Seiten und vergleicht sie mit dem Abfragevektor. So bekommen wir die beste Antwort.

Es ist klar, dass es sich nicht lohnt, alle Anfragen auf diese Weise zu beantworten: Die meisten Anfragen erfordern keine sachliche Antwort. Daher verwenden wir ein anderes Modell, um „nicht sachliche“ Anfragen zu löschen.

Fact Snippet 2.0


Alles, worĂŒber wir oben gesprochen haben, betraf „klassische“ sachliche Antworten: kurz, umfassend, wie in der EnzyklopĂ€die. Diese Richtung ist seit langem die einzige. Aber je weiter, desto mehr haben wir gesehen, dass die Aufteilung auf der Grundlage einer erschöpfenden Antwort einerseits sehr wackelig und andererseits fĂŒr den Benutzer undurchsichtig ist: Er muss sein Problem nur schneller lösen. Ich brauchte, um ĂŒber die ĂŒblichen Fakten hinauszugehen. So erschien das Projekt Fact Snippet 2.0.



Um die Sache zu vereinfachen, ist Fact Snippet 2.0 das gleiche Fact Snippet, jedoch ohne die Notwendigkeit, eine „umfassende Antwort“ zu finden. In der Tat ist alles etwas komplizierter.

Ich möchte Sie daran erinnern, dass Fact Snippet in zwei Schritten funktioniert. In der ersten Phase bewerten wir anhand eines einfachen Modells die „sachliche Natur“ der Anfrage: Bedeutet dies eine sachliche Antwort oder nicht? Wenn ja, suchen wir in der zweiten Phase nach einer Antwort, die in den Suchergebnissen angezeigt wird. FĂŒr Fact Snippet 2.0 haben wir beide Schritte angepasst, um Antworten auf ein breiteres Spektrum von Fragen zu finden. Solche Antworten behaupten nicht, in ihrer Gesamtheit enzyklopĂ€disch zu sein, sind aber dennoch nĂŒtzlich.

Es ist möglich, aber nicht immer erforderlich, fĂŒr jede Anfrage einen Textabschnitt auszuwĂ€hlen. Manchmal sind die gefundenen Texte fĂŒr die Abfrage nicht relevant genug. Manchmal haben wir bereits gute Antworten aus anderen Quellen - und wir mĂŒssen uns entscheiden, welche wir wĂ€hlen sollen. Warum sollten Sie beispielsweise die Adresse der Organisation im Text angeben, wenn Sie eine interaktive Karte, Telefonnummer und Bewertungen anzeigen können? Wir lösen dieses Problem mit Hilfe eines Mischers Sichter, mit denen Andrei Styskin bereits kennen Leser Habr . Und die Antwort sollte nicht unhöflich und beleidigend sein. Fast jede solche vernĂŒnftige EinschrĂ€nkung hat ihren eigenen Klassifikator, und es ist eine weitere Aufgabe, sie in Sekundenbruchteilen zur Laufzeit arbeiten zu lassen.

Umformulierungen abfragen


Sie deckten einen anderen Teil des langen Schwanzes ab, aber viele „einzigartige“ Anfragen blieben zurĂŒck. Ein erheblicher Teil davon sind andere Formulierungen von Abfragen, die uns bereits bekannt sind. Zum Beispiel sind [ wenn ein Hecht die ZĂ€hne wechselt ] und [zu welcher Zeit der Hecht die ZĂ€hne wechselt ] fast dasselbe.



Um dieses Problem zu lösen, haben wir einen Mechanismus entwickelt, der im Handumdrehen versteht, dass die eingehende Anfrage ein Alias ​​(bedeutet dasselbe) einer anderen Anfrage ist, auf die wir bereits eine Antwort haben. Dies ist einfacher und schneller als die unabhĂ€ngige Generierung von zwei sachlichen Antworten.

Wir nehmen alle Anfragen, fĂŒr die es Antworten gibt, in Vektoren um und setzen sie in den Index k-NN (genauer gesagt in seiner optimierten Version von HNSW)wodurch Sie viel schneller suchen können). Als nĂ€chstes konstruieren wir Abfragevektoren, auf die es keinen direkten Zufall gibt, und suchen nach den Top N Ă€hnlichsten Abfragen in unserem k-NN.

Als nÀchstes gehen wir dieses Top durch und durchlaufen den Katbust-Klassifikator des Triple:

- Benutzeranforderung;
- Anfrage von k-NN;
- Antwort auf eine Anfrage von k-NN.

Wenn der Verifizierer Verifizierer positiv ist, wird die Anforderung als Alias ​​der Anforderung von k-NN betrachtet. Wir können die bereits bekannte Antwort zurĂŒckgeben.

Der kreative Hauptteil dieses Entwurfs besteht darin, Faktoren fĂŒr den Klassifikator zu schreiben. Hier haben wir viele verschiedene Ideen ausprobiert. Zu den stĂ€rksten Faktoren gehören:

- Abfragevektoren;
- Levenshtein Entfernungen;
- Wort fĂŒr Wort Einbettungen;
- Faktoren, die auf einer Vielzahl von Zauberern fĂŒr jede der Anfragen beruhen;
- Abstand zwischen Abfragewörtern.

Separat werde ich ĂŒber einen Trick sprechen, der das neuronale BERT-Netzwerk verwendet. Die Zeit fĂŒr die Suche nach einem Alias ​​ist stark eingeschrĂ€nkt: maximal einige Millisekunden. Es ist unmöglich, BERT in einer solchen Zeit mit einer Last von mehreren tausend RPS auf aktuellen Ressourcen durchzufĂŒhren. Daher haben wir mit unserem BERT-Modell viele (Hunderte von Millionen) kĂŒnstliche SchĂ€tzungen gesammelt und darauf ein einfacheres neuronales Netzwerk-DSSM trainiert, das zur Laufzeit sehr schnell arbeitet. Als Ergebnis wurde mit einem gewissen Genauigkeitsverlust ein starker Faktor erhalten.

TatsĂ€chlich kann man die semantische NĂ€he von Anforderungen auf andere Weise bestimmen. Wenn sich beispielsweise zwei Abfragen in einem Wort voneinander unterscheiden, ĂŒberprĂŒfen Sie, wie sich die Suchergebnisse fĂŒr diese Abfragen unterscheiden (sehen Sie sich die Anzahl der ĂŒbereinstimmenden Links oben an). Wenn Sie dies millionenfach wiederholen und die Ergebnisse mitteln, erhalten Sie eine ziemlich gute SchĂ€tzung, wie stark sich die Bedeutung der Abfrage Ă€ndert, wenn Sie ein Wort gegen ein anderes Ă€ndern. Danach können Sie alle Daten zu einer Struktur hinzufĂŒgen (z. B. trie) und das Maß fĂŒr die NĂ€he von Abfragen ĂŒber die verallgemeinerte Levenshtein-Entfernung berechnen. Sie können diesen Ansatz erweitern und nicht nur Wörter, sondern auch Wortpaare berĂŒcksichtigen (aber der Versuch wird aufgrund des exponentiellen Datenwachstums viel mehr erzielt).

Was weiter


Nach unseren SchĂ€tzungen sparen wir den Benutzern dank sachlicher / informativer Antworten tĂ€glich 20.000 Stunden, da sie die Links in den Suchergebnissen nicht durchsehen mĂŒssen (und dies berĂŒcksichtigt nicht die Zeit, die sie fĂŒr das Finden der Antwort auf den Websites aufgewendet hĂ€tten). Das ist gut, aber es gibt immer Raum zum Wachsen. Zum Beispiel verwenden wir jetzt den Text, den wir im Internet finden, um Antworten zu erhalten, aber der fertige Text kann nicht immer an einer Stelle oder in der richtigen Form gefunden werden. Mit Hilfe neuronaler Netze kann dieses Problem gelöst werden: Generieren Sie eine Antwort, die der Anforderung entspricht und keine unnötigen enthĂ€lt. Dies ist unser Projekt der Suchneurosummarisierung, ĂŒber das wir hoffentlich das nĂ€chste Mal sprechen werden.

All Articles