
«世有伯乐 , 然后有千里马。千里马常有 , 而伯乐不常有。» —— 韩愈《马说》
Page d'accueil | Docs | Ensembles de données | Papier | Blogs | Modèles | 中文版
Recbole est développé sur la base de Python et Pytorch pour reproduire et développer des algorithmes de recommandation dans un cadre unifié, complet et efficace à des fins de recherche. Notre bibliothèque comprend 91 algorithmes de recommandation, couvrant quatre grandes catégories:
Nous concevons un format de fichier de données unifié et flexible et fournissons la prise en charge de 43 ensembles de données de recommandation de référence. Un utilisateur peut appliquer le script fourni pour traiter la copie de données d'origine ou simplement télécharger les ensembles de données traités par notre équipe.

Figure : Recbole Architecture globale
Afin de soutenir l'étude des avancées récentes dans les systèmes de recommandation, nous construisons une bibliothèque de recommandations étendue Recbole2.0 composée de 8 packages pour des sujets et des architectures à jour (par exemple, débiasé, équité et GNNS).
Structure de données générale et extensible. Nous concevons des structures de données générales et extensibles pour unifier le formatage et l'utilisation de divers ensembles de données de recommandation.
Modèles de référence et ensembles de données complets. Nous mettons en œuvre 78 algorithmes de recommandation couramment utilisés et fournissons les copies formatées de 28 ensembles de données de recommandation.
Exécution efficace accélérée par le GPU. Nous optimisons l'efficacité de notre bibliothèque avec un certain nombre de techniques améliorées orientées vers l'environnement GPU.
Protocoles d'évaluation étendus et standard. Nous soutenons une série de protocoles d'évaluation largement adoptés ou de paramètres pour tester et comparer les algorithmes de recommandation.
11/01/2023 : Nous publions Recbole v1.2.0.
11/06/2022 : Nous libérons les hyperparamètres optimaux du modèle et leurs gammes de réglage.
10/05/2022 : Nous publions Recbole v1.1.1.
28/06/2022 : Nous publions Recbole2.0 avec 8 packages composés de 65 modèles nouvellement implémentés .
25/02/2022 : Nous publions Recbole v1.0.1.
17/09/2021 : Nous publions Recbole v1.0.0.
22/03/2021 : Nous libérons Recbole v0.2.1.
15/01/2021 : Nous publions Recbole v0.2.0.
12/10/2020 : 我们发布了 Recbole 小白入门系列中文博客 (持续更新中)。。
12/06/2020 : Nous publions Recbole v0.1.2.
29/11/2020 : Nous avons construit des expériences préliminaires pour tester le temps et le coût de la mémoire sur trois ensembles de données de différentes tailles et avons fourni le résultat du test pour référence.
11/03/2020 : Nous publions la première version de Recbole v0.1.1 .
Pour mieux répondre aux exigences des utilisateurs et contribuer à la communauté de recherche, nous présentons une mise à jour importante de Recbole dans la dernière version, ce qui le rend plus convivial et facile à utiliser en tant que bibliothèque de référence complète pour recommandation. Nous résumons ces mises à jour dans " Vers une bibliothèque de références plus conviviale et plus facile à utiliser pour les systèmes de recommandation " et soumettant le document à Sigir 2023 . La principale contribution de cette mise à jour est introduite ci-dessous.
Nos extensions sont réalisées dans trois aspects majeurs, à savoir les modèles / ensembles de données, le cadre et les configurations. En outre, nous fournissons une documentation plus complète et une FAQ bien organisée pour l'utilisation de notre bibliothèque, ce qui améliore largement l'expérience utilisateur. Plus précisément, les points forts de cette mise à jour sont résumés comme:
Nous introduisons plus d'opérations et de paramètres pour aider à analyser le domaine de recommandation.
Nous améliorons la convivialité de l'utilisateur de notre bibliothèque en fournissant des documents plus détaillés et des questions bien organisées bien organisées.
Nous soulignons plusieurs directives de développement pour les développeurs de bibliothèques open source.
Ces extensions facilitent la reproduction des résultats de référence et restent à jour avec les avancées récentes sur les systèmes de recommandation. La comparaison de données entre cette mise à jour et les versions précédentes est répertoriée ci-dessous.
| Aspect | Recbole 1.0 | Recbole 2.0 | Cette mise à jour |
|---|---|---|---|
| Tâches de recommandation | 4 catégories | 3 sujets et 5 packages | 4 catégories |
| Modèles et ensembles de données | 73 modèles et 28 ensembles de données | 65 modèles et 8 nouveaux ensembles de données | 91 modèles et 43 ensembles de données |
| Structure de données | Ensemble de données et dataloader implémenté | Axé sur les tâches | Module de données compatible hérité de Pytorch |
| Caractéristiques continues | Intégration de champs | Intégration de champs | Incorporation et discrétisation sur le terrain |
| Exécution accélérée par le GPU | Utilisation unique de GPU | Utilisation unique de GPU | Formation de précision multi-GPU et de précision mixte |
| Réglage hyper-paramètre | Recherche de gradient en série | Recherche de gradient en série | Trois méthodes de recherche en série et parallèle |
| Test de signification | - | - | Interface disponible |
| Résultats de référence | - | Partiellement public (GNN et CDR) | Configurations de référence sur 82 modèles |
| Utilisation amicale | Documentation | Documentation | Page de documentation et de FAQ améliorées |
Recbole fonctionne avec les systèmes d'exploitation suivants:
Recbole nécessite Python version 3.7 ou version ultérieure.
Recbole nécessite la version 1.7.0 de Torch ou version ultérieure. Si vous souhaitez utiliser Recbole avec GPU, veuillez vous assurer que la version Cuda ou Cudatoolkit est de 9,2 ou version ultérieure. Cela nécessite la version Nvidia Driver> = 396.26 (pour Linux) ou> = 397.44 (pour Windows10).
conda install -c aibox recbolepip install recbolegit clone https://github.com/RUCAIBox/RecBole.git && cd RecBole
pip install -e . --verboseAvec le code source, vous pouvez utiliser le script fourni pour l'utilisation initiale de notre bibliothèque:
python run_recbole.pyCe script exécutera le modèle BPR sur l'ensemble de données ML-100K.
En règle générale, cet exemple prend moins d'une minute. Nous obtiendrons des résultats comme:
INFO ml-100k
The number of users: 944
Average actions of users: 106.04453870625663
The number of items: 1683
Average actions of items: 59.45303210463734
The number of inters: 100000
The sparsity of the dataset: 93.70575143257098%
INFO Evaluation Settings:
Group by user_id
Ordering: {'strategy': 'shuffle'}
Splitting: {'strategy': 'by_ratio', 'ratios': [0.8, 0.1, 0.1]}
Negative Sampling: {'strategy': 'full', 'distribution': 'uniform'}
INFO BPRMF(
(user_embedding): Embedding(944, 64)
(item_embedding): Embedding(1683, 64)
(loss): BPRLoss()
)
Trainable parameters: 168128
INFO epoch 0 training [time: 0.27s, train loss: 27.7231]
INFO epoch 0 evaluating [time: 0.12s, valid_score: 0.021900]
INFO valid result:
recall@10: 0.0073 mrr@10: 0.0219 ndcg@10: 0.0093 hit@10: 0.0795 precision@10: 0.0088
...
INFO epoch 63 training [time: 0.19s, train loss: 4.7660]
INFO epoch 63 evaluating [time: 0.08s, valid_score: 0.394500]
INFO valid result:
recall@10: 0.2156 mrr@10: 0.3945 ndcg@10: 0.2332 hit@10: 0.7593 precision@10: 0.1591
INFO Finished training, best eval result in epoch 52
INFO Loading model structure and parameters from saved/***.pth
INFO best valid result:
recall@10: 0.2169 mrr@10: 0.4005 ndcg@10: 0.235 hit@10: 0.7582 precision@10: 0.1598
INFO test result:
recall@10: 0.2368 mrr@10: 0.4519 ndcg@10: 0.2768 hit@10: 0.7614 precision@10: 0.1901
Si vous souhaitez modifier les paramètres, tels que learning_rate , embedding_size , définissez simplement les paramètres de commande supplémentaires dont vous avez besoin:
python run_recbole.py --learning_rate=0.0001 --embedding_size=128Si vous souhaitez modifier les modèles, exécutez simplement le script en définissant des paramètres de commande supplémentaires:
python run_recbole.py --model=[model_name] Ouvrez RecBole/hyper.test et définissez plusieurs hyperparamètres à la recherche automatique dans la liste des paramètres. Ce qui suit a deux façons de rechercher le meilleur hyperparamètre:
Voici un exemple pour hyper.test :
learning_rate loguniform -8, 0
embedding_size choice [64, 96 , 128]
train_batch_size choice [512, 1024, 2048]
mlp_hidden_size choice ['[64, 64, 64]','[128, 128]']
Définissez les paramètres de commande de formation comme vous devez exécuter:
python run_hyper.py --model=[model_name] --dataset=[data_name] --config_files=xxxx.yaml --params_file=hyper.test
e.g.
python run_hyper.py --model=BPR --dataset=ml-100k --config_files=test.yaml --params_file=hyper.test
Notez que --config_files=test.yaml est facultatif, si vous n'avez pas de paramètres de configuration personnalisés, ce paramètre peut être vide.
Ce traitement met peut-être beaucoup de temps à produire le meilleur hyperparamètre et le résultat:
running parameters:
{'embedding_size': 64, 'learning_rate': 0.005947474154838498, 'mlp_hidden_size': '[64,64,64]', 'train_batch_size': 512}
0%| | 0/18 [00:00<?, ?trial/s, best loss=?]
Plus d'informations sur le réglage des paramètres peuvent être trouvées dans nos documents.
Nous avons construit des expériences préliminaires pour tester le temps et le coût de la mémoire sur trois ensembles de données de taille différente (petit, moyen et grand). Pour des informations détaillées, vous pouvez cliquer sur les liens suivants.
Remarque: Nos résultats de test ont seulement donné le temps et le coût de mémoire approximatifs de nos implémentations dans la bibliothèque Recbole (en fonction de notre serveur de machines). Tous les commentaires ou suggestions sur les implémentations et les tests sont les bienvenus. Nous continuerons à améliorer nos implémentations et à mettre à jour ces résultats de test.
| Sorties | Date |
|---|---|
| v1.2.0 | 11/01/2023 |
| v1.1.1 | 10/05/2022 |
| v1.0.0 | 17/09/2021 |
| v0.2.0 | 15/01/2021 |
| v0.1.1 | 11/03/2020 |
En tant que cadre à guichet unique du traitement des données, du développement du modèle, de la formation en algorithme à l'évaluation scientifique, Recbole a un total de 11 projets GitHub connexes, notamment
Dans le tableau suivant, nous résumons les contributions open source des projets GitHub basés sur Recbole.
| Projets | Étoiles | Fourchettes | Problèmes | Des demandes de traction |
|---|---|---|---|---|
| Recbole | ||||
| Recbole2.0 | ||||
| Recbole-da | ||||
| Recbole-métarec | ||||
| Recbole-debas | ||||
| Recbole-fairrec | ||||
| Recbole-cdr | ||||
| Recbole-gnn | ||||
| Recbole-trm | ||||
| Recbole-pjf | ||||
| Recsysdatasets |
Veuillez nous faire savoir si vous rencontrez un bogue ou si vous avez des suggestions en déposant un problème.
Nous accueillons toutes les contributions des corrections de bogues aux nouvelles fonctionnalités et extensions.
Nous nous attendons à toutes les contributions discutées dans le tracker du numéro et en passant par PRS.
Nous remercions les suggestions perspicaces de @tszumowski, @rowedenny, @deklanw et.al.
Nous remercions les belles contributions via PRS de @ rowedenny , @ deklanw et.al.
Si vous trouvez Recbole utile pour votre recherche ou votre développement, veuillez citer les articles suivants: recbole [1.0], recbole [2.0] et recbole [1.2.0].
@inproceedings { recbole[1.0] ,
author = { Wayne Xin Zhao and Shanlei Mu and Yupeng Hou and Zihan Lin and Yushuo Chen and Xingyu Pan and Kaiyuan Li and Yujie Lu and Hui Wang and Changxin Tian and Yingqian Min and Zhichao Feng and Xinyan Fan and Xu Chen and Pengfei Wang and Wendi Ji and Yaliang Li and Xiaoling Wang and Ji{-}Rong Wen } ,
title = { RecBole: Towards a Unified, Comprehensive and Efficient Framework for Recommendation Algorithms } ,
booktitle = { {CIKM} } ,
pages = { 4653--4664 } ,
publisher = { {ACM} } ,
year = { 2021 }
}
@inproceedings { recbole[2.0] ,
author = { Wayne Xin Zhao and Yupeng Hou and Xingyu Pan and Chen Yang and Zeyu Zhang and Zihan Lin and Jingsen Zhang and Shuqing Bian and Jiakai Tang and Wenqi Sun and Yushuo Chen and Lanling Xu and Gaowei Zhang and Zhen Tian and Changxin Tian and Shanlei Mu and Xinyan Fan and Xu Chen and Ji{-}Rong Wen } ,
title = { RecBole 2.0: Towards a More Up-to-Date Recommendation Library } ,
booktitle = { {CIKM} } ,
pages = { 4722--4726 } ,
publisher = { {ACM} } ,
year = { 2022 }
}
@inproceedings { recbole[1.2.0] ,
author = { Lanling Xu and Zhen Tian and Gaowei Zhang and Junjie Zhang and Lei Wang and Bowen Zheng and Yifan Li and Jiakai Tang and Zeyu Zhang and Yupeng Hou and Xingyu Pan and Wayne Xin Zhao and Xu Chen and Ji{-}Rong Wen } ,
title = { Towards a More User-Friendly and Easy-to-Use Benchmark Library for Recommender Systems } ,
booktitle = { {SIGIR} } ,
pages = { 2837--2847 } ,
publisher = { {ACM} } ,
year = { 2023 }
}Le recbole est développé par RUC, BUPT, ECNU et maintenu par RUC.
Voici la liste de nos développeurs principaux dans chaque phase de développement. Ce sont les âmes de Recbole et ont apporté des contributions exceptionnelles.
| Temps | Version | Développeurs principaux | Papier |
|---|---|---|---|
| Juin 2020 ~ Nov. 2020 | v0.1.1 | Shanlei Mu (@shanleimu), Yupeng Hou (@ Hyp1231), Zihan Lin (@ Linzihan-BackForward), Kaiyuan Li (@tsotfsk) | |
| Nov. 2020 ~ Juillet 2022 | v0.1.2 ~ v1.0.1 | Yushuo Chen (@chenyushuo), Xingyu Pan (@ 2017pxy) | |
| Juillet 2022 ~ Novembre 2023 | v1.1.0 ~ v1.1.1 | Lanling Xu (@ Sherry-Xll), Zhen Tian (@Chenyuwuxin), Gaowei Zhang (@wicknight), Lei Wang (@paitansanshi), Junjie Zhang (@Leoleojie) | |
| Novembre 2023 ~ maintenant | v1.2.0 | Bowen Zheng (@ Zhengbw0324), Chen Ma (@ yilu114) |
Recbole utilise la licence MIT. Toutes les données et le code de ce projet ne peuvent être utilisés qu'à des fins académiques.
Ce projet a été soutenu par la National Natural Science Foundation of China (n ° 61832017).