
Wenn Ihre Arbeit darin besteht, etwas Schönes zu schaffen, ist es nicht notwendig, viel darüber zu erzählen, denn das Ergebnis spricht für sich. Anders sieht es aus, wenn Sie Graffiti von Zäunen entfernen – niemand bemerkt Ihre Arbeit, solange die Zäune gepflegt aussehen oder bis Sie etwas Unangemessenes abwischen.
Jeder Dienst, der Kommentare, Bewertungen, Nachrichten oder Bilder zulässt, sieht sich früher oder später Problemen wie Spam, Betrug und obszönen Inhalten gegenüber. Dagegen kann man nicht viel tun, aber man muss sich dem stellen.
Ich heiße Michael und arbeite im Anti-Spam-Team, das die Nutzer der Dienste von Yandex vor solchen Problemen schützt. Unsere Arbeit bleibt oft unbemerkt (und das ist gut so!), deshalb möchte ich Ihnen heute mehr darüber erzählen. Sie werden erfahren, in welchen Fällen Moderation nutzlos ist und warum Genauigkeit nicht der einzige Maßstab für ihre Effektivität ist. Außerdem sprechen wir über Schimpfwörter am Beispiel von Katzen und Hunden und darüber, warum es manchmal hilfreich ist, "wie ein Schimpfer zu denken".
Immer mehr Dienste erscheinen bei Yandex, auf denen Nutzer ihre Inhalte veröffentlichen können. Man kann Fragen stellen oder Antworten in Yandex.Q schreiben, über Neuigkeiten im Kiez in Yandex.Rayon diskutieren oder Informationen über den Verkehrsfluss in Yandex.Maps teilen. Doch mit dem Wachstum der Nutzerbasis wird der Dienst auch für Betrüger und Spammer attraktiv. Diese füllen die Kommentare mit Angeboten für einfaches Geldverdienen, bewerben wundersame Mittel und versprechen soziale Unterstützung. Aufgrund dieser Spammer verlieren einige Nutzer Geld, während andere das Interesse an einem vernachlässigten, spamüberladenen Dienst verlieren.
Und das ist nicht das einzige Problem. Wir streben nicht nur danach, die Nutzer vor Betrügern zu schützen, sondern auch eine angenehme Atmosphäre für die Kommunikation zu schaffen. Wenn die Menschen in den Kommentaren auf obszöne Sprache und Beleidigungen stoßen, werden sie mit großer Wahrscheinlichkeit gehen und nicht wiederkommen. Daher müssen wir auch damit umgehen können.
Sauberes Web
Wie so oft bei uns, entstanden die ersten Entwicklungen im Bereich der Suche, genauer gesagt in dem Teil, der sich mit dem Spam in den Ergebnissen beschäftigt. Vor etwa zehn Jahren entstand die Aufgabe, Erwachsenen-inhalte für die familienfreundliche Suche zu filtern und für Anfragen, bei denen keine Antworten aus der Kategorie 18+ erwartet werden. So kamen die ersten manuell erstellten Wörterbücher für Pornografie und vulgäre Sprache hinzu, die von Analysten ergänzt wurden. Das Hauptziel war die Klassifizierung von Anfragen, bei denen erwachsene Inhalte akzeptabel sind und bei denen nicht. Für diese Aufgabe sammelte man Markierungen, erstellte Heuristiken und trainierte Modelle. So wurden die ersten Schriften zur Filterung von unerwünschten Inhalten entwickelt.
Im Laufe der Zeit begann Yandex, UGC (user generated content) einzuführen – Nachrichten, die von den Nutzern selbst geschrieben werden, während Yandex sie nur veröffentlicht. Aus den oben beschriebenen Gründen konnten viele Nachrichten nicht unmoderiert veröffentlicht werden – eine Moderation war erforderlich. Daher entschied man, einen Dienst einzurichten, der Schutz vor Spam und Angreifern für alle UGC-Produkte von Yandex bieten sollte und die Entwicklungen zur Filterung unerwünschter Inhalte aus der Suche nutzen würde. Der Dienst wurde «Sauberer Web» genannt.
Neue Aufgaben und Unterstützung durch Tolokers
Zunächst hatten wir nur einfache Automatisierung: Die Dienste schickten uns Texte, und wir überprüften diese mit Schimpfwörtern, Erotik-Wörtern und regulären Ausdrücken – die Analytiker erstellten alles manuell. Mit der Zeit wurde der Dienst in immer mehr Produkten von Yandex verwendet, und wir mussten lernen, mit neuen Problemen umzugehen.
Oft veröffentlichen Benutzer anstelle von Bewertungen sinnlose Buchstabensammlungen, um sich selbst eine Anerkennung zu verschaffen, manchmal bewerben sie ihr Unternehmen in den Bewertungen über die Konkurrenz, und manchmal verwechseln sie einfach die Organisationen – in einem Kommentar über ein Zoogeschäft steht dann: „Perfekt zubereiteter Fisch!“. Vielleicht wird die künstliche Intelligenz irgendwann lernen, den Sinn jedes Textes perfekt zu erfassen, aber derzeit funktioniert die Automatisierung manchmal schlechter als der Mensch.
Es wurde klar, dass wir ohne manuelle Kennzeichnung nicht auskommen werden, also haben wir eine zweite Stufe in unser System integriert – die Überprüfung durch einen Menschen. Dort landeten die veröffentlichten Texte, bei denen der Klassifikator keine Probleme erkannt hatte. Das Ausmaß einer solchen Aufgabe kann man sich leicht vorstellen, weshalb wir uns nicht nur auf Gutachter verlassen haben, sondern auch die "Weisheit der Massen" in Anspruch genommen haben, sprich, wir haben die Hilfe von Crowd-Testern in Anspruch genommen. Sie helfen uns, das zu identifizieren, was die Maschine übersehen hat, und bilden sie somit weiter aus.
Intelligente Caching-Strategien und LSH-Hashing
Ein weiteres Problem, mit dem wir bei der Bearbeitung von Kommentaren konfrontiert wurden, ist Spam, genauer gesagt, dessen Volumen und Verbreitungsgeschwindigkeit. Als die Nutzerzahl von Yandex.Region schnell zunahm, kamen die Spammer. Sie haben gelernt, reguläre Ausdrücke zu umgehen, indem sie den Text leicht veränderten. Spam-Nachrichten wurden natürlich immer noch gefunden und entfernt, aber im Maßstab von Yandex konnten auch unzulässige Nachrichten, die nur für 5 Minuten veröffentlicht wurden, von Hunderten gesehen werden.

