[PYTHON] Choses à prendre en compte lors de la création d'un système de recommandation avec Item2Vec

Je suis Kubota de NTT Docomo. C'est la deuxième apparition.

Connaissez-vous la technologie appelée Item2Vec? Item2Vec est une technologie qui applique Word2Vec, qui acquiert des expressions distribuées de mots à partir de phrases, au système de recommandation. Plus précisément, lors de l'examen des recommandations sur les sites EC, nous avons acquis des expressions distribuées d'articles en utilisant des mots Word2Vec comme produits et des phrases comme un ensemble d'articles évalués par l'utilisateur et recommandés en fonction du degré de similitude entre les articles. J'ai envie de le faire.

Comme il est facile à mettre en œuvre, il y a de nombreux articles que j'ai essayés relativement, mais il y a quelques points à prendre en compte lorsque l'on considère réellement l'application au système de recommandation.

Politique de mise en œuvre Item2Vec

Il existe une bibliothèque d'analyse de sujets appelée gensim, qui facilite l'implémentation de Item2Vec. Vous pouvez entraîner le modèle en saisissant un ensemble d'éléments évalués par l'utilisateur sur une ligne et un fichier texte (cette fois, item_buskets.txt) séparés par des espaces pour chaque élément, comme illustré dans l'exemple suivant. Les paramètres seront expliqués plus tard. C'est vraiment simple!

from gensim.models import word2vec

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

Soyez prudent lorsque vous envisagez une application au système de recommandation

Vous pouvez facilement implémenter Item2Vec en utilisant gensim, une bibliothèque d'analyse de sujets. Cependant, comme gensim a été créé à l'origine avec l'application au traitement du langage naturel à l'esprit, il est nécessaire d'apporter des modifications en fonction du paramètre de problème lors de son application à un système de recommandation avec un paramètre de problème différent.

Différence entre Word2Vec et Item2Vec

À partir de ces différences, on suppose que les hyperparamètres de Word2Vec et Item2Vec seront différents.

Un article qui a testé cette hypothèse a été Word2vec appliqué à la recommandation: Hyperparameters Matter rapporté à recsys 2018. Les paramètres expérimentaux et les résultats d'évaluation suivants sont extraits de cet article.

Paramètres expérimentaux

La distribution est assez caractéristique selon l'ensemble de données. 30 Ensemble de données musical qui sont les données de last.fm et de données Deezer qui sont les données de Deezer Est un système de streaming musical, et il y a une différence considérable entre les chansons populaires et les chansons impopulaires. Il existe également une différence de popularité et d'impopularité en ce qui concerne les ensembles de données Click-Stream. D'autre part, le jeu de données E-commerce a une courbe plus douce que les deux précédents.

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.

Paramètres de recherche

Dans l'article ci-dessus, les paramètres suivants sont recherchés et évalués.

Paramètres Options correspondantes dans Word2Vec de 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

Probablement pas très familier, donc je pense que c'est $ t $ et $ \ alpha $. Le paramètre de sous-échantillonnage $ t $ est un paramètre lié au sous-échantillonnage des mots à haute fréquence. Dans le traitement du langage naturel, les mots à haute fréquence "a" et "le" sont sous-échantillonnés parce qu'ils n'ont pas beaucoup d'informations par rapport aux mots à basse fréquence. Dans la définition du problème du système de recommandation, les éléments populaires qui sont des mots fréquemment utilisés devraient avoir un effet considérable sur la précision du système de recommandation, il est donc compréhensible que l'influence des paramètres soit probablement élevée.

Ensuite, le paramètre de distribution d'échantillonnage négatif $ \ alpha $ est un paramètre qui modifie la forme de la distribution à échantillonner négativement. La valeur par défaut pour gensim est 0,75. $ \ Alpha = 1 $ entraîne un échantillonnage basé sur la fréquence des mots, $ \ alpha = 0 $ entraîne un échantillonnage aléatoire et les valeurs négatives facilitent l'échantillonnage des mots peu fréquents.

Dans l'article, il semble que les paramètres indiqués dans le tableau aient été étudiés, mais il semble que les performances n'ont pas été significativement affectées sauf pour les quatre paramètres en gras, et une évaluation détaillée est faite pour les quatre paramètres.

La figure ci-dessous montre les résultats de l'évaluation de l'article. Si vous regardez uniquement Item2Vec (SGNS prêt à l'emploi dans le tableau) implémenté avec les paramètres par défaut de gensim et Item2Vec (SGNS entièrement optimisé dans le tableau) avec les quatre paramètres comme paramètres optimaux, je pense que c'est correct pour le moment. item2vec結果.PNG

La performance des jeux de données musicaux (30 jeux de données Music et jeu de données Deezer), qui présentaient une grande différence entre les éléments populaires et les éléments impopulaires, est environ deux fois la valeur par défaut! L'ensemble de données Click-Stream est environ 10 fois plus précis, ce qui est incroyable.

L'article montre la relation entre la distribution et la précision de $ \ alpha $ (ns_exponent pour gensim), qui est un paramètre de la distribution d'échantillonnage négative dans un ensemble de données 30 Music. alpha.PNG Vous pouvez voir que le paramètre par défaut du gensim, 0,75, n'est pas le paramètre optimal. D'ailleurs, sur la base des résultats de cet article, ns_exponent, qui correspond à $ \ alpha $, a été ajouté comme option de gensim.

Résumé

C'était une introduction d'un article qui tentait de définir des hyper paramètres en fonction du problème. Étant donné que ○○ Vec est assez populaire, il peut être intéressant de rechercher une optimisation avec quels paramètres.

Recommended Posts

Choses à prendre en compte lors de la création d'un système de recommandation avec Item2Vec
[Attention] Lors de la création d'une image binaire (1 bit / pixel), faites attention au format de fichier!
Choses à noter lors de l'initialisation d'une liste en Python
Résumé des choses qui étaient pratiques lors de l'utilisation de pandas
Résumé des éléments à installer pour exécuter tf-pose-estimation
Enregistrement des actions à entreprendre lorsque google_image_download ne peut pas être utilisé
[Introduction à AWS] Mémorandum de création d'un serveur Web sur AWS
Soyez prudent lorsque vous attribuez une série en tant que colonne aux pandas.
Précautions lors de l'utilisation de Python avec AtCoder
Précautions à prendre lors de la construction d'un environnement PYTHON
Choses à garder à l'esprit lors de l'utilisation de cgi avec python.
Liste des bibliothèques à installer lors de l'installation de Python à l'aide de Pyenv
Voici un résumé des choses qui pourraient être utiles pour traiter des nombres complexes en Python
Un mémorandum d'utilisation de eigen3
Choses à surveiller lors de l'utilisation d'arguments par défaut en Python
J'ai essayé d'obtenir une base de données sur les courses de chevaux en utilisant Pandas
J'ai essayé de créer une expression régulière de "montant" en utilisant Python
Que faire lorsqu'une vidéo ne peut pas être lue par cv2.VideoCapture
J'ai essayé de créer une expression régulière de "temps" en utilisant Python
J'ai essayé de créer une expression régulière de "date" en utilisant Python
Convertissez un grand nombre de fichiers PDF en fichiers texte à l'aide de pdfminer
J'ai essayé d'obtenir une liste de noms AMI en utilisant Boto3
Comment enregistrer une partie d'une longue vidéo en utilisant OpenCV
Exporter les résultats de la recherche de publication dans un fichier à l'aide de l'API Mattermost
Essayez d'utiliser Elasticsearch comme base de votre système de questions et réponses