Systèmes de recommandation - Un guide complet des modèles d'apprentissage automatique

Nov 25 2022
Exploiter les données pour aider les utilisateurs à découvrir de nouveaux contenus Systèmes de recommandation : pourquoi et comment ? Les systèmes de recommandation sont des algorithmes fournissant des suggestions personnalisées pour les éléments les plus pertinents pour chaque utilisateur. Avec la croissance massive des contenus en ligne disponibles, les utilisateurs ont été inondés de choix.

Tirer parti des données pour aider les utilisateurs à découvrir de nouveaux contenus

Photo de Javier Allegue Barros sur Unsplash

Systèmes de recommandation : pourquoi et comment ?

Les systèmes de recommandation sont des algorithmes fournissant des suggestions personnalisées pour les éléments les plus pertinents pour chaque utilisateur. Avec la croissance massive des contenus en ligne disponibles, les utilisateurs ont été inondés de choix. Il est donc crucial pour les plateformes web de proposer des recommandations d'articles à chaque utilisateur, afin d'augmenter la satisfaction et l'engagement des utilisateurs.

YouTube recommande des vidéos aux utilisateurs, pour les aider à découvrir et regarder du contenu pertinent pour eux au milieu d'un grand nombre de contenus disponibles. (Image de l'auteur)

La liste suivante montre des exemples de plates-formes Web bien connues avec un grand nombre de contenus disponibles , qui ont besoin de systèmes de recommandation efficaces pour maintenir l'intérêt des utilisateurs.

  1. Youtube . Chaque minute, les gens téléchargent 500 heures de vidéos , c'est-à-dire qu'il faudrait 82 ans à un utilisateur pour regarder toutes les vidéos téléchargées juste au cours de la dernière heure.
  2. Spotify . Les utilisateurs peuvent écouter plus de 80 millions de pistes de chansons et de podcasts .
  3. Amazone . Les utilisateurs peuvent acheter plus de 350 millions de produits différents .

Commentaires explicites vs commentaires implicites

Dans les systèmes de recommandation, les modèles d'apprentissage automatique sont utilisés pour prédire la note rᵤᵢ d'un utilisateur u sur un élément i . Au moment de l'inférence, nous recommandons à chaque utilisateur u les éléments l ayant la note prédite la plus élevée rᵤ .

Nous devons donc recueillir les retours des utilisateurs, afin d'avoir une vérité de terrain pour former et évaluer nos modèles. Une distinction importante doit être faite ici entre la rétroaction explicite et la rétroaction implicite .