Das hat uns natürlich nicht gefallen, und wir haben ein intelligentes Caching von Texten auf Basis von LSH eingeführt (). Es funktioniert so: Wir haben den Text normalisiert, Links entfernt und ihn in n-Gramme (Folgen von n Buchstaben) zerlegt. Dann haben wir Hashes für die n-Gramme erstellt und anhand dieser die LSH-Vektoren des Dokuments konstruiert. Die Idee ist, dass ähnliche Texte, selbst wenn sie leicht verändert wurden, in ähnliche Vektoren umgewandelt werden.
Diese Lösung ermöglichte es, die Urteile von Klassifikatoren und Tolokern für ähnliche Texte wiederzuverwenden. Bei einem Spam-Angriff, sobald die erste Nachricht die Prüfung bestand und im Cache mit dem Urteil „Spam“ landete, erhielten alle neuen ähnlichen Nachrichten, auch wenn sie verändert waren, dasselbe Urteil und wurden automatisch gelöscht. Später haben wir gelernt, Spam-Klassifikatoren zu trainieren und automatisch weiterzubilden, aber dieser „intelligente Cache“ ist uns erhalten geblieben und hilft uns auch heute noch oft.
Klassifikator für hochwertige Texte
Kaum hatten wir uns von dem Kampf gegen Spam erholt, erkannten wir, dass 95 % der Inhalte manuell moderiert werden: Die Klassifizierer reagieren nur auf Verstöße, während die meisten Texte gut sind. Wir belasten die Moderatoren, die in 95 von 100 Fällen die Bewertung „Alles in Ordnung“ abgeben. Deshalb mussten wir uns mit einer ungewohnten Aufgabe befassen – Klassifizierer für gute Inhalte zu erstellen, da sich in dieser Zeit bereits genügend Markierungen angesammelt hatten.
Der erste Klassifizierer sah so aus: Wir lemmatisieren den Text (bringen die Wörter in ihre Grundform), entfernen alle Funktionswörter und wenden ein vorab vorbereitetes „Wörterbuch guter Lemmata“ an. Wenn alle Wörter im Text „gut“ sind, enthält auch der gesamte Text keine Verstöße. Dieser Ansatz ermöglichte uns auf verschiedenen Plattformen eine sofortige Automatisierung der manuellen Markierung von 25 bis 35 %. Natürlich ist dieser Ansatz nicht perfekt: Es ist nicht schwer, mehrere harmlose Worte zu kombinieren und eine sehr beleidigende Aussage zu erhalten, aber er ermöglichte uns, schnell ein gutes Automatisierungsniveau zu erreichen und gab uns die Zeit, komplexere Modelle zu schulen.
Die folgenden Versionen der Klassifizierer für gute Texte umfassten bereits lineare Modelle und Entscheidungsbäume sowie deren Kombinationen. Um Unhöflichkeiten und Beleidigungen zu kennzeichnen, versuchen wir beispielsweise das neuronale Netzwerk BERT. Hier ist es wichtig, die Bedeutung eines Wortes im Kontext und die Verbindung von Wörtern aus verschiedenen Sätzen zu erfassen, und BERT gelingt dies ganz gut. (Übrigens berichteten kürzlich Kollegen aus den Nachrichten , wie sie die Technologie für eine unkonventionelle Aufgabe nutzen – zur Fehlersuche in Überschriften.) Dadurch konnten bis zu 90% des Arbeitsflusses automatisiert werden, je nach Dienst.
Genauigkeit, Vollständigkeit und Geschwindigkeit
Um sich weiterzuentwickeln, ist es wichtig zu verstehen, welchen Nutzen die verschiedenen automatischen Klassifizierer bringen, welche Änderungen daran vorgenommen werden und ob die Qualität der manuellen Überprüfungen nicht abnimmt. Zu diesem Zweck verwenden wir die Kennzahlen für Genauigkeit und Vollständigkeit.
Genauigkeit ist der Anteil der korrekten Urteile unter allen Urteilen über unerwünschte Inhalte. Je höher die Genauigkeit, desto weniger falsche Alarme. Wenn man die Genauigkeit nicht überwacht, könnte man theoretisch alle Spam- und anstößigen Inhalte entfernen, und damit die Hälfte guter Beiträge verlieren. Andererseits würde, wenn man sich nur auf die Genauigkeit verlässt, die Technologie, die niemanden auffängt, als die beste angesehen werden. Daher gibt es auch den Vollständigkeitsfaktor: den Anteil der identifizierten unerwünschten Inhalte am gesamten Volumen dieser Inhalte. Diese beiden Kennzahlen balancieren sich gegenseitig aus.
Um diese zu messen, nehmen wir eine Stichprobe des gesamten eingehenden Datenstroms für jeden Dienst und geben die Content-Stichproben zur Expertenbewertung an Gutachter weiter, um sie mit den Entscheidungen der Maschine zu vergleichen.
Es gibt jedoch noch einen weiteren wichtigen Indikator.
Ich habe bereits erwähnt, dass unangemessene Nachrichten innerhalb von 5 Minuten von Hunderten von Personen gesehen werden können. Deshalb zählen wir, wie oft wir unerwünschte Inhalte den Nutzern zeigen konnten, bevor wir sie verstecken. Das ist wichtig, denn es ist nicht genug, qualitativ zu arbeiten – man muss auch schnell arbeiten. Und als wir den Schutz vor anstößigen Inhalten entwickelten, haben wir dies in vollem Umfang gespürt.
Anti-Anstößiges am Beispiel von Katzen und Hunden
Eine kleine lyrische Ablenkung. Manche mögen sagen, dass vulgäre Ausdrücke und Beleidigungen nicht so gefährlich sind wie bösartige Links und nicht so lästig wie Spam. Doch wir streben danach, angenehme Bedingungen für Millionen von Nutzern zu schaffen, denn niemand möchte zurückkehren, wo er beleidigt wird. Kein Wunder, dass das Verbot von Schimpfwörtern und Beleidigungen in den Regeln vieler Communities, darunter auch bei [Хабр], festgelegt ist. Aber ich schweife ab.
Schimpfwörter reichen nicht aus, um den ganzen Reichtum der russischen Sprache widerzuspiegeln. Auch wenn es nur vier Hauptsilben gibt, aus denen man unzählige Wörter bilden kann, die man mit regulären Ausdrücken nicht erfassen kann. Außerdem kann man Teile von Wörtern transkribieren, Buchstaben durch ähnliche Kombinationen ersetzen, Buchstaben umstellen, Sternchen hinzufügen usw. Manchmal ist es ohne Kontext schlichtweg unmöglich zu bestimmen, welches Schimpfwort der Nutzer meint. Wir respektieren die Regeln von [Хабр], weshalb wir dies nicht an lebenden Beispielen, sondern an Katzen und Hunden demonstrieren.

