Wie wir gelernt haben, Filme zu empfehlen und warum Sie sich nicht nur auf Bewertungen verlassen sollten



Stellen Sie sich vor, Sie möchten den Abend mit einem Film verbringen, wissen aber nicht, welchen Sie wählen sollen. Yandex-Benutzer befinden sich häufig in derselben Situation, daher entwickelt unser Team Empfehlungen, die auf Search and Air zu finden sind. Es scheint, dass dies kompliziert ist: Wir nehmen Benutzerbewertungen, mit deren Hilfe wir das Auto trainieren, um Filme zu finden, die wahrscheinlich 5 Punkte geben, erhalten wir eine vorgefertigte Liste von Filmen. Dieser Ansatz funktioniert jedoch nicht. Warum? Darüber erzähle ich Ihnen heute.

Ein bisschen Geschichte. Bereits 2006 startete Netflix den maschinellen Lernwettbewerb mit dem Netflix-Preis. Wenn Sie es plötzlich vergessen haben, hat das Unternehmen noch nicht im Internet gestreamt, sondern Filme auf DVD ausgeliehen. Aber selbst dann war es für sie wichtig, die Bewertung des Benutzers vorherzusagen, um ihm etwas zu empfehlen. Das Wesentliche des Wettbewerbs ist also, dass die Vorhersage der Zuschauerbewertungen 10% besser ist (gemäß der RMSE-Metrik) als Cinematch, das Netflix-Empfehlungssystem. Dies war einer der ersten Massenwettbewerbe dieser Art. Das Interesse hat einen riesigen Datensatz (mehr als 100 Millionen Bewertungen) sowie einen Preis von 1 Million US-Dollar aufgeheizt.

Der Wettbewerb endete 2009. Die Teams von BellKors Pragmatic Chaos und The Ensemble erreichten die Ziellinie mit demselben Ergebnis (RMSE = 0,8567), aber The Ensemble belegte den zweiten Platz, weil sie die Lösung 20 Minuten später als die Konkurrenten schickten. Ergebnisse und Arbeiten finden Sie hier . Aber das Interessanteste ist anders. Wenn Sie den wiederholten Geschichten auf Fachkonferenzen glauben, wurden die Gewinneralgorithmen nicht in der Produktion des bald gestarteten Video-Streaming-Dienstes angezeigt. Ich kann nicht über die Gründe für die Entscheidungen anderer sprechen, aber ich werde Ihnen sagen, warum wir dasselbe getan haben.

Persönliche Bewertung


Seit geraumer Zeit können Yandex-Benutzer Filme bewerten, die sie gesehen haben. Und das nicht nur bei KinoPoisk, sondern auch in den Suchergebnissen. Im Laufe der Zeit haben wir Hunderte Millionen Schätzungen von zig Millionen Menschen gesammelt. Irgendwann haben wir uns entschlossen, diese Daten zu verwenden, um den Benutzern zu helfen, zu verstehen, wie sehr sie sich einen Film wünschen. Tatsächlich haben wir das gleiche Problem wie beim Netflix-Preiswettbewerb gelöst, dh wir haben vorausgesagt, welche Bewertung der Benutzer dem Film geben würde. Zu diesem Zeitpunkt gab es bereits KinoPoisk- und IMDB-Bewertungen, die auf der Grundlage der Bewertungen der Personen erstellt wurden. Wir haben eine persönliche Bewertung erstellt und uns daher entschieden, eine separate Skala als Prozentsatz zu verwenden, um visuelle Ähnlichkeiten und Verwirrung zu vermeiden.



Übrigens ist die Notwendigkeit, die Punkteskala und den Prozentsatz zu korrelieren, ein separater, nicht offensichtlicher Kopfschmerz, daher werde ich kurz darauf eingehen. Es scheint, dass für eine 10-Punkte-Skala 10% für jeden Punkt genommen werden - und der Punkt ist im Hut. Aber nein. Der Grund ist Psychologie und Gewohnheiten. Zum Beispiel ist aus Sicht der Benutzer eine Bewertung von 8/10 viel besser als 80%. Wie korreliere ich das? Mit Crowdsourcing! Und so haben wir es gemacht: Wir haben die Aufgabe in Tolok gestartet, in der die Schützen die Erwartungen von Filmen mit einer bestimmten Punktzahl oder einem bestimmten Prozentsatz an persönlicher Bewertung beschrieben haben. Basierend auf diesem Markup haben wir eine Funktion ausgewählt, die die Vorhersage der Punktzahl von Punkt zu Prozentsatz übersetzt, damit die Benutzererwartungen erhalten bleiben.