Rétroaction explicite ou implicite pour les systèmes de recommandation. (Image de l'auteur)

Les commentaires explicites sont une note explicitement donnée par l'utilisateur pour exprimer sa satisfaction à l'égard d'un article. Exemples : nombre d'étoiles sur une échelle de 1 à 5 attribué après l'achat d'un produit, pouce levé/ diminué après avoir regardé une vidéo, etc. collecter car la plupart des utilisateurs n'écrivent généralement pas d'avis ou ne donnent pas d'évaluations explicites pour chaque article qu'ils achètent.

Les commentaires implicites , quant à eux, supposent que les interactions utilisateur-élément sont une indication des préférences. Exemples : historique d'achats/navigation d'un utilisateur, liste des chansons jouées par un utilisateur, etc. Ces retours sont extrêmement abondants , mais en même temps moins détaillés et plus bruyants (par exemple, quelqu'un peut acheter un produit en cadeau pour quelqu'un d'autre). Cependant, ce bruit devient négligeable par rapport à la taille même des données disponibles de ce type, et la plupart des systèmes de recommandation modernes ont tendance à s'appuyer sur une rétroaction implicite .

Matrice d'évaluation des éléments utilisateur pour les ensembles de données de rétroaction explicite et de rétroaction implicite. (Image de l'auteur)

Une fois que nous avons collecté des retours explicites ou implicites, nous pouvons créer la matrice de notation utilisateur-item rᵤᵢ . Pour un retour explicite, chaque entrée dans rᵤᵢ est une valeur numérique, par exemple rᵤᵢ = "étoiles attribuées par u au film i " ou "?" si l'utilisateur n'a pas évalué l' élément i . Pour les commentaires implicites, les valeurs de rᵤᵢ sont des valeurs booléennes représentant la présence ou l'absence d'interaction, par exemple rᵤᵢ = "l'utilisateur a-t-il regardé le film i ?". Notez que la matrice rᵤᵢest très rare, car les utilisateurs interagissent avec peu d'éléments parmi tous les contenus disponibles, et ils examinent encore moins d'éléments !

Approches de filtrage basées sur le contenu ou collaboratives

Le système de recommandation peut être classé selon le type d'informations utilisées pour prédire les préférences de l'utilisateur en tant que filtrage basé sur le contenu ou collaboratif.

Approches de filtrage basées sur le contenu ou collaboratives pour les systèmes de recommandation. (Image de l'auteur)

Approche basée sur le contenu

Les méthodes basées sur le contenu décrivent les utilisateurs et les éléments par leurs métadonnées connues . Chaque élément i est représenté par un ensemble de balises pertinentes - par exemple, les films de la plate-forme IMDb peuvent être étiquetés comme "action", "comédie", etc. Chaque utilisateur u est représenté par un profil utilisateur, qui peut être créé à partir d'informations utilisateur connues - par exemple le sexe et l'âge—ou de l'activité passée de l'utilisateur.

Pour former un modèle d'apprentissage automatique avec cette approche, nous pouvons utiliser un modèle k-NN . Par exemple, si nous savons que l'utilisateur u a acheté un article i , nous pouvons vous recommander les articles disponibles avec les caractéristiques les plus similaires à i .

L' avantage de cette approche est que les métadonnées des éléments sont connues à l'avance, nous pouvons donc également l'appliquer aux scénarios de démarrage à froid où un nouvel élément ou utilisateur est ajouté à la plate-forme et nous n'avons pas d'interactions utilisateur-élément pour former notre modèle. . Les inconvénients sont que nous n'utilisons pas l'ensemble complet des interactions utilisateur-élément connues (chaque utilisateur est traité indépendamment) et que nous devons connaître les informations de métadonnées pour chaque élément et utilisateur.

Approche de filtrage collaboratif

Les méthodes de filtrage collaboratif n'utilisent pas les métadonnées des éléments ou des utilisateurs, mais tentent plutôt de tirer parti des retours ou de l'historique des activités de tous les utilisateurs afin de prédire la note d'un utilisateur sur un élément donné en déduisant les interdépendances entre les utilisateurs et les éléments à partir des activités observées.

Pour former un modèle d'apprentissage automatique avec cette approche, nous essayons généralement de regrouper ou de factoriser la matrice de notation rᵤᵢ afin de faire des prédictions sur les paires non observées ( u,i ), c'est-à-dire où rᵤᵢ = "?". Dans la suite de cet article, nous présentons l' algorithme Matrix Factorization , qui est la méthode la plus populaire de cette classe.

L' avantage de cette approche est que l'ensemble des interactions utilisateur-élément (c'est-à-dire la matrice rᵤᵢ ) est utilisé, ce qui permet généralement d'obtenir une plus grande précision que l'utilisation de modèles basés sur le contenu. L' inconvénient de cette approche est qu'elle nécessite quelques interactions avec l'utilisateur avant que le modèle puisse être ajusté.

Approches hybrides

Enfin, il existe également des méthodes hybrides qui tentent d'utiliser à la fois les métadonnées connues et l'ensemble des interactions utilisateur-élément observées. Cette approche combine les avantages des méthodes de filtrage basées sur le contenu et collaboratives, et permet d'obtenir les meilleurs résultats. Plus loin dans cet article, nous présentons LightFM , qui est l'algorithme le plus populaire de cette classe de méthodes.

Filtrage collaboratif : factorisation matricielle

Les algorithmes de factorisation matricielle sont probablement les méthodes de filtrage collaboratif les plus populaires et les plus efficaces pour les systèmes de recommandation. La factorisation matricielle est un modèle à facteurs latents qui suppose que pour chaque utilisateur u et élément i , il existe des représentations vectorielles latentes pᵤ, qᵢ R ᶠ st rᵤᵢ peut être exprimé de manière unique — c'est-à-dire « factorisé » — en termes de pᵤ et qᵢ . La bibliothèque Python Surprise fournit d'excellentes implémentations de ces méthodes.

Factorisation matricielle pour une rétroaction explicite

L'idée la plus simple consiste à modéliser les interactions utilisateur-élément à l'aide d'un modèle linéaire . Pour apprendre les valeurs de pᵤ et qᵢ , nous pouvons minimiser une perte MSE régularisée sur l'ensemble K de paires ( u , i ) pour lesquelles rᵤᵢ est connu. L'algorithme ainsi obtenu est appelé factorisation matricielle probabiliste (PMF) .

Factorisation matricielle probabiliste : modèle pour rᵤᵢ et fonction de perte.

La fonction de perte peut être minimisée de deux manières différentes. La première approche consiste à utiliser la descente de gradient stochastique (SGD) . SGD est facile à implémenter, mais il peut avoir quelques problèmes car pᵤ et qᵢ sont tous deux inconnus et donc la fonction de perte n'est pas convexe. Pour résoudre ce problème, nous pouvons alternativement fixer la valeur pᵤ et qᵢ et obtenir un problème de régression linéaire convexe qui peut être facilement résolu avec les moindres carrés ordinaires (OLS) . Cette deuxième méthode est connue sous le nom de moindres carrés alternés (ALS) et permet une parallélisation et une accélération significatives.

L'algorithme PMF a ensuite été généralisé par l' algorithme de décomposition en valeurs singulières (SVD) , qui a introduit des termes de biais dans le modèle. Plus précisément, bᵤ et bᵢ mesurent les écarts de notation observés de l'utilisateur u et de l'élément i , respectivement, tandis que μ est la note moyenne globale. Ces termes expliquent souvent la plupart des notes observées rᵤᵢ , car certains éléments reçoivent largement des notes meilleures/moins bonnes, et certains utilisateurs sont systématiquement plus/moins généreux avec leurs notes.

Algorithme SVD , une généralisation de la factorisation matricielle probabiliste.

Factorisation matricielle pour rétroaction implicite

La méthode SVD peut être adaptée aux jeux de données de rétroaction implicite . L'idée est de considérer la rétroaction implicite comme une mesure indirecte de la confiance . Supposons que le retour implicite tᵤᵢ mesure le pourcentage de film i que l'utilisateur u a regardé — par exemple tᵤᵢ = 0 signifie que vous n'avez jamais regardé i , tᵤᵢ = 0,1 signifie qu'il n'en a regardé que 10 %, tᵤᵢ = 2 signifie qu'il a regardé ça deux fois. Intuitivement, un utilisateur est plus susceptible d'être intéressé par un film qu'il a regardé deux fois, plutôt que par un film qu'il n'a jamais regardé. Nous définissons donc une matrice de confiance cᵤᵢ et une matrice de notation rᵤᵢ comme suit.

Matrice de confiance et matrice de notation pour les commentaires implicites.

Ensuite, nous pouvons modéliser le rᵤᵢ observé en utilisant le même modèle linéaire utilisé pour SVD, mais avec une fonction de perte légèrement différente. Tout d'abord, nous calculons la perte sur toutes les paires ( u , i ) - contrairement au cas explicite, si l'utilisateur u n'a jamais interagi avec i, nous avons rᵤᵢ = 0 au lieu de rᵤᵢ = "?" . Deuxièmement, nous pondérons chaque terme de perte par la confiance cᵤᵢ que u aime i.

Fonction de perte pour SVD pour rétroaction implicite.

Enfin, l' algorithme SVD++ peut être utilisé lorsque nous avons accès à des rétroactions explicites et implicites. Cela peut être très utile, car généralement les utilisateurs interagissent avec de nombreux éléments (= feedback implicite) mais n'évaluent qu'un petit sous-ensemble d'entre eux (= feedback explicite). Notons, pour chaque utilisateur u , l'ensemble N(u) d'éléments avec lesquels u a interagi. Ensuite, nous supposons qu'une interaction implicite avec un item j est associée à un nouveau vecteur latent zⱼR . L'algorithme SVD++ modifie le modèle linéaire de SVD en incluant dans la représentation utilisateur une somme pondérée de ces facteurs latents zⱼ.

SVD++ pour une rétroaction mixte (explicite + implicite)

Approche hybride : LightFM

Les méthodes de filtrage collaboratives basées sur la factorisation matricielle produisent souvent d'excellents résultats, mais dans les scénarios de démarrage à froid - où peu ou pas de données d'interaction sont disponibles pour les nouveaux éléments et les utilisateurs - elles ne peuvent pas faire de bonnes prédictions car elles manquent de données pour estimer les facteurs latents. Les approches hybrides résolvent ce problème en exploitant les métadonnées d'éléments ou d'utilisateurs connus afin d'améliorer le modèle de factorisation matricielle. La bibliothèque Python LightFM implémente l'un des algorithmes hybrides les plus populaires.

Dans LightFM, nous supposons que pour chaque utilisateur u nous avons collecté un ensemble d'annotations de balises Aᵁ(u) — par exemple « homme » , « âge < 30 » , … — et de même chaque élément i a un ensemble d'annotations Aᴵ(i) — eg “price > 100 $” , “book” , … Puis on modélise chaque user tag par un facteur de latence xᵁₐ R ᶠ et par un terme de biais bᵁₐ R , et on suppose que la représentation vectorielle user pᵤ et son biais associé bᵤ peut être exprimé simplement comme la somme de ces termes xᵁₐet bᵁₐ , respectivement. Nous adoptons la même approche pour les balises d'articles, en utilisant les facteurs latents xᴵₐ ∈ Rᶠ et les termes de biais bᴵₐ ∈ R. Une fois que nous avons défini pᵤ, qᵢ, bᵤ, bᵢ à l'aide de ces formules, nous pouvons utiliser le même modèle linéaire de SVD pour décrire la relation entre ces termes et rᵤᵢ .

LightFM : les intégrations et biais utilisateur/élément sont la somme des vecteurs latents associés à chaque utilisateur/élément.

Notez qu'il existe trois cas intéressants de cette approche hybride de LightFM.

  1. Démarrage à froid. Si nous avons un nouvel élément i avec des balises connues Aᴵ(i) , alors nous pouvons utiliser les vecteurs latents xᴵₐ (obtenus en ajustant notre modèle sur les données précédentes) pour calculer son encastrement qᵢ , et donc estimer pour tout utilisateur u sa note rᵤᵢ .
  2. Aucune balise disponible. Si nous n'avons pas de métadonnées connues pour les éléments ou les utilisateurs, la seule annotation que nous pouvons utiliser est une fonction d'indicateur, c'est-à-dire une annotation différente a pour chaque utilisateur et chaque élément. Ensuite, les matrices de caractéristiques des utilisateurs et des éléments sont des matrices d'identité, et LightFM se réduit à une méthode de filtrage collaboratif classique telle que SVD.
  3. Basé sur le contenu ou hybride. Si nous n'utilisions que des balises d'utilisateur ou d'élément sans annotations d'indicateur, LightFM serait presque un modèle basé sur le contenu. Ainsi, en pratique, pour tirer parti des interactions utilisateur-élément, nous ajoutons également aux balises connues une annotation d'indicateur différente de chaque utilisateur et élément.
  • Les systèmes de recommandation s'appuient sur des algorithmes d'apprentissage automatique pour aider les utilisateurs submergés de choix à découvrir des contenus pertinents.
  • Feedback explicite vs implicite : le premier est plus facile à exploiter, mais le second est bien plus abondant.
  • Les modèles basés sur le contenu fonctionnent bien dans les scénarios de démarrage à froid, mais nécessitent de connaître les métadonnées de l'utilisateur et de l'élément .
  • Les modèles de filtrage collaboratif utilisent généralement la factorisation matricielle : PMF, SVD, SVD pour la rétroaction implicite, SVD++.
  • Les modèles hybrides tirent le meilleur parti du filtrage basé sur le contenu et collaboratif. LightFM est un excellent exemple de cette approche.
  • Wikipédia, système de recommandation .
  • "Surprise", documentation du package Python .
  • (S. Funk 2006), Mise à jour Netflix : essayez ceci à la maison.
  • (R. Salakhutdinov 2007), Factorisation matricielle probabiliste.
  • ( Y. Hu 2008), Filtrage collaboratif pour les ensembles de données de rétroaction implicite .
  • (Y. Koren 2009), Techniques de factorisation matricielle pour les systèmes de recommandation .
  • (Y. Koren 2008) La factorisation rencontre le voisinage : un modèle de filtrage collaboratif à multiples facettes.
  • ( M. Kula 2015), Intégrations de métadonnées pour les recommandations de démarrage à froid d'utilisateurs et d'éléments .