
Dynamisches Remarketing (Dynrem) in myTarget ist eine zielgerichtete Werbetechnologie, die Informationen zu Benutzeraktionen auf Websites und in mobilen Anwendungen von Werbetreibenden verwendet. In einem Online-Shop hat ein Benutzer beispielsweise die Warenseiten angezeigt oder in den Warenkorb gelegt, und myTarget verwendet diese Ereignisse, um Werbung für genau die Waren und Dienstleistungen anzuzeigen, für die eine Person bereits Interesse gezeigt hat. Heute werde ich detaillierter auf den Mechanismus zur Generierung nicht persönlicher, dh item2item-Empfehlungen eingehen, mit denen wir die Werbeausgabe diversifizieren und ergänzen können.
Die Kunden von dynrem myTarget sind hauptsächlich Online-Shops, die eine oder mehrere Produktlisten haben können. Bei der Erstellung von Empfehlungen sollte das Paar „Lager - Warenliste“ als separate Einheit betrachtet werden. Der Einfachheit halber werden wir als nächstes einfach den "Laden" verwenden. Wenn wir über die Dimension der Eingabeaufgabe sprechen, sollten Empfehlungen für etwa tausend Geschäfte erstellt werden, und die Anzahl der Waren kann zwischen mehreren tausend und Millionen variieren.
Das Empfehlungssystem für Dynrem muss die folgenden Anforderungen erfüllen:
- Das Banner enthält Produkte, die die Klickrate maximieren.
- Empfehlungen werden für eine bestimmte Zeit offline erstellt.
- Die Systemarchitektur muss flexibel, skalierbar, stabil und in einer Kaltstartumgebung funktionieren.
Beachten Sie, dass sich aus der Anforderung, Empfehlungen für eine feste Zeit und die beschriebenen Anfangsbedingungen zu erstellen (wir gehen optimistisch davon aus, dass die Anzahl der Filialen zunimmt), natürlich eine Anforderung für den wirtschaftlichen Einsatz von Maschinenressourcen ergibt.
Abschnitt 2 enthält die theoretischen Grundlagen für den Aufbau von Empfehlungssystemen, die Abschnitte 3 und 4 erörtern die praktische Seite des Problems und Abschnitt 5 fasst das Gesamtergebnis zusammen.
Grundbegriffe
Betrachten Sie die Aufgabe, ein Empfehlungssystem für ein Geschäft aufzubauen, und listen Sie die grundlegenden mathematischen Ansätze auf.
Singular Value Decomposition (SVD)
Ein beliebter Ansatz zum Aufbau von Empfehlungssystemen ist der SVD-Ansatz (Singular Decomposition). Bewertungsmatrix
R=(rui) als Produkt zweier Matrizen darstellen
P und
Q so dass
R ca.PQT dann Bewertung Benutzerbewertung
u für Waren
i dargestellt als
hatrui=<pu,qi> [1], wobei die Elemente des Skalarprodukts Dimensionsvektoren sind
k (Hauptparameter des Modells). Diese Formel dient als Grundlage für andere SVD-Modelle. Die Aufgabe zu finden
P und
Q Es kommt auf die Optimierung der Funktionalität an:
(2.1)
J(P,Q)= sum(u,i) mathcalL(rui, hatrui)+ Lambda(P,Q) rightarrow minP,Q,
wo
L - Fehlerfunktion (zum Beispiel RMSE wie im
Netflix- Wettbewerb),
Λ - Regularisierung, und die Summierung erfolgt über Paare, für die die Bewertung bekannt ist. Wir schreiben Ausdruck (2.1) in einer expliziten Form um:
(2.2)
J(P,Q)= sum(u,i)(rui−<pu,qi>)2+ lambda1||pu||2+ lambda2||qi||2 rightarrow minP,Q,
Hier
λ1 ,
λ2 - L2-Regularisierungskoeffizienten für Benutzerdarstellungen
pu und Waren
qi entsprechend. Das Grundmodell für den Netflix-Wettbewerb war:
(2.3)
hatrui= mu+bu+bi+<pu,qi>,
(2.4)
J(P,Q)= sum(u,i)(rui− mu−bu−bi−<pu,qi>)2+ lambda1||pu||2+ lambda2||qi||2+ lambda3b2u+ lambda4b2i rightarrow minP,Q,
wo
µ ,
bu und
bi - Vorurteile für Bewertung, Benutzer bzw. Produkt. Das Modell (2.3) - (2.4) kann durch Hinzufügen einer impliziten Benutzerpräferenz verbessert werden. Im Netflix-Wettbewerbsbeispiel ist die explizite Antwort die vom Benutzer auf den Film „auf unsere Anfrage“ festgelegte Punktzahl und andere Informationen zur „Benutzerinteraktion mit dem Produkt“ (Anzeigen des Films, seiner Beschreibung, Bewertungen darauf; dh die implizite Antwort gibt keine implizite Antwort). direkte Informationen über die Bewertung des Films, zeigt aber gleichzeitig Interesse). Die implizite Antwortabrechnung ist im SVD ++ - Modell implementiert:
(2.5)
hatrui= mu+bu+bi+<pu+ frac1 sqrt sigmau sumj inS(u)yj, ,qi>,
wo
S(u) - eine Reihe von Objekten, mit denen der Benutzer implizit interagiert hat,
σu=|S(u)|,yj - Dimensionsdarstellung
k für ein Objekt aus
S(u) .
Faktorisierungsmaschinen (FM)
Wie in den Beispielen mit verschiedenen SVD-Modellen zu sehen ist, unterscheidet sich ein Modell vom anderen in der Menge der in der Bewertungsformel enthaltenen Begriffe. Darüber hinaus stellt die Erweiterung des Modells jedes Mal eine neue Aufgabe dar. Wir möchten, dass solche Änderungen (z. B. Hinzufügen einer neuen Art impliziter Antwort unter Berücksichtigung von Zeitparametern) einfach implementiert werden können, ohne den Modellimplementierungscode zu ändern. Die Modelle (2.1) - (2.5) können mit der folgenden Parametrisierung in einer praktischen universellen Form dargestellt werden. Wir repräsentieren den Benutzer und das Produkt als eine Reihe von Funktionen:
(2.6)
overlinexU=(xU1,xU2, Punkte,xUl) in mathbbRl,
(2.7)
overlinexI=(xI1,xI2, dots,xIm) in mathbbRm.
Abb. 1: Ein Beispiel für eine Merkmalsmatrix im Fall von CF.Wenn beispielsweise bei der kollaborativen Filterung (CF) nur Daten zur Interaktion von Benutzern und Produkten verwendet werden, sehen die Merkmalsvektoren wie ein One-Hot-Code aus (Abb. 1). Vektor einführen
overlinex=( overlinexU, overlinexI) Dann wird die Empfehlungsaufgabe auf Regressionsprobleme mit der Zielvariablen reduziert
rui ::
- Lineares Modell:
(2.8)
hlin( overlinex)=w0+ suml+mj=1wjxj
- Poly2:
(2.9)
hpoly2( overlinex)=w0+ suml+mj=1wjxj+ suml+mi=1 suml+mj=i+1wijxixj
- FM:
(2.10)
hFM( overlinex)=w0+ suml+mj=1wjxj+ suml+mi=1 suml+mj=i+1xixj< overlinevi, overlinevj>
wo
wj - Modellparameter,
vi Sind Dimensionsvektoren
k das Zeichen darstellen
i im latenten Raum
l und
m - die Anzahl der Zeichen des Benutzers bzw. des Produkts. Neben One-Hot-Codes können inhaltsbasierte Funktionen (Content-based, CB) als Zeichen dienen (Abb. 2), beispielsweise vektorisierte Beschreibungen von Produkten und Benutzerprofilen.
Abb. 2: Ein Beispiel für eine erweiterte Feature-Matrix.Das in [2] eingeführte FM-Modell ist eine Verallgemeinerung für (2.1) - (2.5), (2.8), (2.10). Das Wesentliche von FM ist, dass es die paarweise Interaktion von Merkmalen unter Verwendung eines skalaren Produkts berücksichtigt
< overlinevi, overlinevj> , ohne den Parameter
wij . Der Vorteil von FM gegenüber Poly2 ist eine signifikante Reduzierung der Anzahl der Parameter: für Vektoren
vi wir werden brauchen
(l+m)·k Parameter und für
wij wird benötigt
lmm Parameter. Bei
l und
m Bei großen Aufträgen werden beim ersten Ansatz deutlich weniger Parameter verwendet.
Bitte beachten Sie: Wenn das Trainingsset kein bestimmtes Paar enthält
(i,j) , dann der entsprechende Begriff mit
wij In Poly2 hat dies keinen Einfluss auf das Training des Modells, und die Bewertung erfolgt nur für den linearen Teil. Der Ansatz (2.10) ermöglicht es uns jedoch, Beziehungen durch andere Merkmale herzustellen. Mit anderen Worten, die Daten zu einer Interaktion helfen bei der Bewertung der Parameter von Attributen, die in diesem Beispiel nicht enthalten sind.
Auf Basis von FM wird ein sogenanntes Hybridmodell implementiert, bei dem CB-Attribute zu CF-Attributen hinzugefügt werden. Sie können damit das Problem eines Kaltstarts lösen, Benutzerpräferenzen berücksichtigen und personalisierte Empfehlungen abgeben.
Lightfm
Bei der populären Implementierung von
FM liegt der Schwerpunkt auf der Trennung zwischen den Eigenschaften des Benutzers und des Produkts. Matrizen dienen als Modellparameter
EU und
EI Einreichung von benutzerdefinierten und Produktmerkmalen:
(2.11)
EU= beginpmatrix overlineeU1 vdots overlineeUl endpmatrix,EI= beginpmatrix overlineeI1 vdots overlineeIm endpmatrix, overlineeUi in mathbbRk, overlineeIi in mathbbRk
sowie Offsets
overlinebU, overlinebI in mathbbRk . Benutzer- und Produktansichten verwenden:
(2.12)
overlinepU= overlinexU cdotEU= sumlj=1xUj cdot overlineeUj,
(2.13)
overlineqI= overlinexI cdotEI= summj=1xIj cdot overlineeIj,
Holen Sie sich die Paarbewertung
(u,i) ::
(2.14)
hatrui=< overlinepU, overlineqI>+< overlinexU, overlinebU>+< overlinexI, overlinebI>.
Verlustfunktionen
In unserem Fall ist es erforderlich, Produkte für einen bestimmten Benutzer zu bewerten, damit ein relevanteres Produkt eine höhere Bewertung als ein weniger relevantes hat. LightFM hat mehrere Verlustfunktionen:
- Logistik ist eine Implementierung, die ein Negativ erfordert, das in den meisten Aufgaben nicht explizit dargestellt wird.
- BPR [3] soll den Unterschied in den Bewertungen zwischen positiven und negativen Beispielen für einen bestimmten Benutzer maximieren. Negativ wird durch Bootstrap-Abtastung erhalten. Die im Algorithmus verwendete Qualitätsfunktion ähnelt der ROC-AUC.
- WARP [4] unterscheidet sich von BPR in der Methode der Stichprobe negativer Beispiele und der Verlustfunktion, die ebenfalls in der Rangfolge aufgeführt ist, optimiert jedoch gleichzeitig die Top-Empfehlungen für den Benutzer.
Praktische Umsetzung
Um Empfehlungen für eine bestimmte Zeit zu erstellen, wird eine parallele Implementierung auf Spark verwendet. Für jedes Geschäft wird eine unabhängige Aufgabe gestartet, deren Ausführung von luigi gesteuert wird.
Datenvorverarbeitung
Die Datenvorverarbeitung wird von automatisch skalierbaren Spark SQL-Tools durchgeführt. Die im endgültigen Modell ausgewählten Funktionen sind Textbeschreibungen von Waren und Katalogen mit Standardkonvertierungen.
Was hat uns bei der Interaktion mit Spark geholfen:
- Partitionierung vorbereiteter Daten (Matrix der Benutzer- und Produktinteraktionen, Zeichen dafür) nach Filialen. Auf diese Weise können Sie während der Trainingsphase beim Lesen von Daten aus HDFS Zeit sparen. Andernfalls muss jede Aufgabe Daten in den Spark-Speicher lesen und nach Speicher-ID filtern.
- Das Speichern / Empfangen von Daten zu / von Spark erfolgt in Teilen. Dies liegt an der Tatsache, dass während einer dieser Aktionen die Daten in den JVM-Speicher geladen werden. Warum nicht einfach den Speicher für die JVM erhöhen? Erstens verringert sich dann der für das Training des Modells verfügbare Speicher, und zweitens muss nichts in der JVM gespeichert werden. In diesem Fall fungiert es als temporärer Speicher.
Modelltraining
Das Modell für jedes Geschäft wird in einem eigenen Spark-Container trainiert, sodass Sie gleichzeitig eine beliebige Anzahl von Aufgaben für Geschäfte ausführen können, die nur durch Clusterressourcen begrenzt sind.
In LightFM fehlen Frühstoppmechanismen. Daher geben wir zusätzliche Ressourcen für zusätzliche Trainingsiterationen aus, wenn die Zielmetrik nicht erhöht wird. Wir haben AUC als Metrik gewählt, deren Beziehung zur Klickrate experimentell bestätigt wird.
Bezeichnen:
S - alle bekannten Interaktionen zwischen Benutzern und Produkten, dh Paare
(u,i) ,
I - viele aller Waren
i ,
U - viele aller Benutzer
u .
Für einen bestimmten Benutzer
u auch vorstellen
Iu=i∈I:(u,i)∈S - Viele Produkte, mit denen der Benutzer interagiert hat. Die AUC kann wie folgt berechnet werden [ref]:
(3.1)
AUC(u)= frac1| mathcalIu|| mathcalI setminus mathcalIu| sumi in mathcalIu sumj in mathcalI setminus mathcalIu delta( hatrui> hatruj),
(3.2)
AUC= frac1| mathcalU| sumu in mathcalUAUC(u).
In Formel (3.1) müssen wir die Bewertung für alle möglichen Paare berechnen
(u,i) (
u behoben) sowie Bewertungen für Artikel aus vergleichen
mathcalIu mit Bewertungen von
mathcalI setminus mathcalIu . Angesichts der Tatsache, dass der Benutzer mit dem spärlichen Teil des Sortiments interagiert, ist die Komplexität der Berechnung
O(| mathcalU|| mathcalI|) . Gleichzeitig kostet uns eine Ära des FM-Trainings
O(| mathcalU|) .
Daher haben wir die Berechnung der AUC geändert. Zunächst sollten Sie die Probe in ein Training aufteilen
mathcalStrain subset mathcalS und Validierung
mathcalSval subset mathcalS und
mathcalSval= mathcalS setminus mathcalStrain . Als Nächstes verwenden wir Stichproben, um viele Benutzer für die Validierung zu erstellen
\ mathcal {U} ^ {val} \ subset \ {u \ in \ mathcal {U}: (u, i) \ in \ mathcal {S} ^ {val} \} . Für Benutzer
u von
mathcalUval Die Elemente der positiven Klasse werden als viele betrachtet
\ mathcal {I} _u ^ {+} = \ {i \ in \ mathcal {I}: (u, i) \ in \ mathcal {S} ^ {val} \} ähnlich
mathcalIu . Als Elemente einer negativen Klasse nehmen wir eine Teilstichprobe
mathcalI−u subset mathcalI damit keine elemente aus
mathcalIu . Die Teilstichprobengröße kann proportional zur Größe genommen werden.
mathcalI+u , also
| mathcalI−u|=c cdot| mathcalI+u| . Dann ändern sich die Formeln (3.1), (3.2) zur Berechnung der AUC:
(3.3)
AUC(u)= frac1| mathcalI+u|| mathcalI−u| sumi in mathcalI+u sumj in mathcalI−u delta( hatrui> hatruj),
(3.4)
AUC= frac1| mathcalUval| sumu in mathcalUvalAUC(u).
Als Ergebnis erhalten wir eine konstante Zeit für die Berechnung der AUC, da wir nur einen festen Teil der Benutzer und der Mengen verwenden
mathcalI+u und
mathcalI−u habe eine kleine Größe. Der Lernprozess für das Geschäft stoppt, nachdem sich die AUC (3.4) nicht mehr verbessert hat.
Suche nach ähnlichen Objekten
Im Rahmen der Aufgabe item2item müssen Sie für jedes Element auswählen
n (oder Produkte, die so ähnlich wie möglich sind) zu denen, die die Klickbarkeit des Banners maximieren. Unsere Annahme: Kandidaten für das Banner müssen von oben betrachtet werden.
k am nächsten im Raum Einbettungen. Wir haben die folgenden Methoden zur Berechnung der „nächsten Nachbarn“ getestet: Scala + Spark, ANNOY, SCANNs, HNSW.
Für Scala + Spark für ein Geschäft mit 500.000 Objekten dauerte die Berechnung einer ehrlichen Kosinusmetrik 15 Minuten und eine erhebliche Menge an Clusterressourcen. In diesem Zusammenhang haben wir ungefähre Methoden zum Auffinden der nächsten Nachbarn getestet. Bei der Untersuchung der SCANNs-Methode variierten die folgenden Parameter:
bucketLimit
,
shouldSampleBuckets
,
NumHashes
und
setSignatureLength
. Die Ergebnisse erwiesen sich jedoch im Vergleich zu anderen Methoden als unbefriedigend (sehr unterschiedliche Objekte fielen in den Bucket). Die ANNOY- und HNSW-Algorithmen zeigten Ergebnisse, die mit einem ehrlichen Cosinus vergleichbar waren, arbeiteten jedoch viel schneller.
| 200k Produkte | 500k Waren | 2,2 Mio. Produkte |
Algorithmus | ANNOY | Hnsw | ANNOY | Hnsw | ANNOY | Hnsw |
Bauzeit Index (Sek.) | 59,45 | 8.64 | 258.02 | 25.44 | 1190,81 | 90,45 |
Gesamtzeit (Sek.) | 141,23 | 01/14 | 527,76 | 43,38 | 2081,57 | 150,92 |
Aufgrund der Tatsache, dass HNSW schneller als alle Algorithmen arbeitete, haben wir beschlossen, damit aufzuhören.
Wir suchen auch nach den nächsten Nachbarn im Spark-Container und schreiben das Ergebnis mit der entsprechenden Partitionierung in Hive.
Fazit
Rückruf: Wir verwenden WARP, um das Modell AUC für den frühen Stopp zu trainieren, und die endgültige Qualitätsbewertung wird mithilfe des A / B-Tests für den Live-Verkehr durchgeführt.
Wir glauben, dass an diesem Ort - bei der Organisation des Experiments und der Auswahl der optimalen Zusammensetzung des Banners - die Daten enden und die Wissenschaft beginnt. Hier lernen wir festzustellen, ob es sinnvoll ist, Empfehlungen für Produkte anzuzeigen, für die Retargeting funktioniert hat. genau wie viele Empfehlungen zu zeigen sind; wie viele Produkte angesehen usw. Wir werden in den folgenden Artikeln darüber sprechen.
Weitere Verbesserungen des Algorithmus - die Suche nach universellen Einbettungen, mit denen die Produkte aller Geschäfte in einem Raum platziert werden können - werden im Rahmen des am Anfang des Artikels beschriebenen Paradigmas durchgeführt.
Vielen Dank für Ihre Aufmerksamkeit!
Literatur
[1] Ricci F., Rokach L., Shapira B. Einführung in das Handbuch für Empfehlungssysteme
// Handbuch für Empfehlungssysteme. - Springer, Boston, MA, 2011 - S. 147160.
[2] Rendle S. Faktorisierungsmaschinen // 2010 IEEE International Conference on Data Mining. - IEEE, 2010 - S. 995-1000.
[3] Rendle S. et al. BPR: Bayesianisches personalisiertes Ranking aus implizitem Feedback
// Vorträge der fünfundzwanzigsten Konferenz über Unsicherheit in der künstlichen Intelligenz.
- AUAI Press, 2009 - S. 452-461.
[4] Weston J., Bengio S., Usunier N. Wsabie: Skalierung auf große Vokabeln Bildanmerkung // Zweiundzwanzigste internationale gemeinsame Konferenz über künstliche Intelligenz. - 2011.