
“世有伯樂,然後有千里馬。千里馬常有,而伯樂不常有。” - - 韓愈《馬說》
主頁|文檔|數據集|紙|博客|模型| 中文版
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號)的支持。