[PYTHON] Dinge, die beim Erstellen eines Empfehlungssystems mit Item2Vec zu beachten sind

Ich bin Kubota von NTT Docomo. Dies ist der zweite Auftritt.

Kennen Sie die Technologie Item2Vec? Item2Vec ist eine Technologie, die Word2Vec, das verteilte Ausdrücke von Wörtern aus Sätzen erfasst, auf das Empfehlungssystem anwendet. Insbesondere bei der Betrachtung der Empfehlung auf der EC-Website wird das Wort Word2Vec als Produkt verwendet, der Satz wird als vom Benutzer bewerteter Objektsatz verwendet, der verteilte Ausdruck des Artikels wird erfasst und die Empfehlung wird basierend auf der Ähnlichkeit zwischen den Artikeln abgegeben. Ich habe Lust dazu.

Da es einfach zu implementieren ist, gibt es viele Artikel, die ich relativ ausprobiert habe, aber es gibt einige Punkte, die Sie beachten sollten, wenn Sie tatsächlich über eine Anwendung auf das Empfehlungssystem nachdenken.

Implementierungsrichtlinie für Item2Vec

Es gibt eine Themenanalysebibliothek namens gensim, mit der Item2Vec einfach implementiert werden kann. Sie können das Modell trainieren, indem Sie eine Reihe von Elementen, die vom Benutzer ausgewertet werden, in eine Zeile und eine Textdatei (diesmal item_buskets.txt) eingeben, die durch Leerzeichen für jedes Element getrennt sind (siehe folgendes Beispiel). Die Parameter werden später erklärt. Es ist wirklich einfach!

from gensim.models import word2vec

sentences = word2vec.LineSentence('item_buskets.txt')
model = word2vec.Word2Vec(sentences)

Seien Sie vorsichtig, wenn Sie eine Anwendung auf das Empfehlungssystem in Betracht ziehen

Sie können Item2Vec einfach mit gensim implementieren, einer Bibliothek zur Themenanalyse. Da gensim ursprünglich für die Anwendung auf die Verarbeitung natürlicher Sprache erstellt wurde, müssen Änderungen entsprechend der Problemeinstellung vorgenommen werden, wenn es auf ein Empfehlungssystem mit einer anderen Problemeinstellung angewendet wird.

Unterschied zwischen Word2Vec und Item2Vec

Aufgrund dieser Unterschiede wird angenommen, dass sich die Hyperparameter von Word2Vec und Item2Vec unterscheiden.

Ein Artikel, der diese Hypothese testete, war Word2vec angewendet auf Empfehlung: Hyperparameters Matter, berichtet auf recsys 2018. Die folgenden experimentellen Einstellungen und Bewertungsergebnisse stammen aus diesem Artikel.

Experimentelle Einstellungen

Die Verteilung ist je nach Datensatz sehr charakteristisch. 30 Musikdatensatz mit den Daten von last.fm und Deezer-Datensatz mit den Daten von Deezer Ist ein Musik-Streaming-System, und es gibt einen erheblichen Unterschied zwischen populären Songs und unbeliebten Songs. Es gibt auch einen Unterschied in der Popularität und Unbeliebtheit in Bezug auf Click-Stream-Datensätze. Andererseits weist der E-Commerce-Datensatz eine sanftere Kurve auf als die beiden vorherigen.