Beispielquests in Tolok


Das Vorhersagen der Erwartungen an den Film ist nützlich, aber es wäre auch schön, Empfehlungen zu erstellen. Das heißt, zeigen Sie der Person sofort eine Liste guter Filme. In diesem Moment könnten viele von Ihnen denken: "Und lassen Sie uns einfach die Filme, die der Benutzer nicht gesehen hat, nach persönlicher Bewertung sortieren." Das haben wir uns auch zuerst gedacht. Aber dann musste ich zwei Probleme lösen.

Werkzeugproblem


Wenn ein Benutzer nach einem bestimmten Film sucht (oder eine bestimmte DVD ausleihen möchte), muss der Dienst die Bewertung dieses bestimmten Films vorhersagen. Genau dieses Problem wurde beim Netflix-Preiswettbewerb gelöst, bei dem die RMSE-Metrik verwendet wurde. Aber die Empfehlungen lösen ein anderes Problem: Sie müssen nicht die Note erraten, sondern einen Film finden, der irgendwann gesehen wird. Und die RMSE-Metrik leistet hier schlechte Arbeit. Zum Beispiel ist die Strafe für die Vorhersage einer Bewertung von 2 anstelle von 1 genau die gleiche wie für 5 anstelle von 4. Unser System sollte jedoch niemals Filme empfehlen, denen der Benutzer 2 gibt! Listenbasierte Metriken eignen sich viel besser für diese Aufgabe, z. B. Precision @ K, Recall @ K, MRR oder NDCG. Ich kann nicht anders, als Ihnen ein wenig mehr darüber zu erzählen (aber wenn Sie nicht an den Metriken interessiert sind, überspringen Sie einfach den nächsten Absatz).

Beginnen wir mit der Metrik.MRR (mittlerer wechselseitiger Rang). Wir werden uns ansehen, an welcher Position im Ranking der Film steht, mit dem der Benutzer im Testzeitraum interagiert (z. B. gesehen oder gelobt) hat. Die MRR-Metrik ist die vom Benutzer gemittelte umgekehrte Position eines solchen Films. AlsoMRR=1|U|u=1|U|1ranku . Eine solche Metrik wertet im Gegensatz zu RMSE die gesamte Liste aus, betrachtet jedoch leider nur das erste erratene Element. Es ist jedoch einfach, die Metrik zu ändern, um diesen Nachteil zu beseitigen. Wir können die Summe der umgekehrten Positionen aller Filme berechnen, mit denen der Benutzer interagiert hat. Diese Metrik wird als durchschnittlicher gegenseitiger Trefferrang bezeichnet. Diese Metrik berücksichtigt alle erratenen Filme in der Ausgabe. Beachten Sie, dass die Position k in der Auszahlung für einen erratenen Film eine Gewichtung von 1 / k und für einen anderen Film eine Gewichtung von 0 erhält. Oft wird 1 / log (k) anstelle von 1 / k verwendet: Dies entspricht eher der Wahrscheinlichkeit, dass der Benutzer zur k-Position blättert. Das Ergebnis ist eine DCG-Metrik (diskontierter kumulierter Gewinn).DCG=1|U|u=1|U|pos=1Ngainposmax(1,log(pos))

Jede Aufgabe hat also ihre eigene Metrik. Das nächste Problem ist jedoch nicht so offensichtlich.

Problem der Wahl


Es ist schwer genug zu beschreiben, aber ich werde es versuchen. Es stellt sich heraus, dass die Leute den Filmen, die sie normalerweise sehen, keine guten Noten geben . Seltene Filmmeisterwerke, Klassiker, Arthouse erhalten die besten Noten, aber dies hält die Menschen am Abend nach der Arbeit nicht davon ab, eine gute Komödie, einen neuen Actionfilm oder eine spektakuläre Weltraumoper zu sehen. Hinzu kommt, dass die Nutzer von Yandex nicht alle Filme schätzten, die sie einmal und irgendwo gesehen hatten. Wenn wir uns nur auf die höchsten Bewertungen konzentrieren, laufen wir Gefahr, einen empfohlenen Film-Feed zu erhalten, der logisch aussieht. Die Benutzer erkennen möglicherweise sogar die Qualität, sehen aber am Ende nichts.

