
「世有伯乐、然后有千里马。千里马常有、而伯乐不常有。」 -
ホームページ|ドキュメント|データセット|論文|ブログ|モデル| 中文版
Recboleは、PythonとPytorchに基づいて開発され、研究目的のための統一された包括的な効率的なフレームワークで推奨アルゴリズムを再現および開発しています。ライブラリには、4つの主要なカテゴリをカバーする91の推奨アルゴリズムが含まれています。
統一された柔軟なデータファイル形式を設計し、43のベンチマーク推奨データセットのサポートを提供します。ユーザーは、提供されたスクリプトを適用して、元のデータコピーを処理するか、チームが処理されたデータセットをダウンロードするだけです。

図:レコボール全体のアーキテクチャ
推奨システムにおける最近の進歩の研究をサポートするために、最新のトピックとアーキテクチャ(例えば、Debiased、Fiarness、GNNSなど)の8つのパッケージで構成される拡張推奨ライブラリRecbole2.0を構築します。
一般的および拡張可能なデータ構造。一般的なデータ構造と拡張可能なデータ構造を設計して、さまざまな推奨データセットのフォーマットと使用を統合します。
包括的なベンチマークモデルとデータセット。一般的に使用される推奨アルゴリズム78を実装し、28の推奨データセットのフォーマットされたコピーを提供します。
効率的なGPUアクセラレーション実行。 GPU環境に向けた多くの改善された技術を使用して、ライブラリの効率を最適化します。
広範な標準評価プロトコル。推奨アルゴリズムをテストおよび比較するために、広く採用されている一連の評価プロトコルまたは設定をサポートします。
11/01/2023 :Recbole v1.2.0をリリースします。
11/06/2022 :モデルの最適なハイパーパラメーターとそのチューニング範囲をリリースします。
10/05/2022 :Recbole v1.1.1をリリースします。
06/28/2022 : 65の新しく実装されたモデルで構成される8つのパッケージでRecbole2.0をリリースします。
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 :3つの異なるサイズのデータセットで時間とメモリのコストをテストするための予備実験を構築し、参照のテスト結果を提供しました。
11/03/2020 :Recbole V0.1.1の最初のバージョンをリリースします。
ユーザーの要件をより適切に満たし、研究コミュニティに貢献するために、最新バージョンでRecboleの大幅な更新を提示し、推奨用の包括的なベンチマークライブラリとしてよりユーザーフレンドリーで使いやすいものにします。これらの更新は、「よりユーザーフレンドリーで使いやすいベンチマークライブラリ用の推奨システム用」に向けて要約し、 Sigir 2023に論文を提出します。このアップデートの主な貢献を以下に紹介します。
拡張機能は、モデル/データセット、フレームワーク、および構成の3つの主要な側面で作成されています。さらに、ライブラリの使用のために、より包括的なドキュメントとよく組織されたFAQを提供します。これにより、ユーザーエクスペリエンスが大幅に向上します。より具体的には、このアップデートのハイライトは次のように要約されています。
推奨ドメインのベンチマークを支援するために、より多くの操作と設定を紹介します。
より詳細なドキュメントとよく整理されたよくある質問を提供することにより、ライブラリのユーザーの友情を改善します。
オープンソースライブラリ開発者向けのいくつかの開発ガイドラインを指摘します。
これらの拡張機能により、ベンチマークの結果を再現し、推奨システムの最近の進歩を最新の状態に保つことができます。このアップデートと以前のバージョンのデータセイル比較は、以下にリストされています。
| 側面 | レコボール1.0 | レコボール2.0 | この更新 |
|---|---|---|---|
| 推奨タスク | 4つのカテゴリ | 3つのトピックと5つのパッケージ | 4つのカテゴリ |
| モデルとデータセット | 73モデルと28のデータセット | 65モデルと8つの新しいデータセット | 91モデルと43のデータセット |
| データ構造 | 実装されたデータセットとデータローダー | タスク指向 | Pytorchから継承された互換性のあるデータモジュール |
| 連続機能 | フィールド埋め込み | フィールド埋め込み | フィールド埋め込みと離散化 |
| GPUアクセラレーションの実行 | シングル-GPU使用率 | シングル-GPU使用率 | マルチGPUおよび混合精密トレーニング |
| ハイパーパラメーターチューニング | シリアル勾配検索 | シリアル勾配検索 | シリアルとパラレルの両方で3つの検索方法 |
| 有意性テスト | - | - | 利用可能なインターフェイス |
| ベンチマークの結果 | - | 部分的に公開(GNNおよびCDR) | 82モデルのベンチマーク構成 |
| フレンドリーな使用 | ドキュメント | ドキュメント | 改善されたドキュメントとFAQページ |
Recboleは次のオペレーティングシステムで動作します。
RecboleにはPythonバージョン3.7以降が必要です。
Recboleには、トーチバージョン1.7.0以降が必要です。 RecboleをGPUで使用する場合は、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ソースコードを使用すると、Libraryの初期使用に提供されたスクリプトを使用できます。
python run_recbole.pyこのスクリプトは、ML-100KデータセットでBPRモデルを実行します。
通常、この例には1分もかかりません。次のような出力を取得します。
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を開き、パラメーターリストで自動検索するためにいくつかのハイパーパラメーターを設定します。以下には、最高のハイパーパラメーターを検索する2つの方法があります。
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=?]
パラメーターチューニングの詳細については、ドキュメントをご覧ください。
3つの異なるサイズのデータセット(小、中、大)で時間とメモリのコストをテストするための予備実験を構築しました。詳細については、次のリンクをクリックできます。
注:テスト結果は、Recbole Library(マシンサーバーに基づく)での実装のおおよその時間とメモリコストのみを与えました。実装とテストに関するフィードバックや提案は歓迎されます。実装を改善し続け、これらのテスト結果を更新します。
| リリース | 日付 |
|---|---|
| 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プロジェクトのオープンソースの貢献を要約します。
| プロジェクト | 星 | フォーク | 問題 | リクエストをプルします |
|---|---|---|---|---|
| レコボール | ||||
| Recbole2.0 | ||||
| Recbole-da | ||||
| Recbole-Metarec | ||||
| レコボール・デビアス | ||||
| Recbole-fairrec | ||||
| Recbole-Cdr | ||||
| Recbole-gnn | ||||
| Recbole-Trm | ||||
| Recbole-PJF | ||||
| recsysdatasets |
バグに遭遇した場合、または問題を提出して提案がある場合はお知らせください。
バグ修正から新機能や拡張機能へのすべての貢献を歓迎します。
Issue Trackerおよび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 }
}Recboleは、RUC、Bupt、Ecnuによって開発され、RUCによって維持されています。
各開発フェーズのリード開発者のリストは次のとおりです。彼らはレコボールの魂であり、顕著な貢献をしました。
| 時間 | バージョン | リード開発者 | 紙 |
|---|---|---|---|
| 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ライセンスを使用します。このプロジェクトのすべてのデータとコードは、学術目的でのみ使用できます。
このプロジェクトは、中国国立自然科学財団(No. 61832017)によってサポートされていました。