
Jeder Dienst, dessen Nutzer eigene Inhalte erstellen können (UGC – nutzergenerierte Inhalte), muss nicht nur Geschäftsaufgaben lösen, sondern auch Ordnung im UGC schaffen. Schlechte oder mangelhafte Moderation von Inhalten kann letztendlich die Attraktivität des Dienstes für die Nutzer verringern, bis hin zur Einstellung seiner Tätigkeit.
Heute erzählen wir Ihnen von der Synergie zwischen Yula und Odnoklassniki, die uns hilft, Anzeigen in Yula effektiv zu moderieren.
Synergie ist im Allgemeinen etwas sehr Nützliches, und in der modernen Welt, in der sich Technologien und Trends sehr schnell ändern, kann sie sich als Zauberstab erweisen. Warum wertvolle Ressourcen und Zeit für die Erfindung dessen aufwenden, was bereits erfunden und perfektioniert wurde?
So haben auch wir gedacht, als die Aufgabe der Moderation nutzergenerierter Inhalte – Bilder, Texte und Links – vor uns stand. Unsere Nutzer laden jeden Tag Millionen von Inhalten in Yula hoch, und ohne automatische Verarbeitung ist es überhaupt nicht möglich, all diese Daten manuell zu moderieren.
Deshalb haben wir eine bereits vorhandene Moderationsplattform genutzt, die unsere Kollegen von Odnoklassniki bis zu dem Zeitpunkt fast perfektioniert hatten.
Warum Odnoklassniki?
Täglich besuchen Dutzende Millionen Nutzer das soziale Netzwerk und veröffentlichen Milliarden von Inhalten: von Fotos bis hin zu Videos und Texten. Die Moderationsplattform von Odnoklassniki hilft, sehr große Datenmengen zu überprüfen und gegen Spammer und Bots vorzugehen.
Das Moderationsteam von OK hat eine sehr große Erfahrung gesammelt, da es sein Tool bereits seit 12 Jahren verbessert. Wichtig ist, dass sie nicht nur ihre fertigen Lösungen teilen konnten, sondern auch die Architektur ihrer Plattform an unsere spezifischen Aufgaben anpassen konnten.

Für die Kürze werden wir die Moderationsplattform von OK einfach als "Plattform" bezeichnen.
Wie alles funktioniert
Der Datenaustausch zwischen Yula und Odnoklassniki erfolgt über .
Warum wir dieses Tool gewählt haben:
- In Yula durchlaufen alle Anzeigen eine Nachmoderation, daher war eine sofortige Antwort anfangs nicht erforderlich.
- Falls ein schwerwiegender Absatz auftritt und Юла oder Одноклассники nicht verfügbar sind, beispielsweise aufgrund von Spitzenlasten, gehen die Daten aus Kafka nicht verloren und können später nachgelesen werden.
- Die Plattform wurde bereits mit Kafka integriert, sodass die meisten Sicherheitsfragen geklärt wurden.

Für jede von einem Benutzer erstellte oder geänderte Anzeige in Юла wird ein JSON mit den Daten erzeugt, das in Kafka zur späteren Moderation abgelegt wird. Die Anzeigen werden aus Kafka in die Plattform geladen, wo Entscheidungen automatisch oder manuell getroffen werden. Schlechte Anzeigen werden mit einer angegebenen Ursache blockiert, während die, in denen die Plattform keine Verstöße gefunden hat, als „gut“ gekennzeichnet werden. Alle Entscheidungen werden dann zurück an Юла gesendet und im Service angewendet.
Insgesamt reduziert sich für Юла alles auf einfache Handlungen: eine Anzeige an die Plattform von Одноклассники zu senden und eine Rückmeldung „ok“ oder den Grund, warum nicht „ok“ zu erhalten.
Automatische Verarbeitung
Was passiert mit der Anzeige, nachdem sie in die Plattform gelangt? Jede Anzeige wird in mehrere Entitäten zerlegt:
- Titel,
- Beschreibung,
- Fotos,
- die vom Benutzer gewählte Kategorie und Unterkategorie der Anzeige,
- Preis.

