Wie Yandex künstliche Intelligenz lehrte, Fehler in den Nachrichten zu finden

Wir sprechen oft über Technologien und Bibliotheken, die in Yandex entstanden und entstanden sind. Tatsächlich wenden wir zumindest Lösungen von Drittanbietern an und entwickeln diese.

Heute werde ich der Habr-Gemeinde von einem solchen Beispiel erzählen. Sie erfahren, warum wir dem neuronalen Netz von BERT das Auffinden von Tippfehlern in Nachrichtenüberschriften beigebracht haben und nicht das vorgefertigte Modell verwendet haben, warum Sie BERT nicht auf mehreren Grafikkarten ausführen können und wie wir die Schlüsselfunktion dieser Technologie - den Aufmerksamkeitsmechanismus - verwendet haben.



Herausforderung


Yandex.News ist ein Dienst, der Nachrichten von Veröffentlichungen sammelt, die mit uns verbunden sind. Dies sind nicht nur die meistgelesenen und zitierten Mediennachrichten auf der Hauptseite, sondern auch thematische Abschnitte oder sogar persönliche Auswahlen aus allen Veröffentlichungen. In jedem Fall sind dies Tausende von Websites und Millionen von Überschriften, aus denen die Maschine alle paar Minuten eine Auswahl treffen muss.

Es ist die Maschine, weil wir nie in das Bild des Tages eingreifen: Wir fügen dort keine Nachrichten manuell hinzu, wir entfernen sie nicht von dort (egal wie sehr wir es möchten), wir bearbeiten die Überschriften nicht. Um dies wurde bereits viele Exemplare gebrochen. Ein vollständig algorithmischer Ansatz hat sowohl Vor- als auch Nachteile. Etwas, das wir mit Technologie verbessern können, etwas, das wir nicht können. Auch wenn die Überschriften Rechtschreibfehler oder Tippfehler enthalten, werden diese nicht korrigiert. Wir haben den Schlagzeilen die Favoriten der Veröffentlichungen hinzugefügt, damit klar ist, woher die Nachrichten kommen. Dies hat teilweise geholfen, aber wir haben uns nicht mit den Fehlern abgefunden und begannen, nach einer Möglichkeit zu suchen, sie zu beseitigen, ohne Änderungen am Text vorzunehmen.

Wenn es nicht möglich ist, den Fehler zu beheben, können Sie das Gerät so trainieren, dass es Header findet, die aufgrund von Fehlern nicht für die Oberseite geeignet sind. Darüber hinaus hat sich Yandex seit dem Zeitpunkt, als der Name noch nicht erfunden wurde, auf die russische Morphologie spezialisiert. Es scheint, dass wir ein neuronales Netzwerk nehmen - und der Punkt liegt im Hut.

Die Werkzeuge


Yandex verfügt über die Speller- Technologie zum Auffinden und Beheben von Fehlern. Dank der CatBoost-Bibliothek für maschinelles Lernen kann Speller nicht wiedererkennbare Wörter entschlüsseln („Adjektive“ → „Klassenkameraden“) und den Kontext bei der Suche nach Tippfehlern berücksichtigen („Musik verpassen“ → „Musik herunterladen“). Es mag scheinen, dass Speller für unsere Aufgabe ideal ist, aber nein.

Der Rechtschreibfehler (intern als Suchwächter bezeichnet) wurde bereits auf Architekturebene geschärft, um eine völlig andere Aufgabe zu lösen: Benutzern dabei zu helfen, das richtige Anforderungsformular wiederherzustellen. Bei der Suche ist es nicht so wichtig, ob die Groß- / Kleinschreibung richtig ausgewählt ist, ein Großbuchstabe oder ein Komma angehängt ist. Dort ist es für die Suchanfrage "Haminguel" wichtiger zu erraten, dass die Person Hemingway im Sinn hatte.

