🚀 Essayez Zilliz Cloud, la version entièrement gérée de Milvus, gratuitement—découvrez des performances 10x plus rapides ! Essayez maintenant>>

milvus-logo
LFAI
  • Home
  • Blog
  • Comment fonctionnent les systèmes de recommandation ?

Comment fonctionnent les systèmes de recommandation ?

  • Scenarios
December 01, 2020
Shiyu Chen

Les systèmes de recommandation sont alimentés par des algorithmes qui, à leurs débuts, aidaient les humains à trier les courriers électroniques indésirables. En 1990, l'inventeur Doug Terry a utilisé un algorithme de filtrage collaboratif pour trier les courriers électroniques souhaitables des courriers indésirables. En "aimant" ou en "détestant" simplement un courriel, en collaboration avec d'autres personnes faisant de même avec un contenu similaire, les utilisateurs pouvaient rapidement entraîner les ordinateurs à déterminer ce qu'il fallait faire passer dans la boîte de réception de l'utilisateur et ce qu'il fallait séquestrer dans le dossier des courriers indésirables.

D'une manière générale, les systèmes de recommandation sont des algorithmes qui font des suggestions pertinentes aux utilisateurs. Il peut s'agir de films à regarder, de livres à lire, de produits à acheter ou de toute autre chose en fonction du scénario ou du secteur d'activité. Ces algorithmes nous entourent, influençant le contenu que nous consommons et les produits que nous achetons auprès de grandes entreprises technologiques telles que Youtube, Amazon, Netflix et bien d'autres.

Des systèmes de recommandation bien conçus peuvent être des générateurs de revenus essentiels, des réducteurs de coûts et des facteurs de différenciation concurrentielle. Grâce à la technologie open-source et à la baisse des coûts de calcul, les systèmes de recommandation personnalisés n'ont jamais été aussi accessibles. Cet article explique comment utiliser Milvus, une base de données vectorielle open-source, PinSage, un réseau neuronal convolutif graphique (GCN), Deep Graph Library (DGL), un package python évolutif pour l'apprentissage profond sur les graphes, et les ensembles de données MovieLens pour construire un système de recommandation basé sur les graphes.

Aller à :

Comment fonctionnent les systèmes de recommandation ?

Il existe deux approches courantes pour créer des systèmes de recommandation : le filtrage collaboratif et le filtrage basé sur le contenu. La plupart des développeurs utilisent l'une ou l'autre de ces méthodes, ou les deux, et, bien que les systèmes de recommandation puissent varier en complexité et en construction, ils comprennent généralement trois éléments de base :

  1. Le modèle de l'utilisateur : Les systèmes de recommandation nécessitent la modélisation des caractéristiques, des préférences et des besoins de l'utilisateur. De nombreux systèmes de recommandation fondent leurs suggestions sur les données implicites ou explicites fournies par les utilisateurs au niveau de l'élément.
  2. Modèle d'objet : Les systèmes de recommandation modélisent également les objets afin de faire des recommandations basées sur les portraits des utilisateurs.
  3. Algorithme de recommandation : L'élément central de tout système de recommandation est l'algorithme qui alimente ses recommandations. Les algorithmes couramment utilisés comprennent le filtrage collaboratif, la modélisation sémantique implicite, la modélisation basée sur les graphes, la recommandation combinée, etc.