So könnte beispielsweise mein Film-Feed aussehen, wenn wir ihn nach persönlicher Bewertung sortieren und nichts über meine Ansichten in der Vergangenheit wissen. Tolle Filme. Aber ich möchte sie heute nicht überprüfen.



Es stellt sich heraus, dass es sich angesichts der verstreuten Bewertungen und des Mangels an Filmen mit hohen Bewertungen lohnt, nicht nur die Bewertung zu betrachten. Nun, dann trainieren wir das Auto, um die Betrachtung des empfohlenen Films und nicht die Bewertung vorherzusagen. Es scheint logisch, weil der Benutzer dies will. Was könnte schiefgehen? Das Problem ist, dass das Band mit Filmen gefüllt wird, von denen jeder für einen einfachen Zeitvertreib am Abend gut geeignet ist, aber ihre persönliche Bewertung ist niedrig. Benutzer werden natürlich darauf achten, dass das Band keine „Meisterwerke“ enthält, was bedeutet, dass die Glaubwürdigkeit der Empfehlungen untergraben wird und sie nicht sehen, was sie sonst sehen würden.

Als Ergebnis kamen wir zu dem Verständnis, dass ein Gleichgewicht zwischen den beiden Extremen erforderlich ist. Es ist notwendig, die Maschine so zu trainieren, dass sowohl das Betrachtungspotential als auch die Wahrnehmung der Empfehlung durch eine Person berücksichtigt werden.

Wie unsere Empfehlungen funktionieren


Unser System ist Teil der Suche, daher müssen wir sehr schnell Empfehlungen erstellen: Die Antwortzeit des Dienstes sollte weniger als 100 Millisekunden betragen. Daher versuchen wir, in der Phase der Datenaufbereitung so viele schwere Operationen wie möglich offline durchzuführen. Alle Filme und Benutzer im Empfehlungssystem werden durch Profile dargestellt (es ist wichtig, nicht mit dem Konto zu verwechseln), die Objektschlüssel, Zähler und Einbettungen (dh Vektoren in einem bestimmten Raum) enthalten. Auf YT werden täglich Filmprofile erstellt ( als „Yt“ gelesen ) und in den Arbeitsspeicher von Maschinen geladen, die auf Anfragen reagieren. Bei den Benutzern ist jedoch alles etwas komplizierter.

Jeden Tag erstellen wir auch das Hauptbenutzerprofil auf YT und senden es an den Yandex-Store, von dem Sie das Profil in wenigen zehn Millisekunden abrufen können. Die Daten werden jedoch schnell veraltet, wenn eine Person das Video aktiv ansieht und auswertet. Es ist nicht gut, wenn die Empfehlungen nachlassen. Daher lesen wir den Strom von Benutzerereignissen und bilden den dynamischen Teil des Profils. Wenn eine Person eine Anfrage eingibt, kombinieren wir das Profil aus dem Repository mit einem dynamischen Profil und erhalten ein einzelnes Profil, das nur einige Sekunden hinter der Realität zurückbleiben kann.

Dies geschieht offline (dh im Voraus), und jetzt gehen wir direkt zur Laufzeit. Hier besteht das Empfehlungssystem aus zwei Schritten. Das Ranking der gesamten Filmdatenbank ist zu lang. Im ersten Schritt wählen wir einfach mehrere hundert Kandidaten aus, dh wir finden Filme, die für den Betrachter von Interesse sein können. Dies schließt sowohl beliebte als auch benutzernahe Gemälde in einigen Einbettungen ein. Es gibt verschiedene Algorithmen, um schnell die nächsten Nachbarn zu finden. Wir verwenden HNSW (Hierarchical Navigable Small World). Damit finden wir in wenigen Millisekunden die Filme, die dem Benutzer am nächsten sind.