Fehler in den Schlagzeilen werden von relativ erfahrenen Leuten gemacht, von denen es unwahrscheinlich ist, dass sie Haminguel schreiben. Aber falsche Zustimmungen („der Flug wurde verschoben“), fehlende Wörter („der junge Mann hat das Auto ausprobiert“) und zusätzliche Großbuchstaben („Präsident der Bank“) sind an der Tagesordnung. Schließlich gibt es einen formal korrekten Satz "Ich repariere die Gorki-Straße in Pskow", an den sich ein normaler Vormund nicht klammern wird (naja, was ist, wenn dies ein Versprechen des Autors ist?), Aber dies ist offensichtlich eine verdorbene Schlagzeile. Außerdem galt es in den Nachrichten nicht wie in der Suche: Tippfehler und Fehler nicht zu korrigieren, sondern zu erkennen.

Wir hatten andere Optionen, zum Beispiel Modelle, die auf DSSM basierten (wenn interessant, sprachen wir in einem Beitrag über den Palekh-Algorithmus kurz über diesen Ansatz), aber sie hatten auch Einschränkungen. Beispielsweise wurde die Wortreihenfolge nicht perfekt berücksichtigt.

Im Allgemeinen waren vorgefertigte Werkzeuge entweder nicht für unsere Aufgabe geeignet oder nur begrenzt verfügbar. Sie müssen also Ihr eigenes Modell erstellen - um Ihr Modell zu trainieren. Dies war ein guter Grund, mit der BERT-Technologie zu arbeiten, die den Entwicklern ab 2018 zur Verfügung stand und beeindruckende Ergebnisse zeigte.

Wir stellen vor: BERT


Das Hauptproblem der modernen Verarbeitung natürlicher Sprache (NLP) besteht darin, genügend Beispiele zu finden, die von Personen zum Trainieren eines neuronalen Netzwerks gekennzeichnet wurden. Wenn Sie Qualitätswachstum benötigen, sollte die Trainingsstichprobe sehr groß sein - Millionen und Milliarden von Beispielen. Gleichzeitig gibt es in NLP viele Aufgaben, die alle unterschiedlich sind. Das Sammeln von Daten in ähnlichen Mengen für jede Aufgabe ist langwierig, teuer und oft unmöglich. Auch für die größten Unternehmen der Welt.

Es gibt jedoch eine Möglichkeit, dieses Problem zu umgehen - mit Hilfe eines Trainings in zwei Schritten. Zunächst wird dem neuronalen Netz eine Sprachstruktur für eine lange und teure Zeit auf einer riesigen Menge von Milliarden von Wörtern beigebracht (dies ist ein Vortraining). Dann wird das Netzwerk für eine bestimmte Aufgabe schnell und kostengünstig verdreht - zum Beispiel, um Überprüfungen in gute und schlechte zu unterteilen (dies ist eine Feinabstimmung). Genug von etwa zehntausend in Tolok markierten Exemplaren .

Die BERT-Technologie (Bidirectional Encoder Representations from Transformers) basiert auf dieser Idee. Die Idee selbst ist nicht neu und wurde bereits angewendet, aber es gibt einen signifikanten Unterschied. Transformer ist eine solche neuronale Netzwerkarchitektur, mit der Sie den gesamten Kontext auf einmal berücksichtigen können, einschließlich des anderen Satzendes und des Partizip-Umsatzes irgendwo in der Mitte. Und das ist der Unterschied zu früheren modischen Architekturen, die den Kontext berücksichtigten. Ein neuronales LSTM-Netzwerk hat zum Beispiel bestenfalls eine Kontextlänge von zehn Wörtern und hier sind es alle 200.

Auf GitHub sind TensorFlow-Quellcode und sogar ein vorgefertigtes Universalmodell in 102 Sprachen verfügbar, von Russisch bis Volapyuk. Nehmen Sie anscheinend die Lösung aus dem Karton - und erhalten Sie sofort das Ergebnis. Aber nein

Es stellte sich heraus, dass das Universalmodell in russischen Texten eine deutlich geringere Qualität aufwies als das englische Modell und Rekorde in englischen Texten brach (was, wie Sie sehen, logisch ist). In russischen Texten verlor sie gegen unsere internen Modelle auf DSSM.