„Miau“, sagte die Katze. Aber wir verstehen, dass die Katze etwas anderes gesagt hat…
Wir haben begonnen, über die Algorithmen des "fuzzy Matchings" unseres Wörterbuchs nachzudenken und an einem intelligenten Preprocessing zu arbeiten: Wir haben Transliterationen erstellt, Leerzeichen und Satzzeichen zusammengeführt, Muster gesucht und für diese spezielle reguläre Ausdrücke geschrieben. Dieser Ansatz brachte Ergebnisse, senkte jedoch häufig die Genauigkeit und bot nicht die gewünschte Vollständigkeit.
Dann beschlossen wir, wie die "Vulgarker" zu denken. Wir begannen, absichtlich Rauschen in die Daten einzuführen: Wir vertauschten Buchstaben, generierten Tippfehler, ersetzten Buchstaben durch ähnliche, und so weiter. Die anfängliche Markierung dafür nahmen wir, indem wir Schimpfwörter auf große Textkorpora anwendeten. Wenn man einen Satz nimmt und ihn auf verschiedene Weisen verformt, erhält man bereits viele Sätze. So kann man den Trainingsdatensatz um ein Vielfaches erweitern. Es blieb nur noch, ein mehr oder weniger intelligentes Modell zu trainieren, das den Kontext berücksichtigt.