NDCG@K = \left\{
\begin{array}{ll}
\frac{1}{\log_{2} (j+1)} & (\text{if} \ j^{th} \ \text{predicted item is correct}) \\
0 & (\text{otherwise})
\end{array}
\right.

Suchparameter

In dem oben gezeigten Artikel werden die folgenden Parameter gesucht und ausgewertet.

Parameter Entsprechende Optionen in Word2Vec von gensim
window size $ L $ window
epochs $ n $ iter
sub-sampling parameter $ t $ sample
negative sampling distribution parameter $ \alpha $ ns_exponent
embedding size size
the number of negative samples negative
learning rate alpha, min_alpha

Wahrscheinlich nicht sehr vertraut, also denke ich, dass es $ t $ und $ \ alpha $ sind. Der Sub-Sampling-Parameter $ t $ ist ein Parameter, der sich auf das Downsampling von Hochfrequenzwörtern bezieht. Bei der Verarbeitung natürlicher Sprache werden die hochfrequenten Wörter "a" und "the" heruntergesampelt, da sie im Vergleich zu den niederfrequenten Wörtern nicht viele Informationen enthalten. Bei der Problemstellung des Empfehlungssystems sollten beliebte Elemente, bei denen es sich häufig um Wörter handelt, einen erheblichen Einfluss auf die Genauigkeit des Empfehlungssystems haben. Daher ist es verständlich, dass der Einfluss der Parameter wahrscheinlich hoch ist.

Als nächstes ist der negative Abtastverteilungsparameter $ \ alpha $ ein Parameter, der die Form der Verteilung ändert, die negativ abgetastet werden soll. Der Standardwert für Gensim ist 0,75. $ \ Alpha = 1 $ bedeutet Abtastung basierend auf der Worthäufigkeit, $ \ alpha = 0 $ bedeutet Zufallsstichprobe und negative Werte erleichtern die Abtastung seltener.

In der Arbeit scheinen die in der Tabelle gezeigten Parameter untersucht worden zu sein, aber es scheint, dass die Leistung mit Ausnahme der vier fett gedruckten Parameter nicht wesentlich beeinträchtigt wurde und die vier Parameter im Detail bewertet werden.

Die folgende Abbildung zeigt die Bewertungsergebnisse des Papiers. Wenn Sie sich nur Item2Vec (Out-of-the-Box-SGNS in der Tabelle) ansehen, das mit den Standardparametern von gensim und Item2Vec (vollständig optimiertes SGNS in der Tabelle) mit den vier Parametern als optimalen Parametern implementiert wurde, denke ich, dass dies vorerst in Ordnung ist. item2vec結果.PNG

Die Leistung von Musikdatensätzen (30 Musikdatensätze und Deezer-Datensätze), die einen großen Unterschied zwischen beliebten und unbeliebten Elementen aufwiesen, ist etwa doppelt so hoch wie die Standardleistung! Der Click-Stream-Datensatz ist ungefähr zehnmal genauer, was erstaunlich ist.

Das Papier zeigt die Beziehung zwischen der Verteilung und Genauigkeit von $ \ alpha $ (ns_exponent für gensim), die ein Parameter der negativen Stichprobenverteilung in einem 30-Musik-Datensatz ist. alpha.PNG Sie können sehen, dass der Standardparameter von gensim, 0,75, nicht der optimale Parameter ist. Übrigens wurde basierend auf den Ergebnissen dieses Dokuments ns_exponent, das $ \ alpha $ entspricht, als Option von gensim hinzugefügt.

Zusammenfassung

Es war eine Einführung in ein Papier, in dem versucht wurde, Hyperparameter entsprechend der Problemeinstellung einzustellen. Da ○○ Vec sehr beliebt ist, kann es interessant sein, nach einer Optimierung mit welchen Parametern zu suchen.

Recommended Posts

Dinge, die beim Erstellen eines Empfehlungssystems mit Item2Vec zu beachten sind
[Achtung] Beachten Sie beim Erstellen eines Binärbilds (1 Bit / Pixel) das Dateiformat!
Beachten Sie beim Initialisieren einer Liste in Python
Zusammenfassung der Dinge, die bei der Verwendung von Pandas praktisch waren
Zusammenfassung der Dinge, die installiert werden müssen, um die tf-Pose-Schätzung auszuführen
Aufzeichnung der Aktionen, die ausgeführt werden müssen, wenn google_image_download nicht verwendet werden kann
[Einführung in AWS] Memorandum zum Erstellen eines Webservers auf AWS
Seien Sie vorsichtig, wenn Sie pandas.DataFrame Series als Spalte zuweisen
Vorsichtsmaßnahmen bei der Verwendung von Python mit AtCoder
Vorsichtsmaßnahmen, die beim Aufbau einer PYTHON-Umgebung beachtet werden müssen
Dinge, die Sie bei der Verwendung von CGI mit Python beachten sollten.
Liste der zu installierenden Bibliotheken bei der Installation von Python mit Pyenv
Hier finden Sie eine Zusammenfassung der Dinge, die beim Umgang mit komplexen Zahlen in Python hilfreich sein können
Ein Memorandum zur Verwendung von eigen3
Dinge, auf die Sie achten müssen, wenn Sie Standardargumente in Python verwenden
Ich habe versucht, mit Pandas eine Pferderenn-Datenbank zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck für "Betrag" zu erstellen
Was tun, wenn ein Video von cv2.VideoCapture nicht gelesen werden kann?
Ich habe versucht, mit Python einen regulären Ausdruck von "Zeit" zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck von "Datum" zu erstellen
Konvertieren Sie eine große Anzahl von PDF-Dateien mit pdfminer in Textdateien
Ich habe versucht, mit Boto3 eine Liste der AMI-Namen zu erhalten
So speichern Sie einen Teil eines langen Videos mit OpenCV
Geben Sie die Ergebnisse der Nachsuche mithilfe der Mattermost-API in eine Datei aus
Versuchen Sie, Elasticsearch als Grundlage für Ihr Frage- und Antwortsystem zu verwenden