À un niveau élevé, les systèmes de recommandation qui s'appuient sur le filtrage collaboratif construisent un modèle à partir du comportement passé de l'utilisateur (y compris les données sur le comportement d'utilisateurs similaires) pour prédire ce qui pourrait intéresser l'utilisateur. Les systèmes qui s'appuient sur le filtrage basé sur le contenu utilisent des étiquettes discrètes et prédéfinies basées sur les caractéristiques des articles pour recommander des articles similaires.

Un exemple de filtrage collaboratif serait une station de radio personnalisée sur Spotify, basée sur l'historique d'écoute de l'utilisateur, ses centres d'intérêt, sa bibliothèque musicale, etc. La station diffuse de la musique que l'utilisateur n'a pas sauvegardée ou pour laquelle il n'a pas manifesté d'intérêt, mais que d'autres utilisateurs aux goûts similaires ont souvent écoutée. Un exemple de filtrage basé sur le contenu serait une station de radio basée sur une chanson ou un artiste spécifique qui utiliserait les attributs de l'entrée pour recommander de la musique similaire.

Outils de création d'un système de recommandation

Dans cet exemple, la création d'un système de recommandation basé sur un graphe à partir de zéro dépend des outils suivants :

Pinsage : Un réseau convolutif graphique

PinSage est un réseau convolutionnel de graphe à marche aléatoire capable d'apprendre des encastrements pour les nœuds dans des graphes à l'échelle du web contenant des milliards d'objets. Le réseau a été développé par Pinterest, une société de tableaux d'épingles en ligne, pour offrir des recommandations visuelles thématiques à ses utilisateurs.

Les utilisateurs de Pinterest peuvent "épingler" des contenus qui les intéressent sur des "tableaux", qui sont des collections de contenus épinglés. Avec plus de 478 millions d' utilisateurs actifs mensuels (MAU) et plus de 240 milliards d' objets sauvegardés, l'entreprise dispose d'une immense quantité de données d'utilisateurs qu'elle doit développer de nouvelles technologies pour suivre.

1.png 1.png

PinSage utilise les graphes bipartites des cartes d'épingles pour générer des encastrements de haute qualité à partir des épingles, qui sont utilisés pour recommander aux utilisateurs des contenus visuellement similaires. Contrairement aux algorithmes GCN traditionnels, qui effectuent des convolutions sur les matrices de caractéristiques et le graphe complet, PinSage échantillonne les nœuds/épingles proches et effectue des convolutions locales plus efficaces grâce à la construction dynamique de graphes de calcul.

L'exécution de convolutions sur l'ensemble du voisinage d'un nœud se traduira par un graphe de calcul massif. Pour réduire les besoins en ressources, les algorithmes GCN traditionnels mettent à jour la représentation d'un nœud en agrégeant les informations de son voisinage de k-sauts. PinSage simule la marche aléatoire pour définir le contenu fréquemment visité comme voisinage clé, puis construit une convolution basée sur ce contenu.

Comme il y a souvent des chevauchements dans les voisinages à sauts multiples, la convolution locale sur les nœuds donne lieu à des calculs répétés. Pour éviter cela, à chaque étape d'agrégation, PinSage cartographie tous les nœuds sans calcul répété, puis les relie aux nœuds de niveau supérieur correspondants, et enfin récupère les embeddings des nœuds de niveau supérieur.

Bibliothèque de graphes profonds : Un package python évolutif pour l'apprentissage profond sur les graphes

dgl-framework-building-graph-based-recommender-milvus.png dgl-framework-building-graph-based-recommender-milvus.png

Deep Graph Library (DGL ) est un package Python conçu pour construire des modèles de réseaux neuronaux basés sur les graphes au-dessus des frameworks d'apprentissage profond existants (par exemple, PyTorch, MXNet, Gluon, et plus encore). DGL comprend une interface backend conviviale, facilitant l'implantation dans des cadres basés sur des tenseurs et qui prennent en charge la génération automatique. L'algorithme PinSage mentionné ci-dessus est optimisé pour être utilisé avec DGL et PyTorch.

how-does-milvus-work.png Comment fonctionne Milvus.png

Milvus est une base de données vectorielles open-source conçue pour la recherche de similarités vectorielles et les applications d'intelligence artificielle (IA). À un niveau élevé, l'utilisation de Milvus pour la recherche de similarités fonctionne comme suit :

  1. Des modèles d'apprentissage profond sont utilisés pour convertir des données non structurées en vecteurs de caractéristiques, qui sont importés dans Milvus.
  2. Milvus stocke et indexe les vecteurs de caractéristiques.
  3. Sur demande, Milvus recherche et renvoie les vecteurs les plus similaires à un vecteur d'entrée.

Création d'un système de recommandation basé sur un graphe avec Milvus

beike-intelligent-house-platform-diagram.jpg beike-intelligent-house-platform-diagramme.jpg

3-building-graph-based-recommender-system.png 3-construction d'un système de recommandation basé sur un graphe.png

La construction d'un système de recommandation basé sur un graphe avec Milvus comprend les étapes suivantes :

Étape 1 : Prétraitement des données

Le prétraitement des données consiste à transformer les données brutes en un format plus facilement compréhensible. Cet exemple utilise les ensembles de données ouvertes MovieLens[5] (m1-1m), qui contiennent 1 000 000 d'évaluations de 4 000 films fournies par 6 000 utilisateurs. Ces données ont été collectées par GroupLens et comprennent des descriptions de films, des évaluations de films et des caractéristiques d'utilisateurs.

Notez que les ensembles de données MovieLens utilisés dans cet exemple ne nécessitent qu'un nettoyage ou une organisation minimale des données. Cependant, si vous utilisez d'autres ensembles de données, votre kilométrage peut varier.

Pour commencer à construire un système de recommandation, créez un graphe bipartite utilisateur-film à des fins de classification en utilisant les données historiques utilisateur-film de l'ensemble de données MovieLens.

graph_builder = PandasGraphBuilder()
graph_builder.add_entities(users, 'user_id', 'user')
graph_builder.add_entities(movies_categorical, 'movie_id', 'movie')
graph_builder.add_binary_relations(ratings, 'user_id', 'movie_id', 'watched')
graph_builder.add_binary_relations(ratings, 'movie_id', 'user_id', 'watched-by')
g = graph_builder.build()

Étape 2 : Entraînement du modèle avec PinSage

Les vecteurs d'intégration des épingles générés à l'aide du modèle PinSage sont des vecteurs de caractéristiques des informations cinématographiques acquises. Créez un modèle PinSage basé sur le graphe bipartite g et les dimensions personnalisées des vecteurs de caractéristiques des films (256-d par défaut). Entraînez ensuite le modèle avec PyTorch pour obtenir les encastrements h_item de 4 000 films.

# Define the model
model = PinSAGEModel(g, item_ntype, textset, args.hidden_dims, args.num_layers).to(device)
opt = torch.optim.Adam(model.parameters(), lr=args.lr)
# Get the item embeddings
for blocks in dataloader_test:
   for i in range(len(blocks)):
   blocks[i] = blocks[i].to(device)
   h_item_batches.append(model.get_repr(blocks))
h_item = torch.cat(h_item_batches, 0)

Étape 3 : Chargement des données

Chargez les encastrements de films h_item générés par le modèle PinSage dans Milvus, qui renverra les ID correspondants. Importez les ID et les informations correspondantes sur les films dans MySQL.

# Load data to Milvus and MySQL
status, ids = milvus.insert(milvus_table, h_item)
load_movies_to_mysql(milvus_table, ids_info)

Obtenez les embeddings correspondants dans Milvus sur la base des ID des films, puis utilisez Milvus pour effectuer une recherche de similarité avec ces embeddings. Ensuite, identifiez les informations correspondantes sur les films dans une base de données MySQL.

# Get embeddings that users like
_, user_like_vectors = milvus.get_entity_by_id(milvus_table, ids)
# Get the information with similar movies
_, ids = milvus.search(param = {milvus_table, user_like_vectors, top_k})
sql = "select * from " + movies_table + " where milvus_id=" + ids + ";"
results = cursor.execute(sql).fetchall()

Étape 5 : Obtenir des recommandations

Le système va maintenant recommander les films les plus similaires aux requêtes de recherche des utilisateurs. Il s'agit du processus général de construction d'un système de recommandation. Pour tester et déployer rapidement des systèmes de recommandation et d'autres applications d'IA, essayez le Milvus bootcamp.

Milvus peut faire plus que des systèmes de recommandation

Milvus est un outil puissant capable d'alimenter une vaste gamme d'applications d'intelligence artificielle et de recherche par similarité vectorielle. Pour en savoir plus sur le projet, consultez les ressources suivantes :

  • Lisez notre blog.
  • Interagissez avec notre communauté open-source sur Slack.
  • Utilisez ou contribuez à la base de données vectorielles la plus populaire au monde sur GitHub.

Like the article? Spread the word

Continuer à Lire