Systèmes de recommandation: de la représentation vectorielle aux suggestions personnalisées
Qu'est ce qu'un système de recommandation?
Un
système de recommandation est un dispositif informatique qui exploite des techniques avancées de traitement du langage naturel (NLP) et des méthodes mathématiques comme la
similarité cosinus pour proposer aux utilisateurs des contenus adaptés à leurs besoins. Le NLP permet de transformer des textes (descriptions de produits, critiques de films, articles, etc.) en représentations vectorielles, tandis que la similarité cosinus mesure la proximité entre ces vecteurs. Ainsi, deux documents qui partagent un vocabulaire ou une structure sémantique similaire seront considérés comme proches, ce qui facilite la suggestion de contenus pertinents.
Un système de recommandation ne se limite pas uniquement au domaine du traitement du langage naturel (NLP). Bien qu’il soit souvent utilisé pour analyser des textes et mesurer la proximité entre documents grâce à des techniques comme la similarité cosinus, ses principes peuvent être appliqués dans de nombreux autres contextes.
Applications des systèmes de recommandation: du e‑commerce aux réseaux sociaux
Les systèmes de recommandation trouvent des applications variées, entre autres:
- Commerce électronique: recommandation de produits complémentaires ou similaires, basée sur l’analyse des descriptions et des avis des clients.
- Plateformes de streaming: exploitation des métadonnées et des critiques pour suggérer des films ou musiques proches des préférences de l’utilisateur.
- Éducation: utilisation du NLP pour relier des cours ou des ressources pédagogiques adaptées au profil et au parcours de l’apprenant.
- Santé: génération de recommandations personnalisées à partir des dossiers médicaux ou des habitudes de vie en comparant les profils patients grâce à des mesures de similarité.
- Réseaux sociaux: suggestion de posts, articles ou contenus pertinents en fonction des centres d’intérêt, des interactions passées et de la proximité sémantique entre publications.
Ces applications, et bien d'autres, montrent que les systèmes de recommandation sont des outils transversaux capables d’améliorer l’expérience utilisateur dans des domaines très variés.
Systèmes de recommandation de films avec TF-IDF et Cosine Similarity
Comment les plateformes de streaming suggèrent vos prochains films?
Les systèmes de recommandation jouent un rôle central dans le domaine des films et du streaming. Des plateformes comme Netflix, Amazon Prime Video ou Disney+ utilisent des algorithmes capables d’analyser les préférences des spectateurs, leurs historiques de visionnage et même les caractéristiques des contenus (genres, acteurs, thèmes). Grâce à ces données, elles proposent des films ou séries adaptés aux goûts de chaque utilisateur.
Par exemple, après avoir regardé une comédie romantique, Netflix peut suggérer d’autres titres similaires en exploitant la similarité cosinus entre descriptions de films ou en utilisant des techniques de NLP pour comprendre les critiques et résumés. L’objectif est de créer une expérience personnalisée qui fidélise l’utilisateur et l’aide à découvrir de nouveaux contenus sans effort.
Mini système de recommandation de films
L’objectif est de construire un mini système de recommandation de films basé sur l’analyse textuelle. Les descriptions des films sont d’abord transformées en vecteurs numériques grâce à TF‑IDF, ce qui permet d’extraire les caractéristiques importantes de chaque document en pondérant les mots selon leur fréquence et leur pertinence. Ensuite, la similarité cosinus est utilisée pour mesurer la proximité entre ces vecteurs. Par conséquent, deux films dont les descriptions partagent un vocabulaire ou une sémantique proche auront un score élevé.
Ainsi, lorsqu’un utilisateur choisit un film de référence, le système calcule les similarités avec les autres et propose les titres les plus proches. L’objectif est de montrer comment des techniques simples de NLP et de mathématiques appliquées peuvent être utilisées pour créer des recommandations personnalisées en réduisant la surcharge d’information et en guidant l’utilisateur vers des contenus pertinents.
Je propose ce code:
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import pandas as pd
documents = [
"An action movie with epic fights",
"A romantic comedy full of humor",
"An intense psychological thriller",
"A documentary about nature and animals",
"An action movie with fast cars",
"A science fiction film set in space",
"A historical drama about ancient civilizations",
"A horror movie with supernatural elements",
"An animated film for children with colorful characters",
"A mystery movie with unexpected twists"
]
# Transformer les documents en vecteurs TF-IDF
vectorizer = TfidfVectorizer(stop_words='english')
tfidf_matrix = vectorizer.fit_transform(documents)
# Calculer la similarité cosinus entre les documents
cosine_sim = cosine_similarity(tfidf_matrix, tfidf_matrix)
# Fonction de recommandation
def recommander(index, top_n=3):
sim_scores = list(enumerate(cosine_sim[index]))
sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)
sim_scores = sim_scores[1:top_n+1]
print(f"Recommandations pour : {documents[index]}")
for i, score in sim_scores:
print(f"- {documents[i]} (score: {score:.2f})")
# Exemple: recommandations pour le premier film
recommander(0)
Passons aux explications:
On commencer par importer les modules nécessaires:
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import pandas as pd
On importe les modules
TfidfVectorizer pour extraire les caractéristiques textuelles,
cosine_similarity pour mesurer la proximité entre documents et
pandas pour manipuler les données de manière structurée.
Après avoir créé manuellement un petit dataset contenant les descriptions de différents films, on transforme les descriptions de films en vecteurs TF‑IDF en supprimant les mots vides en anglais, afin de représenter chaque document sous forme numérique exploitable pour mesurer les similarités:
vectorizer = TfidfVectorizer(stop_words='english')
tfidf_matrix = vectorizer.fit_transform(documents)
J’ai déjà traité, dans ce cours, l’
extraction de caractéristiques avec TF‑IDF en expliquant comment cette méthode permet de pondérer les mots selon leur importance dans un corpus et de transformer des textes en vecteurs exploitables pour des tâches comme la comparaison et la recommandation.
Ensuite, on calcule la similarité cosinus entre tous les vecteurs TF‑IDF des descriptions de films, afin de mesurer le degré de proximité entre chaque document et identifier ceux qui se ressemblent le plus:
cosine_sim = cosine_similarity(tfidf_matrix, tfidf_matrix)
Après, on créer la fonction de recommandation nommée
recommender:
def recommander(index, top_n=3):
sim_scores = list(enumerate(cosine_sim[index]))
sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)
sim_scores = sim_scores[1:top_n+1]
print(f"Recommandations pour : {documents[index]}")
for i, score in sim_scores:
print(f"- {documents[i]} (score: {score:.2f})")
La fonction
recommander a pour objectif de proposer les films les plus similaires à celui choisi par l’utilisateur. Elle récupère d’abord les scores de similarité cosinus entre le film de référence et tous les autres, puis les trie par ordre décroissant afin de ne garder que les plus pertinents (3 dans ce cas). En excluant le document lui‑même, elle affiche ensuite les top‑n recommandations accompagnées de leur score de proximité.
Enfin, on exécute la fonction
recommander(0) pour afficher les films les plus similaires au premier document de la liste:
recommander(0)
Ce qui produit ce résultat:
Recommandations pour : An action movie with epic fights
- An action movie with fast cars (score: 0.37)
- A horror movie with supernatural elements (score: 0.13)
- A mystery movie with unexpected twists (score: 0.13)
Notre système de recommandation montre les films jugés les plus proches de
"An action movie with epic fights".
Le premier résultat,
"An action movie with fast cars", obtient un score de similarité cosinus de 0.37, ce qui traduit une forte proximité lexicale et thématique (même genre d’action).
Les deux autres films,
"A horror movie with supernatural elements" et
"A mystery movie with unexpected twists", présentent des scores plus faibles (0.13 chacun), mais restent considérés comme relativement proches en raison de certains termes ou structures partagées.
Cette démonstration illustre comment le système de recommandation identifie et classe les contenus similaires afin de fournir des recommandations pertinentes à l’utilisateur.