Anschließend führt die Plattform eine Clusterbildung für jede Entität durch, um Duplikate zu finden. Dabei werden Texte und Fotos nach unterschiedlichen Schemen geclustert.
Die Texte werden vor der Clusterbildung normalisiert, um Sonderzeichen, veränderte Buchstaben und anderen Müll zu entfernen. Die erhaltenen Daten werden in N-Gramme zerlegt, von denen jedes gehasht wird. Am Ende erhält man eine Vielzahl einzigartiger Hashes. Die Ähnlichkeit zwischen Texten wird basierend auf zwischen den beiden resultierenden Mengen berechnet. Wenn die Ähnlichkeit über dem Schwellenwert liegt, werden die Texte zu einem Cluster zusammengefügt. Um die Suche nach ähnlichen Clustern zu beschleunigen, werden MinHash und lokalitäts-sensible Hashing verwendet.
Für Fotos wurden verschiedene Möglichkeiten zur Kombination von Bildern entwickelt, von der Vergleichung von pHash-Bildern bis hin zur Duplikatsuche mittels neuronaler Netzwerke.
Die letzte Methode ist die "härteste". Für das Training des Modells wurden Bildtrios (N, A, P) ausgewählt, bei denen N nicht wie A aussieht, während P ähnlich wie A ist (also ein Halbdublett). Dann lernte das neuronale Netzwerk, so zu arbeiten, dass A und P so nah wie möglich beieinander liegen, und A und N so weit wie möglich voneinander entfernt sind. Dadurch gibt es weniger falsch-positive Ergebnisse im Vergleich dazu, einfach die Embeddings von einem vortrainierten Netzwerk zu verwenden.
Wenn das neuronale Netzwerk Bilder erhält, generiert es für jedes ein N(128)-dimensionales Vektor und stellt eine Anfrage zur Bewertung der Bildähnlichkeit. Anschließend wird ein Schwellenwert berechnet, bei dem ähnliche Bilder als Dubletten betrachtet werden.
Das Modell kann meisterhaft Spammer erkennen, die absichtlich dasselbe Produkt aus verschiedenen Perspektiven fotografieren, um den Vergleich nach pHash zu umgehen.


Beispiel für Spam-Fotos, die von einem neuronalen Netzwerk als Dubletten zusammengefügt wurden.
In der Endphase werden Dublettenanzeigen gleichzeitig anhand von Text und Bild gesucht.
Wenn in einem Cluster zwei oder mehr Anzeigen miteinander verbunden sind, startet das System eine automatische Blockierung, die anhand bestimmter Algorithmen auswählt, welche Dubletten entfernt und welche beibehalten werden sollen. Wenn zwei Benutzer in der Anzeige identische Fotos haben, wird die neuere Anzeige blockiert.
Nach der Erstellung durchlaufen alle Cluster eine Reihe automatischer Filter. Jeder Filter vergibt dem Cluster eine Punktzahl (score): Mit welcher Wahrscheinlichkeit enthält er die Bedrohung, die dieser Filter entdeckt.
Zum Beispiel analysiert das System die Beschreibung in der Anzeige und wählt für sie potenzielle Kategorien aus. Dann nimmt es die Kategorie mit der höchsten Wahrscheinlichkeit und vergleicht sie mit der Kategorie, die der Autor der Anzeige angegeben hat. Wenn sie nicht übereinstimmen, wird die Anzeige wegen falscher Kategorie blockiert. Da wir freundlich und ehrlich sind, sagen wir dem Benutzer direkt, welche Kategorie er auswählen muss, damit die Anzeige die Moderation besteht.

Benachrichtigung über die Blockierung wegen falscher Kategorie.
Auf unserer Plattform fühlt sich maschinelles Lernen wie zu Hause. Zum Beispiel suchen wir mit seiner Hilfe in Titeln und Beschreibungen nach in Russland verbotenen Produkten. Und neuronale Netzmodelle prüfen sorgfältig, ob auf den Bildern URLs, Spam-Texte, Telefonnummern und das gleiche "verbotene" zu finden sind.
Für Fälle, in denen ein verbotener Artikel als etwas Legales getarnt verkauft wird und dabei kein Text im Titel oder in der Beschreibung vorhanden ist, verwenden wir die Bildtagging-Technologie. Für jedes Bild können bis zu 11.000 verschiedene Tags vergeben werden, die beschreiben, was auf dem Bild zu sehen ist.