Im zweiten Schritt extrahieren wir Features (manchmal werden sie auch als Faktoren bezeichnet) nach Filmen, Benutzern und Benutzer / Film-Paaren und bewerten Kandidaten mit CatBoost. Ich möchte Sie daran erinnern: Wir haben bereits erkannt, dass wir uns nicht nur auf Ansichten, sondern auch auf andere Qualitätsmerkmale von Empfehlungen konzentrieren müssen. Für das Ranking kamen wir zu einer Kombination mehrerer CatBoost-Modelle, die für verschiedene Ziele trainiert wurden.

Um Kandidaten zu finden, verwenden wir Einbettungen aus mehreren Matrixzerlegungen: von der klassischen Version von ALS, die eine Bewertung vorhersagt, bis zu komplexeren Variationen basierend auf SVD ++. Als Merkmale für das Ranking werden sowohl einfache Benutzerereigniszähler als auch Filme, Klickraten für verschiedene Ereignisse sowie komplexere vorab trainierte Modelle verwendet. Beispielsweise fungiert die ALS-Vorhersage auch als Merkmal. Eines der nützlichsten Modelle ist das neuronale Recommender-DSSM-Netzwerk, über das ich wahrscheinlich noch etwas mehr sprechen werde.

Empfehlen Sie DSSM


DSSM ist ein neuronales Netzwerk mit zwei Türmen. Jeder Turm baut seine eigene Einbettung auf, dann wird der Kosinusabstand zwischen den Einbettungen berücksichtigt, diese Zahl ist die Netzwerkausgabe. Das heißt, das Netzwerk lernt, die Nähe von Objekten in den linken und rechten Türmen zu bewerten. Ähnliche neuronale Netze werden beispielsweise bei einer Websuche verwendet , um für eine Abfrage relevante Dokumente zu finden. Für die Suchaufgabe wird eine Anfrage an einen der Türme und ein Dokument an den anderen gesendet. Für unser Netzwerk spielt der Benutzer die Rolle der Anfrage, und Filme dienen als Dokumente.

Der Turm des Films bildet eine Einbettung basierend auf den Daten des Films: Dies ist der Titel, die Beschreibung, das Genre, das Land, die Schauspieler usw. Dieser Teil des Netzwerks ist dem Suchteil ziemlich ähnlich. Für den Betrachter möchten wir jedoch seine Geschichte verwenden. Zu diesem Zweck aggregieren wir die Einbettung von Filmen aus der Geschichte mit der Zeit seit dem Moment des Ereignisses. Zusätzlich zur gesamten Einbettung wenden wir mehrere Schichten des Netzwerks an und erhalten als Ergebnis eine Einbettung der Größe 400.



Wenn Sie beim Einbetten sofort den gesamten Verlauf des Benutzers berücksichtigen, wird das Training dadurch erheblich verlangsamt. Deshalb gehen wir zum Trick und lernen das Netzwerk in zwei Schritten. Lernen Sie zunächst das einfachere InnerDSSM. Am Eingang erhält er nur die letzten 50 Ereignisse aus der Benutzerhistorie, ohne sich in Ereignistypen (Ansichten, Bewertungen ...) zu unterteilen. Anschließend trainieren wir das resultierende InnerDSSM während des gesamten Benutzerverlaufs neu, jedoch mit einer Aufteilung in Ereignistypen. Wir erhalten also OuterDSSM, das zur Laufzeit verwendet wird.

Die Verwendung eines Laufzeitnetzwerks in der Stirn erfordert eine Menge Rechenressourcen. Daher speichern wir Einbettungen aus dem Movie Tower in der Datenbank, und Einbettungen gemäß Benutzerhistorie werden nahezu in Echtzeit aktualisiert. Während der Verarbeitung der Anforderung müssen Sie daher nur einen kleinen Teil von OuterDSSM anwenden und die Cosinus berechnen. Dies dauert nicht lange.

Fazit


Unsere Empfehlungen sind jetzt bereits in unserer Suche (z. B. auf Anfrage [was zu sehen] ), im Yandex.Air-Service verfügbar, und eine angepasste Version dieser Technologie wird auch in Yandex.Stations verwendet. Das heißt aber nicht, dass wir uns entspannen können. Wir trainieren ständig neue Modelle, wenden immer mehr Daten an, probieren neue Trainingsansätze und neue Qualitätsmetriken aus. Je älter das Gebiet ist, desto schwieriger ist es meiner Meinung nach, es zu entwickeln. Dies ist jedoch das Hauptinteresse für Spezialisten.

All Articles