Nous avons une nouvelle version Recommenders 1.2.0 !
Tant de changements depuis notre dernière version. Nous avons des tests complets sur Python 3.8 à 3.11 (environ 1 800 tests), des performances améliorées dans de nombreux algorithmes, des notebooks révisés et bien d'autres améliorations.
L'objectif des recommandateurs est d'aider les chercheurs, les développeurs et les passionnés dans le prototypage, l'expérimentation et la mise en production d'une gamme de systèmes de recommandation classiques et de pointe.
Recommenders est un projet de la Linux Foundation of AI and Data.
Ce référentiel contient des exemples et des bonnes pratiques pour créer des systèmes de recommandation, fournis sous forme de notebooks Jupyter. Les exemples détaillent nos apprentissages sur cinq tâches clés :
Plusieurs utilitaires sont fournis dans les recommandations pour prendre en charge les tâches courantes telles que le chargement d'ensembles de données dans le format attendu par différents algorithmes, l'évaluation des sorties du modèle et la division des données d'entraînement/test. Des implémentations de plusieurs algorithmes de pointe sont incluses pour l'auto-apprentissage et la personnalisation de vos propres applications. Consultez la documentation des recommandateurs.
Pour un aperçu plus détaillé du référentiel, veuillez consulter les documents sur la page wiki.
Pour certains des scénarios pratiques dans lesquels des systèmes de recommandation ont été appliqués, voir scénarios.
Nous recommandons conda pour la gestion de l'environnement et VS Code pour le développement. Pour installer le package de recommandations et exécuter un exemple de notebook sous Linux/WSL :
# 1. Install gcc if it is not installed already. On Ubuntu, this could done by using the command
# sudo apt install gcc
# 2. Create and activate a new conda environment
conda create -n < environment_name > python=3.9
conda activate < environment_name >
# 3. Install the core recommenders package. It can run all the CPU notebooks.
pip install recommenders
# 4. create a Jupyter kernel
python -m ipykernel install --user --name < environment_name > --display-name < kernel_name >
# 5. Clone this repo within VSCode or using command line:
git clone https://github.com/recommenders-team/recommenders.git
# 6. Within VSCode:
# a. Open a notebook, e.g., examples/00_quick_start/sar_movielens.ipynb;
# b. Select Jupyter kernel <kernel_name>;
# c. Run the notebook.
Pour plus d'informations sur la configuration sur d'autres plates-formes (par exemple, Windows et macOS) et différentes configurations (par exemple, GPU, Spark et fonctionnalités expérimentales), consultez le Guide d'installation.
En plus du package de base, plusieurs extras sont également fournis, notamment :
[gpu]
: Nécessaire pour exécuter des modèles GPU.[spark]
: Nécessaire pour exécuter les modèles Spark.[dev]
: Nécessaire pour le développement du dépôt.[all]
: [gpu]
| [spark]
| [dev]
[experimental]
: modèles qui n'ont pas été testés de manière approfondie et/ou peuvent nécessiter des étapes d'installation supplémentaires. Le tableau ci-dessous répertorie les algorithmes de recommandation actuellement disponibles dans le référentiel. Les blocs-notes sont liés sous la colonne Exemple en tant que Démarrage rapide, présentant un exemple facile à exécuter de l'algorithme, ou en tant qu'Approfondissement, expliquant en détail les mathématiques et la mise en œuvre de l'algorithme.
Algorithme | Taper | Description | Exemple |
---|---|---|---|
Moindres carrés alternés (ALS) | Filtrage collaboratif | Algorithme de factorisation matricielle pour un retour explicite ou implicite dans de grands ensembles de données, optimisé pour l'évolutivité et la capacité de calcul distribué. Cela fonctionne dans l'environnement PySpark. | Démarrage rapide / Plongée profonde |
Décomposition asynchrone attentive des valeurs singulières (A2SVD) * | Filtrage collaboratif | Algorithme séquentiel qui vise à capturer les préférences des utilisateurs à long et à court terme à l'aide d'un mécanisme d'attention. Il fonctionne dans l'environnement CPU/GPU. | Démarrage rapide |
Classement personnalisé Cornac/Bayésien (BPR) | Filtrage collaboratif | Algorithme de factorisation matricielle pour prédire le classement des éléments avec rétroaction implicite. Cela fonctionne dans l'environnement CPU. | Plongée profonde |
Auto-encodeur variationnel Cornac/bilatéral (BiVAE) | Filtrage collaboratif | Modèle génératif pour les données dyadiques (par exemple, interactions utilisateur-élément). Il fonctionne dans l'environnement CPU/GPU. | Plongée profonde |
Recommandation d'intégration de séquences convolutives (Caser) | Filtrage collaboratif | Algorithme basé sur des convolutions qui visent à capturer à la fois les préférences générales et les modèles séquentiels de l'utilisateur. Il fonctionne dans l'environnement CPU/GPU. | Démarrage rapide |
Réseau axé sur les connaissances approfondies (DKN) * | Filtrage basé sur le contenu | Algorithme d'apprentissage en profondeur intégrant un graphique de connaissances et des intégrations d'articles pour fournir des recommandations d'actualités ou d'articles. Il fonctionne dans l'environnement CPU/GPU. | Démarrage rapide / Plongée profonde |
Machine de factorisation extrêmement profonde (xDeepFM) * | Filtrage collaboratif | Algorithme basé sur l'apprentissage profond pour des commentaires implicites et explicites avec les fonctionnalités utilisateur/élément. Il fonctionne dans l'environnement CPU/GPU. | Démarrage rapide |
Biais de points d'intégration FastAI (FAST) | Filtrage collaboratif | Algorithme à usage général avec intégrations et biais pour les utilisateurs et les éléments. Il fonctionne dans l'environnement CPU/GPU. | Démarrage rapide |
Machine LightFM/factorisation | Filtrage collaboratif | Algorithme de Factorization Machine pour les rétroactions implicites et explicites. Cela fonctionne dans l'environnement CPU. | Démarrage rapide |
Arbre de renforcement LightGBM/Gradient * | Filtrage basé sur le contenu | Algorithme Gradient Boosting Tree pour un entraînement rapide et une faible utilisation de la mémoire dans les problèmes basés sur le contenu. Il fonctionne dans les environnements CPU/GPU/PySpark. | Démarrage rapide dans CPU / Plongée approfondie dans PySpark |
LumièreGCN | Filtrage collaboratif | Algorithme d'apprentissage profond qui simplifie la conception de GCN pour prédire les commentaires implicites. Il fonctionne dans l'environnement CPU/GPU. | Plongée profonde |
GéoIMC * | Filtrage collaboratif | Algorithme de complétion matricielle qui prend en compte les caractéristiques des utilisateurs et des éléments à l'aide de l'optimisation du gradient conjugué riemannien et suit une approche géométrique. Cela fonctionne dans l'environnement CPU. | Démarrage rapide |
GRU | Filtrage collaboratif | Algorithme séquentiel qui vise à capturer les préférences des utilisateurs à long et à court terme à l'aide de réseaux neuronaux récurrents. Il fonctionne dans l'environnement CPU/GPU. | Démarrage rapide |
VAE multinomiale | Filtrage collaboratif | Modèle génératif pour prédire les interactions utilisateur/élément. Il fonctionne dans l'environnement CPU/GPU. | Plongée profonde |
Recommandation neuronale avec représentations d'utilisateurs à long et à court terme (LSTUR) * | Filtrage basé sur le contenu | Algorithme de recommandation neuronale pour recommander des articles d'actualité avec une modélisation des intérêts des utilisateurs à long et à court terme. Il fonctionne dans l'environnement CPU/GPU. | Démarrage rapide |
Recommandation neuronale avec apprentissage multi-vues attentif (NAML) * | Filtrage basé sur le contenu | Algorithme de recommandation neuronale pour recommander des articles d'actualité avec un apprentissage multi-vue attentif. Il fonctionne dans l'environnement CPU/GPU. | Démarrage rapide |
Filtrage collaboratif neuronal (NCF) | Filtrage collaboratif | Algorithme d'apprentissage en profondeur avec des performances améliorées pour les commentaires implicites des utilisateurs/éléments. Il fonctionne dans l'environnement CPU/GPU. | Démarrage rapide / Plongée profonde |
Recommandation neuronale avec attention personnalisée (NPA) * | Filtrage basé sur le contenu | Algorithme de recommandation neuronale pour recommander des articles d’actualité avec un réseau d’attention personnalisé. Il fonctionne dans l'environnement CPU/GPU. | Démarrage rapide |
Recommandation neuronale avec auto-attention multi-têtes (NRMS) * | Filtrage basé sur le contenu | Algorithme de recommandation neuronale pour recommander des articles de presse avec une auto-attention multi-têtes. Il fonctionne dans l'environnement CPU/GPU. | Démarrage rapide |
Recommandation pour l'article suivant (NextItNet) | Filtrage collaboratif | Algorithme basé sur des convolutions dilatées et un réseau résiduel qui vise à capturer des motifs séquentiels. Il prend en compte à la fois les interactions utilisateur/élément et les fonctionnalités. Il fonctionne dans l'environnement CPU/GPU. | Démarrage rapide |
Machines Boltzmann restreintes (RBM) | Filtrage collaboratif | Algorithme basé sur un réseau neuronal pour apprendre la distribution de probabilité sous-jacente pour les commentaires explicites ou implicites des utilisateurs/éléments. Il fonctionne dans l'environnement CPU/GPU. | Démarrage rapide / Plongée profonde |
Achèvement de matrice riemannienne de bas rang (RLRMC) * | Filtrage collaboratif | Algorithme de factorisation matricielle utilisant l'optimisation des gradients conjugués riemanniens avec une faible consommation de mémoire pour prédire les interactions utilisateur/élément. Cela fonctionne dans l'environnement CPU. | Démarrage rapide |
Algorithme simple de recommandation (SAR) * | Filtrage collaboratif | Algorithme basé sur la similarité pour les commentaires implicites des utilisateurs/éléments. Cela fonctionne dans l'environnement CPU. | Démarrage rapide / Plongée profonde |
Recommandation séquentielle auto-attentive (SASRec) | Filtrage collaboratif | Algorithme basé sur un transformateur pour la recommandation séquentielle. Il fonctionne dans l'environnement CPU/GPU. | Démarrage rapide |
Outil de recommandation intégré de préférence à court et à long terme (SLi-Rec) * | Filtrage collaboratif | Algorithme séquentiel qui vise à capturer les préférences de l'utilisateur à long et à court terme à l'aide d'un mécanisme d'attention, d'un contrôleur sensible au temps et d'un contrôleur sensible au contenu. Il fonctionne dans l'environnement CPU/GPU. | Démarrage rapide |
Modélisation séquentielle des utilisateurs (SUM) multi-intérêts * | Filtrage collaboratif | Un modèle utilisateur séquentiel basé sur un réseau de mémoire amélioré qui vise à capturer les multiples intérêts des utilisateurs. Il fonctionne dans l'environnement CPU/GPU. | Démarrage rapide |
Recommandation séquentielle via un transformateur personnalisé (SSEPT) | Filtrage collaboratif | Algorithme basé sur un transformateur pour la recommandation séquentielle avec intégration de l'utilisateur. Il fonctionne dans l'environnement CPU/GPU. | Démarrage rapide |
VAE standard | Filtrage collaboratif | Modèle génératif pour prédire les interactions utilisateur/élément. Il fonctionne dans l'environnement CPU/GPU. | Plongée profonde |
Décomposition surprise/valeur singulière (SVD) | Filtrage collaboratif | Algorithme de factorisation matricielle pour prédire les commentaires de notation explicites dans de petits ensembles de données. Il fonctionne dans l'environnement CPU/GPU. | Plongée profonde |
Fréquence des termes - Fréquence inverse des documents (TF-IDF) | Filtrage basé sur le contenu | Algorithme simple basé sur la similarité pour des recommandations basées sur le contenu avec des ensembles de données textuelles. Cela fonctionne dans l'environnement CPU. | Démarrage rapide |
Vowpal Wabbit (VW) * | Filtrage basé sur le contenu | Algorithmes d'apprentissage en ligne rapides, parfaits pour les scénarios dans lesquels les fonctionnalités/le contexte de l'utilisateur changent constamment. Il utilise le processeur pour l'apprentissage en ligne. | Plongée profonde |
Large et profond | Filtrage collaboratif | Algorithme d'apprentissage profond capable de mémoriser les interactions entre les fonctionnalités et de généraliser les fonctionnalités des utilisateurs. Il fonctionne dans l'environnement CPU/GPU. | Démarrage rapide |
xLearn/Factorisation Machine (FM) et Field-Aware FM (FFM) | Filtrage collaboratif | Algorithme rapide et efficace en mémoire pour prédire les étiquettes avec des fonctionnalités utilisateur/élément. Il fonctionne dans l'environnement CPU/GPU. | Plongée profonde |
REMARQUE : * indique les algorithmes inventés/contribués par Microsoft.
Les algorithmes et utilitaires indépendants ou en incubation sont candidats pour le dossier contrib. Cela hébergera des contributions qui peuvent ne pas s'intégrer facilement dans le référentiel principal ou qui nécessitent du temps pour refactoriser ou mûrir le code et ajouter les tests nécessaires.
Algorithme | Taper | Description | Exemple |
---|---|---|---|
SARplus * | Filtrage collaboratif | Implémentation optimisée de SAR pour Spark | Démarrage rapide |
Nous fournissons un cahier de référence pour illustrer comment différents algorithmes pourraient être évalués et comparés. Dans ce bloc-notes, l'ensemble de données MovieLens est divisé en ensembles d'entraînement/test selon un rapport de 75/25 à l'aide d'une répartition stratifiée. Un modèle de recommandation est formé à l'aide de chacun des algorithmes de filtrage collaboratif ci-dessous. Nous utilisons ici les valeurs de paramètres empiriques rapportées dans la littérature. Pour les mesures de classement, nous utilisons k=10
(les 10 principaux éléments recommandés). Nous effectuons la comparaison sur une DSVM Azure Standard NC6s_v2 (6 vCPU, 112 Go de mémoire et 1 GPU P100). Spark ALS est exécuté en mode autonome local. Dans ce tableau, nous montrons les résultats sur Movielens 100k, exécutant les algorithmes pendant 15 époques.
Algo | CARTE | nDCG@k | Précision@k | Rappel@k | RMSE | MAE | R2 | Écart expliqué |
---|---|---|---|---|---|---|---|---|
SLA | 0,004732 | 0,044239 | 0,048462 | 0,017796 | 0,965038 | 0,753001 | 0,255647 | 0,251648 |
BiVAE | 0,146126 | 0,475077 | 0,411771 | 0,219145 | N / A | N / A | N / A | N / A |
BPR | 0,132478 | 0,441997 | 0,388229 | 0,212522 | N / A | N / A | N / A | N / A |
IA rapide | 0,025503 | 0,147866 | 0,130329 | 0,053824 | 0,943084 | 0,744337 | 0,285308 | 0,287671 |
LumièreGCN | 0,088526 | 0,419846 | 0,379626 | 0,144336 | N / A | N / A | N / A | N / A |
FCN | 0,107720 | 0,396118 | 0,347296 | 0,180775 | N / A | N / A | N / A | N / A |
DAS | 0,110591 | 0,382461 | 0,330753 | 0,176385 | 1.253805 | 1.048484 | -0,569363 | 0,030474 |
SVD | 0,012873 | 0,095930 | 0,091198 | 0,032783 | 0,938681 | 0,742690 | 0,291967 | 0,291971 |
Ce projet accueille les contributions et suggestions. Avant de contribuer, veuillez consulter nos directives de contribution.
Ce projet adhère à ce code de conduite afin de favoriser une communauté accueillante et inspirante pour tous.
Ces tests sont les builds nocturnes, qui calculent les tests asynchrones. main
est notre branche principale et staging
est notre branche de développement. Nous utilisons pytest pour tester les utilitaires Python dans les recommandations et l'exécuteur de bloc-notes Recommenders pour les blocs-notes.
Pour plus d’informations sur les pipelines de tests, veuillez consulter la documentation des tests.
Les tests de build nocturnes sont exécutés quotidiennement sur AzureML.
Type de construction | Bifurquer | Statut | Bifurquer | Statut | |
---|---|---|---|---|---|
Processeur Linux | principal | ![]() | mise en scène | ![]() | |
GPU Linux | principal | ![]() | mise en scène | ![]() | |
Linux Spark | principal | ![]() | mise en scène | ![]() |