Es wird versucht, eine Wasserpfeife als Samowar zu verkaufen.
Neben komplexen Filtern gibt es auch einfache, die offensichtliche Aufgaben im Zusammenhang mit Text lösen:
- Antimat;
- Detektor für URLs und Telefonnummern;
- Erwähnung von Messengern und anderen Kontakten;
- niedriger Preis;
- Anzeigen, in denen nichts verkauft wird, usw.
Heute durchläuft jede Anzeige ein kleines Sieb aus mehr als 50 automatischen Filtern, die versuchen, etwas Schlechtes in der Anzeige zu finden.
Wenn keiner der Detektoren anschlägt, wird an Yula eine Antwort gesendet, dass mit der Anzeige „höchstwahrscheinlich“ alles in Ordnung ist. Diese Antwort verwenden wir, und den Nutzern, die den Verkäufer abonniert haben, wird eine Benachrichtigung über ein neues Produkt gesendet.

Benachrichtigung, dass der Verkäufer ein neues Produkt hat.
Insgesamt „wächst“ jede Anzeige um Metadaten, von denen ein Teil bei der Erstellung der Anzeige generiert wird (IP-Adresse des Autors, User-Agent, Plattform, Geolokalisierung usw.), und der Rest sind Scores, die von jedem Filter vergeben werden.
Warteschlangen von Anzeigen
Wenn eine Anzeige auf die Plattform kommt, legt das System sie in eine der Warteschlangen. Jede Warteschlange wird mit Hilfe einer mathematischen Formel gebildet, die die Metadaten der Anzeige so kombiniert, dass ein schlechtes Muster erkannt wird.
Zum Beispiel könnte eine Warteschlange von Anzeigen in der Kategorie „Mobiltelefone“ von Yula-Nutzern angeblich aus Sankt Petersburg erstellt werden, ihre IP-Adressen jedoch aus Moskau oder anderen Städten stammen.

Beispielanzeigen, die von einem Benutzer in verschiedenen Städten veröffentlicht wurden.
Oder Warteschlangen können basierend auf den Scores gebildet werden, die ein neuronales Netzwerk den Anzeigen zuweist, indem sie nach absteigender Reihenfolge angeordnet werden.
Jede Warteschlange weist der Anzeige gemäß ihrer Formel einen endgültigen Score zu. Danach kann man unterschiedlich vorgehen:
- einen Schwellenwert festlegen, bei dem die Anzeige eine bestimmte Art der Sperrung erhält;
- Alle Anzeigen in der Warteschlange zur manuellen Überprüfung an Moderatoren senden;
- oder kombinieren Sie die vorherigen Optionen: legen Sie die automatische Sperrgrenze fest und senden Sie den Moderatoren die Anzeigen, die diesen Schwellenwert nicht erreichen.

Warum sind diese Warteschlangen erforderlich? Angenommen, ein Benutzer lädt ein Foto von Schusswaffen hoch. Das neuronale Netzwerk vergibt einen Score zwischen 95 und 100 und bestimmt mit einer Genauigkeit von 99 %, dass auf dem Bild eine Waffe ist. Wenn der Score jedoch unter 95 % liegt, sinkt die Genauigkeit des Modells (so ist die Eigenart von neuronalen Netzwerkmodellen).
Infolgedessen wird eine Warteschlange basierend auf dem Score des Modells gebildet, und die Anzeigen, die zwischen 95 und 100 Punkte erhalten haben, werden automatisch als „Verbotene Ware“ gesperrt. Anzeigen mit weniger als 95 Punkten werden zur manuellen Bearbeitung an die Moderatoren gesendet.

Schokoladen-Beretta mit Patronen. Nur zur manuellen Moderation! 🙂
Manuelle Moderation
Zu Beginn des Jahres 2019 wurden ca. 94 % aller Anzeigen auf Yula automatisch moderiert.