Es ist noch zu früh, um von einer endgültigen Lösung zu sprechen. Wir experimentieren weiterhin mit Ansätzen zu diesem Problem, sehen aber bereits, dass ein einfacher zeichenbasierter neuronaler Netzwerk aus mehreren Schichten die Wörterbücher und regulären Ausdrücke deutlich übertrifft: sowohl die Genauigkeit als auch die Vollständigkeit können gesteigert werden.
Natürlich verstehen wir, dass es immer Wege gibt, auch die ausgeklügeltste Automatisierung zu umgehen, besonders wenn es um das Spiel geht: so zu schreiben, dass eine dumme Maschine es nicht versteht. Hier, wie im Kampf gegen Spam, ist es nicht unser Ziel, die Möglichkeit abzuschaffen, etwas Unanständiges zu schreiben; unsere Aufgabe besteht darin, sicherzustellen, dass das Spiel den Aufwand wert ist.
Es ist einfach, die Möglichkeit zu schaffen, seine Meinung zu äußern, zu kommunizieren und Kommentare abzugeben. Viel schwieriger ist es, sichere, komfortable Bedingungen und respektvollen Umgang miteinander zu gewährleisten. Ohne das gibt es keine Entwicklung irgendeiner Gemeinschaft.
Quelle: habr.com