Okay, Sie können sich vorerziehen - zum Glück hat Yandex genug russische Texte und Erfahrung im maschinellen Lernen. Aber es gibt eine Nuance. Das Lernen dauert ein Jahr!

Fakt ist, dass BERT auf Google-Tensor-Prozessoren (TPUs) ausgelegt ist und daher sofort mit nur einer Grafikkarte (GPU) verwendet werden kann. Und es ist unmöglich, die Stirn mit einem Horovod zu parallelisieren: Das Übertragen von 400 Megabyte Daten von Karte zu Karte bei jedem Schritt ist sehr kostspielig, Parallelisierung wird sinnlos. Was zu tun ist?

Optimierung


Sie begannen, nach Ideen und Lösungen zu suchen, die die Angelegenheit erheblich beschleunigen könnten. Zuallererst haben wir festgestellt, dass jede Zahl in unserem Modell 32 Bit Speicher belegt (das Standard-Float für Zahlen im Computer). Es scheint klein zu sein, aber wenn Sie 100 Millionen Gewichte haben, dann ist dies kritisch. Wir brauchten nicht überall eine solche Genauigkeit, deshalb haben wir beschlossen, die Zahlen teilweise in das 16-Bit-Format umzuwandeln (dies wird als gemischtes Präzisionstraining bezeichnet).

Dabei haben wir mit Hilfe vieler Dateien und Krücken die XLA-Kompilierung unter Berufung auf das damals noch rohe NVIDIA- Commit geschraubt. Dank dessen konnten unsere NVIDIA Tesla V100-Karten (von denen ein kleiner Server als Apartment in einem billigen Viertel von Moskau dient) ihr Potenzial dank der 16-Bit-Arithmetik auf Tensor Cores voll ausspielen.

Wir haben uns nur für russischsprachige Schlagzeilen interessiert, aber das mehrsprachige Modell, das wir zugrunde gelegt haben, wurde in Hunderten von Sprachen trainiert, einschließlich eines künstlichen Volapuks. Wörter aller in den Vektorraum übersetzten Sprachen wurden im Modell gespeichert. Außerdem können Sie sie nicht nehmen und einfach von dort entfernen - ich musste schwitzen, um das Wörterbuch zu verkleinern.

Und noch eine Sache. Wenn Sie Wissenschaftler sind und sich Ihr Computer unter dem Tisch befindet, können Sie dort alles für jede bestimmte Aufgabe neu konfigurieren. In einer realen Computing-Cloud, in der Tausende von Maschinen auf die gleiche Weise konfiguriert sind, ist es beispielsweise problematisch, den Kernel für jede neue TensorFlow-Funktion neu zu erstellen. Aus diesem Grund haben wir viel Mühe darauf verwendet, solche Versionen von Paketen zu sammeln, die für alle neuen Chips geeignet sind und die keine radikale Aktualisierung und Neukonfiguration von Grafikkarten in der Cloud erfordern.

Im Allgemeinen drückte alle Säfte, wo immer sie konnten. Und wir haben es geschafft. Das Jahr wurde zu einer Woche.

Schulung


Das Erstellen des richtigen Datensatzes ist normalerweise der schwierigste Teil der Arbeit. Zunächst lernten wir den Klassifikator anhand von drei Millionen mit Tolokern gekennzeichneten Überschriften. Es scheint viel zu sein, aber nur 30.000 - mit Tippfehlern. Wo gibt es weitere Beispiele?

Wir haben uns entschieden, welche Überschriften die Medien selbst korrigieren. Es gibt mehr als 2 Millionen solcher in der Geschichte von Yandex.News. Bingo! Obwohl es zu früh war, sich zu freuen.

