
“世有伯乐,然后有千里马。千里马常有,而伯乐不常有。” - - 韩愈《马说》
主页|文档|数据集|纸|博客|模型| 中文版
Recbole是基于Python和Pytorch开发的,用于在用于研究目的的统一,全面和高效的框架中再现和开发建议算法。我们的图书馆包括91个建议算法,涵盖了四个主要类别:
我们设计统一且灵活的数据文件格式,并为43个基准推荐数据集提供支持。用户可以应用提供的脚本来处理原始数据副本,或者只需下载我们的团队处理的数据集即可。

图:recbole整体体系结构
为了支持推荐系统最新进展的研究,我们构建了一个扩展的建议库Recbole2.0,该库由8个包装组成,用于最新的主题和体系结构(例如,Debiased,debiased,figarness和gnns)。
一般和可扩展的数据结构。我们设计一般和可扩展的数据结构,以统一各种建议数据集的格式和使用。
全面的基准模型和数据集。我们实施78种常用的建议算法,并提供28个建议数据集的格式副本。
有效的GPU加速执行。我们通过针对GPU环境的许多改进的技术来优化库的效率。
广泛的标准评估协议。我们支持一系列广泛采用的评估协议或设置,用于测试和比较建议算法。
11/01/2023 :我们发布Recbole V1.2.0。
11/06/2022 :我们释放模型的最佳超参数及其调整范围。
10/05/2022 :我们发布Recbole v1.1.1。
06/28/2022 :我们发布了Recbole2.0 ,其中8个软件包由65个新实施的型号组成。
02/25/2022 :我们发布Recbole V1.0.1。
09/17/2021 :我们发布Recbole V1.0.0。
03/22/2021 :我们发布Recbole V0.2.1。
01/15/2021 :我们发布Recbole V0.2.0。
12/10/2020 :Recbole 小白入门系列中文博客(持续更新中)。)
12/06/2020 :我们发布Recbole V0.1.2。
11/29/2020 :我们构建了初步实验,以测试三个不同尺寸数据集的时间和内存成本,并提供了测试结果以供参考。
11/03/2020 :我们发布了Recbole V0.1.1的第一版。
为了更好地满足用户需求并为研究社区做出贡献,我们在最新版本中介绍了Recbole的重大更新,使其更具用户友好,易于使用,作为全面的基准库,以供推荐。我们将这些更新总结为“朝向推荐系统的更易于用户友好,易于使用的基准库”,然后将纸张提交给Sigir 2023 。下面介绍了此更新的主要贡献。
我们的扩展是在三个主要方面进行的,即模型/数据集,框架和配置。此外,我们为图书馆的使用提供了更全面的文档和组织良好的常见问题解答,这在很大程度上可以改善用户体验。更具体地说,此更新的亮点总结为:
我们介绍了更多的操作和设置,以帮助基准推荐域。
我们通过提供更详细的文档和组织良好的问题来提高图书馆的用户友好性。
我们指出了开源图书馆开发人员的几项开发准则。
这些扩展使得重现基准结果并与推荐系统的最新进展保持最新状态变得更加容易。下面列出了此更新和上一个版本之间的数据比较。
| 方面 | Recbole 1.0 | Recbole 2.0 | 此更新 |
|---|---|---|---|
| 建议任务 | 4个类别 | 3个主题和5个包裹 | 4个类别 |
| 模型和数据集 | 73个型号和28个数据集 | 65个型号和8个新数据集 | 91个型号和43个数据集 |
| 数据结构 | 实现数据集和数据加载程序 | 面向任务 | 兼容数据模块从pytorch继承 |
| 连续功能 | 场嵌入 | 场嵌入 | 现场嵌入和离散化 |
| GPU加速执行 | 单GPU利用率 | 单GPU利用率 | 多GPU和混合精度训练 |
| 高参数调整 | 串行梯度搜索 | 串行梯度搜索 | 串行和并行的三种搜索方法 |
| 显着性测试 | - | - | 可用界面 |
| 基准结果 | - | 部分公开(GNN和CDR) | 82型型号的基准配置 |
| 友好的用法 | 文档 | 文档 | 改进的文档和常见问题页面 |
Recbole与以下操作系统合作:
Recbole需要Python版本3.7或更高版本。
Recbole需要火炬1.7.0版或更高版本。如果您想与GPU一起使用Recbole,请确保CUDA或CUDATOOLKIT版本为9.2或更高版本。这需要NVIDIA驱动程序版本> = 396.26(对于Linux)或> = 397.44(对于Windows10)。
conda install -c aibox recbolepip install recbolegit clone https://github.com/RUCAIBox/RecBole.git && cd RecBole
pip install -e . --verbose使用源代码,您可以使用提供的脚本来初步使用我们的库:
python run_recbole.py该脚本将在ML-100K数据集上运行BPR模型。
通常,此示例需要不到一分钟。我们将获得一些输出,例如:
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
如果要更改参数,例如learning_rate , embedding_size ,只需根据需要设置其他命令参数:
python run_recbole.py --learning_rate=0.0001 --embedding_size=128如果要更改模型,只需通过设置其他命令参数来运行脚本:
python run_recbole.py --model=[model_name]打开RecBole/hyper.test ,并将几个超参数设置为在参数列表中自动搜索。以下有两种方法来搜索最佳的超参数:
这是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]']
在需要运行时设置培训命令参数:
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
请注意, --config_files=test.yaml是可选的,如果您没有任何自定义配置设置,则该参数可以为空。
这种处理可能需要很长时间才能输出最佳的超参数并结果:
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=?]
有关参数调整的更多信息可以在我们的文档中找到。
我们构建了初步实验,以测试三个不同大小的数据集(小,中和大)上的时间和内存成本。有关详细信息,您可以单击以下链接。
注意:我们的测试结果仅给出了Recbole库中实现的大约时间和内存成本(基于我们的机器服务器)。欢迎有关实施和测试的任何反馈或建议。我们将不断改进我们的实现,并更新这些测试结果。
| 发行 | 日期 |
|---|---|
| v1.2.0 | 11/01/2023 |
| v1.1.1 | 10/05/2022 |
| V1.0.0 | 09/17/2021 |
| v0.2.0 | 01/15/2021 |
| v0.1.1 | 11/03/2020 |
作为数据处理,模型开发,算法培训到科学评估的一站式框架,Recbole共有11个相关的GitHub项目
在下表中,我们总结了基于Recbole的GitHub项目的开源贡献。
| 项目 | 星星 | 叉子 | 问题 | 拉请求 |
|---|---|---|---|---|
| recbole | ||||
| recbole2.0 | ||||
| recbole-da | ||||
| Recbole-metarec | ||||
| Recbole-Debias | ||||
| recbole-fairrec | ||||
| recbole-cdr | ||||
| recbole-gnn | ||||
| recbole-trm | ||||
| recbole-pjf | ||||
| recsysdataset |
如果您遇到错误或提出问题,请告诉我们是否有任何建议。
我们欢迎从错误修复到新功能和扩展的所有贡献。
我们希望在问题跟踪器中讨论所有贡献并进行PRS。
我们感谢@tszumowski,@rowedenny,@deklanw et.al的有见地的建议。
我们感谢 @rowedenny, @deklanw et.al的PRS的不错贡献。
如果您发现Recbole对研究或开发有用,请引用以下论文:Recbole [1.0],Recbole [2.0]和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 }
}RECBOL由RUC,BUPT,ECNU开发,并由RUC维护。
这是每个开发阶段的主要开发人员列表。它们是recbole的灵魂,并做出了杰出的贡献。
| 时间 | 版本 | 首席开发人员 | 纸 |
|---|---|---|---|
| 2020年6月 〜 2020年11月 | v0.1.1 | Shanlei Mu(@shanleimu),Yupeng Hou(@hyp1231), Zihan Lin(@linzihan-backforward),kaiyuan li(@tsotfsk) | |
| 2020年11月 〜 2022年7月 | v0.1.2〜v1.0.1 | Yushuo Chen(@chenyushuo),Xingyu Pan(@2017pxy) | |
| 2022年7月 〜 2023年11月 | v1.1.0〜v1.1.1 | Lanling Xu(@Sherry-Xll),Zhen Tian(@chenyuwuxin),Gaowei Zhang(@wicknight),Lei Wang(@paitesanshi),Junjie Zhang(@leoleojie) | |
| 2023年11月 〜 现在 | v1.2.0 | Bowen Zheng(@Zhengbw0324),Chen MA(@yilu114) |
Recbole使用MIT许可证。该项目中的所有数据和代码只能用于学术目的。
该项目得到了中国国家自然科学基金会(第61832017号)的支持。