Construire un système de recommandation basé sur les graphes avec Milvus, PinSage, DGL et les jeux de données MovieLens
Les systèmes de recommandation sont alimentés par des algorithmes qui ont des débuts modestes en aidant les humains à faire le tri dans les e-mails indésirables. En 1990, l’inventeur Doug Terry a utilisé un algorithme de filtrage collaboratif pour distinguer les e-mails souhaitables des courriers indésirables. En se contentant d’« aimer » ou de « détester » un e-mail, en collaboration avec d’autres personnes faisant la même chose sur des contenus de courrier similaires, les utilisateurs pouvaient rapidement entraîner les ordinateurs à déterminer ce qu’il fallait transmettre à la boîte de réception d’un utilisateur — et ce qu’il fallait isoler dans le dossier des courriers indésirables.
Dans un sens général, les systèmes de recommandation sont des algorithmes qui font des suggestions pertinentes aux utilisateurs. Les suggestions peuvent être des films à regarder, des livres à lire, des produits à acheter, ou toute autre chose selon le scénario ou le secteur. Ces algorithmes sont partout autour de nous, 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 de graphes (GCN) ; deep graph library (DGL), un package python évolutif pour l’apprentissage profond sur les graphes ; et les jeux de données MovieLens pour créer un système de recommandation basé sur les graphes.
Accéder à :
- Comment fonctionnent les systèmes de recommandation ?
- Outils pour créer un système de recommandation
- Créer un système de recommandation basé sur les graphes avec Milvus
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 conception, ils comprennent généralement trois éléments fondamentaux :
- Modèle utilisateur : Les systèmes de recommandation nécessitent de modéliser les caractéristiques, les préférences et les besoins des utilisateurs. De nombreux systèmes de recommandation fondent leurs suggestions sur des entrées implicites ou explicites au niveau des éléments de la part des utilisateurs.
- Modèle d’objet : Les systèmes de recommandation modélisent également les éléments afin de formuler des recommandations d’éléments sur la base de portraits d’utilisateurs.
- Algorithme de recommandation : Le composant 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, et plus encore.
À un niveau général, les systèmes de recommandation qui reposent sur le filtrage collaboratif construisent un modèle à partir du comportement passé des utilisateurs (y compris les entrées de comportement d’utilisateurs similaires) afin de prédire ce qui pourrait intéresser un utilisateur. Les systèmes qui reposent sur le filtrage basé sur le contenu utilisent des balises discrètes et prédéfinies, fondées sur les caractéristiques des éléments, pour recommander des éléments similaires.
Un exemple de filtrage collaboratif serait une station de radio personnalisée sur Spotify, basée sur l’historique d’écoute, les centres d’intérêt, la bibliothèque musicale et plus encore d’un utilisateur. La station diffuse de la musique que l’utilisateur n’a pas enregistrée ou pour laquelle il n’a pas autrement exprimé d’intérêt, mais que d’autres utilisateurs aux goûts similaires écoutent souvent. Un exemple de filtrage basé sur le contenu serait une station de radio basée sur une chanson ou un artiste spécifique, qui utilise les attributs de l’entrée pour recommander une musique similaire.
Outils pour créer un système de recommandation
Dans cet exemple, créer de zéro un système de recommandation basé sur les graphes dépend des outils suivants :
Pinsage : Un réseau convolutif de graphes
PinSage est un réseau neuronal convolutif sur graphe à marches aléatoires capable d’apprendre des embeddings pour des nœuds dans des graphes à l’échelle du web contenant des milliards d’objets. Le réseau a été développé par Pinterest, une entreprise de tableaux d’affichage en ligne, afin d’offrir des recommandations visuelles thématiques à ses utilisateurs.
Les utilisateurs de Pinterest peuvent « épingler » du contenu qui les intéresse 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 enregistrés, l’entreprise dispose d’une quantité immense de données utilisateur, ce qui l’oblige à développer de nouvelles technologies pour suivre le rythme.
Graphe biparti pins-tableaux.
PinSage utilise des graphes bipartis pins-tableaux pour générer des embeddings de haute qualité à partir des pins, utilisés pour recommander aux utilisateurs du contenu visuellement similaire. Contrairement aux algorithmes GCN traditionnels, qui effectuent des convolutions sur les matrices de caractéristiques et sur le graphe complet, PinSage échantillonne les nœuds/Pins voisins et effectue des convolutions locales plus efficaces grâce à la construction dynamique de graphes de calcul.
Effectuer des convolutions sur l’ensemble du voisinage d’un nœud aboutira à 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 à k sauts. PinSage simule une marche aléatoire pour définir le contenu fréquemment visité comme voisinage clé, puis construit une convolution à partir de celui-ci.
Comme il existe souvent un chevauchement dans les voisinages à k sauts, la convolution locale sur les nœuds entraîne des calculs répétés. Pour éviter cela, à chaque étape d’agrégation, PinSage mappe 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.
Deep Graph Library : un package python évolutif pour l’apprentissage profond sur graphes
Framework DGL.
Deep Graph Library (DGL) est un package Python conçu pour construire des modèles de réseaux neuronaux basés sur des graphes par-dessus des frameworks d’apprentissage profond existants (par exemple, PyTorch, MXNet, Gluon, et plus encore). DGL inclut une interface backend conviviale, ce qui facilite son intégration dans des frameworks basés sur des tenseurs et prenant en charge la génération automatique. L’algorithme PinSage mentionné ci-dessus est optimisé pour une utilisation avec DGL et PyTorch.
Milvus : une base de données vectorielle open-source conçue pour l’IA et la recherche par similarité
Comment fonctionne la recherche par similarité dans Milvus ?
Milvus est une base de données vectorielle open-source conçue pour alimenter la recherche de similarité vectorielle et les applications d’intelligence artificielle (IA). À un niveau général, l’utilisation de Milvus pour la recherche par similarité fonctionne comme suit :
- 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.
- Milvus stocke et indexe les vecteurs de caractéristiques.
- Sur demande, Milvus recherche et renvoie les vecteurs les plus similaires à un vecteur d’entrée.
Construire un système de recommandation basé sur des graphes avec Milvus
Flux de travail de base d’un système de recommandation basé sur des graphes dans Milvus.
Flux de travail de base d’un système de recommandation basé sur des graphes dans Milvus.
Construire un système de recommandation basé sur des graphes avec Milvus implique les étapes suivantes :
Étape 1 : Prétraiter les données
Le prétraitement des données consiste à transformer des données brutes en un format plus facilement compréhensible. Cet exemple utilise les jeux de données ouverts MovieLens[5] (m1–1m), qui contiennent 1 000 000 de notes attribuées à 4 000 films par 6 000 utilisateurs. Ces données ont été collectées par GroupLens et incluent des descriptions de films, des notes de films et des caractéristiques utilisateur.
Notez que les jeux de données MovieLens utilisés dans cet exemple nécessitent un nettoyage ou une organisation des données minimale. Cependant, si vous utilisez différents jeux de données, les résultats peuvent varier.
Pour commencer à créer un système de recommandation, construisez un graphe biparti utilisateur-film à des fins de classification en utilisant les données historiques utilisateur-film du jeu 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îner le modèle avec PinSage
Les vecteurs d’intégration des pins générés à l’aide du modèle PinSage sont des vecteurs de caractéristiques des informations de film acquises. Créez un modèle PinSage basé sur le graphe biparti g et les dimensions personnalisées du vecteur de caractéristiques de film (256-d par défaut). Ensuite, entraînez le modèle avec PyTorch pour obtenir les embeddings h_item des 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 : Charger les données
Chargez les embeddings de films h_item générés par le modèle PinSage dans Milvus, qui renverra les IDs correspondants. Importez les IDs et les informations de film correspondantes dans MySQL.
# Load data to Milvus and MySQL
status, ids = milvus.insert(milvus_table, h_item)
load_movies_to_mysql(milvus_table, ids_info)
Étape 4 : Effectuer une recherche de similarité vectorielle
Obtenez les embeddings correspondants dans Milvus en fonction des IDs de films, puis utilisez Milvus pour effectuer une recherche de similarité avec ces embeddings. Ensuite, identifiez les informations de film correspondantes 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 recommandera désormais les films les plus similaires aux requêtes de recherche des utilisateurs. Il s’agit du flux de travail général pour créer un système de recommandation. Pour tester et déployer rapidement des systèmes de recommandation et d’autres applications d’IA, essayez le bootcamp Milvus.
Milvus peut alimenter bien plus que des systèmes de recommandation
Milvus est un outil puissant capable d’alimenter un vaste éventail d’applications d’intelligence artificielle et de recherche de similarité vectorielle. Pour en savoir plus sur le projet, consultez les ressources suivantes :
Continuer à lire

The Great AI Agent Protocol Race: Function Calling vs. MCP vs. A2A
Compare Function Calling, MCP, and A2A protocols for AI agents. Learn which standard best fits your development needs and future-proof your applications.

Balancing Precision and Performance: How Zilliz Cloud's New Parameters Help You Optimize Vector Search
Optimize vector search with Zilliz Cloud’s level and recall features to tune accuracy, balance performance, and power AI applications.

1 Table = 1000 Words? Foundation Models for Tabular Data
TableGPT2 automates tabular data insights, overcoming schema variability, while Milvus accelerates vector search for efficient, scalable decision-making.