Es stellte sich heraus, dass die Medien sehr oft die Schlagzeilen wiederholen, nicht aufgrund von Fehlern. Neue Details wurden bekannt - und der Herausgeber ersetzte einen korrekten Wortlaut durch einen anderen. Aus diesem Grund haben wir uns auf Korrekturen mit einem Unterschied zwischen den Versionen von bis zu drei Buchstaben beschränkt (obwohl es hier immer noch einige Geräusche gab: Es wurde „zwei gefunden“ - es wurde „drei gefunden“). Also haben wir eine Million Tippfehler gemacht. Wir haben zuerst diese große Auswahl mit Rauschen und dann eine kleine Tolkermarkierung ohne Rauschen untersucht.

Qualität


Bei solchen Aufgaben ist es üblich, Genauigkeit und Vollständigkeit zu messen. In unserem Fall ist Genauigkeit das Verhältnis der korrekten Urteile zu allen Urteilen über einen Fehler in der Kopfzeile. Vollständigkeit - der Anteil der Fehlerköpfe, den wir unter allen Fehlerköpfen abgefangen haben. Sowohl das als auch ein anderer in der idealen Welt sollten sich um 100% bemühen. Bei maschinellen Lernaufgaben neigen diese Indikatoren jedoch zu Konflikten. Das heißt, je mehr wir die Genauigkeit verdrehen, desto mehr sinkt die Vollständigkeit. Umgekehrt.

In unserem vorherigen Ansatz basierend auf DSSM haben wir bereits eine Genauigkeit von 95% erreicht (d. H. 5% falsch positive Urteile). Dies ist bereits ein ziemlich hoher Indikator. Aus diesem Grund haben wir uns entschlossen, das gleiche Maß an Genauigkeit beizubehalten und zu prüfen, wie sich die Vollständigkeit mit dem neuen Modell ändert. Und sie sprang von 21 auf 78%. Und es ist definitiv ein Erfolg.

Hier wäre es möglich, dem ein Ende zu setzen, aber ich erinnere mich an das Versprechen, über Aufmerksamkeit zu sprechen.

Neuronales Netz mit Filzstift


Es ist allgemein anerkannt, dass ein neuronales Netzwerk eine solche Black Box ist. Wir geben etwas an den Eingang und geben etwas an den Ausgang. Warum und wie ist ein Rätsel.

Diese Einschränkung soll interpretierte neuronale Netze umgehen. BERT ist einer von ihnen. Ihre Interpretierbarkeit liegt im Aufmerksamkeitsmechanismus. Grob gesagt wiederholen wir in jeder Schicht des neuronalen Netzwerks dieselbe Technik: Wir betrachten die benachbarten Wörter mit unterschiedlicher „Aufmerksamkeit“ und berücksichtigen die Interaktion mit ihnen. Wenn ein neuronales Netzwerk beispielsweise das Pronomen "er" verarbeitet, "schaut" es genau auf das Nomen, auf das sich "er" bezieht.

Das Bild unten zeigt in verschiedenen Rottönen, auf welche Wörter der Token „schaut“, wodurch Informationen über den gesamten Titel für die letzte Klassifizierungsebene gesammelt werden. Wenn ein Tippfehler im Wort - Aufmerksamkeit es hervorhebt, wenn die Wörter inkonsistent sind - dann beide (und möglicherweise abhängig von ihnen).



An dieser Stelle kann man übrigens das volle Potenzial der neuronalen Netze erkennen. Zu keinem Zeitpunkt des Trainings weiß unser Modell genau, wo sich der Tippfehler im Beispiel befindet: Es weiß nur, dass der gesamte Titel falsch ist. Und dennoch erfährt sie, dass „eine Schule für 1224 Plätze“ aufgrund einer inkonsistenten Ziffer falsch geschrieben ist, und hebt die Zahl 4 besonders hervor.

Wir hörten nicht bei Tippfehlern auf und wandten einen neuen Ansatz an, um nicht nur nach Fehlern zu suchen, sondern auch veraltete Header zu identifizieren. Aber das ist eine ganz andere Geschichte, mit der wir hoffen, in naher Zukunft nach Habr zurückzukehren.

Nützliche Links für diejenigen, die sich mit dem Thema beschäftigen möchten


Source: https://habr.com/ru/post/de479662/


All Articles