Revue d'article de Deep Retrieval: Learning A Retrievable Structure for Large-Scale Recommendations
J'ai récemment lu un article de personnes de TikTok intitulé " Récupération en profondeur : apprentissage d'une structure récupérable pour les recommandations à grande échelle ".
Les systèmes de recommandation doivent pouvoir obtenir rapidement des candidats relativement pertinents, qui sont ensuite reclassés pour produire le résultat final.
En règle générale, un modèle de produit interne (comme celui reçu de l'apprentissage métrique) est utilisé pour la génération de candidats, suivi d'un ANN (approximative plus proche voisin ; une option populaire est FAISS ).
Dans cet article, cependant, les auteurs veulent montrer comment la récupération peut être effectuée directement par le biais d'interactions élément-utilisateur sans faire d'hypothèses sur la nature euclidienne de l'espace et la proximité des entités qu'il contient (ce qui, à mon avis, n'est pas vraiment un problème, étant donné que dans l'apprentissage métrique, nous nous entraînons spécifiquement pour ce type de représentation).
Les auteurs entraînent un modèle avec des couches D. Chaque couche consiste en un MLP avec une fonction softmax sur K nœuds qui génère la probabilité d'appartenir à l'un des K clusters. L'entrée de la couche D1 est une intégration de l'utilisateur (l'intégration prend en compte ses actions précédentes, et un réseau de neurones récurrent avec GRU est utilisé pour projeter la séquence de comportement sur une dimension fixe intégrée comme entrée). La cible est le groupe de l'élément avec lequel l'utilisateur a interagi (par exemple, cliqué ou acheté). La sortie de D1, appelons-la K1, est ensuite concaténée avec l'intégration utilisateur et utilisée comme entrée pour D2. Une sortie K2 est ensuite concaténée avec K1 et l'intégration de l'utilisateur et utilisée comme entrée pour D3.
Tout utilisateur a potentiellement K^D chemins différents. Par exemple, s'il y a 30 clusters et trois couches, le modèle peut générer le chemin suivant pour l'utilisateur X : 1–10–15, ce qui signifie le cluster 1 parmi les 30 premiers, le cluster 10 parmi les 30 suivants et le cluster 15 parmi les suivants. 30. De plus, comme nous avons une distribution, nous pouvons aller plus loin et prendre les 3 premiers de chaque couche, ce qui donne n^D (27 dans notre cas) chemins différents au lieu de celui d'origine. Puisque nous nous entraînons sur les interactions utilisateur-élément, nous pouvons obtenir des chemins pour l'utilisateur et l'élément.
Une question se pose : comment un article peut-il appartenir à différents clusters ? Par exemple, un article lié à un kebab pourrait appartenir à un cluster "nourriture", tandis qu'un article lié à des fleurs pourrait appartenir à un cluster "cadeau". Cependant, un article lié au chocolat ou aux gâteaux pourrait appartenir aux deux groupes afin d'être recommandé aux utilisateurs intéressés par la nourriture ou les cadeaux.
C'est en fait l'un des avantages par rapport aux modèles profonds basés sur des arbres.
La question raisonnable est de savoir comment déterminer les clusters initiaux ? D'accord, nous avons des incorporations d'utilisateurs et des interactions utilisateur-élément, mais où obtenons-nous des étiquettes pour K ? Nous pouvons répartir au hasard et allumer la machine EM .
Dans la première itération, nous les distribuons au hasard et entraînons le modèle ; ensuite, nous réentraînons le mappage de l'élément au cluster pour maximiser la sortie du modèle.
Comment la récupération en profondeur est-elle appliquée pendant l'inférence ?
- Nous entrons l'incorporation de l'utilisateur -> nous obtenons N chemins (l'algorithme glouton produit un chemin)
- Nous rassemblons tous les éléments qui se trouvent dans ces chemins
- Nous les faisons passer par le reclassement intermédiaire
I. Malgré le fait que DR (Deep Retrieval) produit beaucoup moins d'éléments que tous, il y en a encore beaucoup, donc il est également formé avec un reclassement pour produire les meilleurs candidats (ce n'est toujours pas le reclassement final !)
II. Le mappage aux clusters est discret, il ne peut donc pas être mis à jour avec des méthodes de gradient (d'où l'utilisation d'EM)
III. Ils ajoutent une pénalité pour l'ajout d'un autre élément (passant le même chemin) au chemin. Sinon, il y a un risque que tous les éléments tombent dans un chemin, et ils ont utilisé une pénalité sous la forme de c⁴/4 où c est le nombre d'éléments dans le chemin
IIII. Ils ont mis à jour le modèle à partir du flux de données entrant - cela a affecté certaines choses, telles que l'étape M dans EM. Ils ont également utilisé une décroissance exponentielle avec un coefficient de 0,999
Métrique
Bien sûr, n'importe quel article montrera qu'ils sont meilleurs, à la fois hors ligne et en ligne, mais pour une raison quelconque, il y a un faible rappel partout. Par exemple, Recall@200 est d'environ 13 % — ce qui soulève des questions ; peut-être que si nous allons plus loin - d'autres algorithmes ne sont pas pires. Le SOTA Recall@200 pour l'ensemble de données mentionné est d'environ 28 % (https://paperswithcode.com/sota/recommendation-systems-on-amazon-books)
Les résultats du test A/B sont présentés sous forme d'estimation ponctuelle, ce qui soulève également de nombreuses questions car des intervalles de confiance ont été donnés pour les tests hors ligne, mais pas en ligne.
L'approche semble intéressante , mais ce serait bien de voir une étude d'ablation plus détaillée et des résultats sur un nombre plus important d'ensembles de données.
Il est surprenant de voir la comparaison sur les ensembles de données de l'objectif du film et des livres Amazon, puis un seul test A / B dans TikTok (ce qui est une configuration assez différente) sans intervalles de confiance et un manque de compréhension de ce qu'un système concurrent laisse en question.
![Qu'est-ce qu'une liste liée, de toute façon? [Partie 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