Wenn die Plattform bei bestimmten Anzeigen unschlüssig ist, sendet sie diese zur manuellen Moderation. Odnoklassniki hat ein eigenes Tool entwickelt: In den Aufgaben für die Moderatoren wird sofort alle erforderliche Informationen für eine schnelle Entscheidung angezeigt — ob die Anzeige zulässig ist oder ob sie aus einem bestimmten Grund gesperrt werden sollte.
Um sicherzustellen, dass bei der manuellen Moderation die Servicequalität nicht leidet, wird die Arbeit der Menschen ständig überwacht. Zum Beispiel sieht der Moderator in der Aufgabenströmung „Fallen“ — Anzeigen, für die bereits Lösungen vorliegen. Wenn die Entscheidung des Moderators nicht mit der vorliegenden Lösung übereinstimmt, wird dies als Fehler gewertet.
Der Moderator benötigt im Durchschnitt 10 Sekunden für die Überprüfung einer Anzeige. Gleichzeitig beträgt die Fehlerquote nicht mehr als 0,5 % aller geprüften Anzeigen.
Volksmoderation
Die Kollegen von Odnoklassniki sind noch weiter gegangen und haben die „Hilfe des Publikums“ in Anspruch genommen: Sie entwickelten eine App-Spiel für das soziale Netzwerk, mit dem man schnell eine große Menge an Daten kennzeichnen kann, indem man ein schlechtes Merkmal hervorhebt — Moderatoren von Odnoklassniki (). Eine gute Möglichkeit, die Hilfe der OK-Nutzer in Anspruch zu nehmen, die versuchen, die Inhalte angenehmer zu gestalten.

Ein Spiel, in dem Benutzer Fotos markieren, auf denen eine Telefonnummer vorhanden ist.
Jede Anzeigewarteschlange auf der Plattform kann in das Spiel Moderator von Odnoklassniki umgeleitet werden. Alles, was die Benutzer des Spiels markieren, wird dann den internen Moderatoren zur Überprüfung vorgelegt. Dieses System ermöglicht es, Anzeigen zu sperren, für die noch keine Filter erstellt wurden, und gleichzeitig Schulungsdaten zu erstellen.
Speicherung der Moderationsergebnisse
Wir speichern alle bei der Moderation getroffenen Entscheidungen, um nicht erneut die Anzeigen zu bearbeiten, für die bereits eine Entscheidung gefällt wurde.
Täglich werden Millionen von Clustern für Anzeigen erstellt. Im Laufe der Zeit erhält jeder Cluster die Markierung 'gut' oder 'schlecht'. Jede neue Anzeige oder deren Bearbeitung, die in einen Cluster mit einer Markierung fällt, erhält automatisch die Resolution des Clusters. Es fallen täglich etwa 20.000 solcher automatischen Resolutionsentscheidungen an.

Wenn im Cluster keine neuen Anzeigen eingehen, wird er aus dem Speicher gelöscht, und sein Hash sowie die Entscheidung werden in Apache Cassandra aufgezeichnet.
Wenn die Plattform eine neue Anzeige erhält, versucht sie zunächst, einen ähnlichen Cluster unter den bereits erstellten zu finden und übernimmt dessen Entscheidung. Wenn es keinen solchen Cluster gibt, sucht die Plattform in Cassandra. Gefunden? Ausgezeichnet, sie wendet die Entscheidung auf den Cluster an und sendet ihn an Yula. Täglich werden durchschnittlich etwa 70.000 solcher 'Wiederholungs'-Entscheidungen getroffen – das sind 8 % der Gesamtanzahl.
Zusammenfassend
Wir nutzen die Moderationsplattform von Odnoklassniki seit zweieinhalb Jahren. Die Ergebnisse gefallen uns:
- 94 % aller Anzeigen werden automatisch innerhalb eines Tages moderiert.
- Die Kosten für die Moderation einer Anzeige wurden von 2 Rubel auf 7 Kopeken gesenkt.
- Dank des ausgereiften Werkzeugs haben wir die Probleme im Management der Moderatoren vergessen.
- Wir haben die Anzahl der manuell bearbeiteten Anzeigen bei gleichbleibender Anzahl von Moderatoren und Budget um das 2,5-Fache erhöht. Auch die Qualität der manuellen Moderation hat sich durch automatisierte Kontrolle verbessert und liegt bei etwa 0,5 % Fehlern.
- Wir decken schnell neue Spam-Typen mit Filtern ab.
- Wir binden schnell neue Abteilungen in die Moderation ein. . Seit 2017 sind die Verticals Immobilien, Stellenangebote und Autos auf Yula erschienen.
Quelle: habr.com
