
"世有伯乐 , 然后有千里马。千里马常有 , 而伯乐不常有。" - 韩愈《马说》 韩愈《马说》
Homepage | Docs | Datensätze | Papier | Blogs | Modelle | 中文版
Recbole wurde auf Basis von Python und Pytorch zur Reproduzierung und Entwicklung von Empfehlungsalgorithmen in einem einheitlichen, umfassenden und effizienten Rahmen für Forschungszwecke entwickelt. Unsere Bibliothek umfasst 91 Empfehlungsalgorithmen, die vier Hauptkategorien abdecken:
Wir entwerfen ein einheitliches und flexibles Datendateiformat und bieten die Unterstützung für 43 Benchmark -Empfehlungsdatensätze. Ein Benutzer kann das bereitgestellte Skript anwenden, um die ursprüngliche Datenkopie zu verarbeiten oder die verarbeiteten Datensätze einfach von unserem Team herunterzuladen.

Abbildung : Gesamtarchitektur neu
Um die Untersuchung der jüngsten Fortschritte in Empfehlungssystemen zu unterstützen, erstellen wir eine erweiterte Empfehlungsbibliothek recBole2.0, die aus 8 Paketen für aktuelle Themen und Architekturen besteht (z. B. Debias, Fairness und GNNs).
Allgemeine und erweiterbare Datenstruktur. Wir entwerfen allgemeine und erweiterbare Datenstrukturen, um die Formatierung und Verwendung verschiedener Empfehlungsdatensätze zu vereinheitlichen.
Umfassende Benchmark -Modelle und Datensätze. Wir implementieren 78 häufig verwendete Empfehlungsalgorithmen und stellen die formatierten Kopien von 28 Empfehlungsdatensätzen bereit.
Effiziente Ausführung von GPU-Beschleunigungen. Wir optimieren die Effizienz unserer Bibliothek mit einer Reihe verbesserter Techniken, die an der GPU -Umgebung ausgerichtet sind.
Umfangreiche und Standardbewertungsprotokolle. Wir unterstützen eine Reihe von weit verbreiteten Bewertungsprotokollen oder -einstellungen zum Testen und Vergleich von Empfehlungsalgorithmen.
11/01/2023 : Wir veröffentlichen Recbole v1.2.0.
11/06/2022 : Wir veröffentlichen die optimalen Hyperparameter des Modells und deren Abstimmungsbereiche.
10/05/2022 : Wir veröffentlichen Recbole v1.1.1.
28.06.2022 : Wir veröffentlichen RecBole2.0 mit 8 Paketen, die aus 65 neu implementierten Modellen bestehen.
25.02.2022 : Wir veröffentlichen Recbole v1.0.1.
17.09.2021 : Wir veröffentlichen Recbole v1.0.0.
22.03.2021 : Wir veröffentlichen Recbole v0.2.1.
15.01.2021 : Wir veröffentlichen Recbole v0.2.0.
10.10.2020 : 我们发布了 Recbole 小白入门系列中文博客(持续更新中)。。
12/06/2020 : Wir veröffentlichen Recbole v0.1.2.
29.11.2020 : Wir haben vorläufige Experimente konstruiert, um die Zeit- und Speicherkosten für drei unterschiedliche Datensätze zu testen, und das Testergebnis zur Referenz bereitgestellt.
11/03/2020 : Wir veröffentlichen die erste Version von Recbole v0.1.1 .
Um die Benutzeranforderungen besser zu erfüllen und zur Forschungsgemeinschaft beizutragen, präsentieren wir eine bedeutende Aktualisierung von RecBole in der neuesten Version, sodass sie benutzerfreundlicher und benutzerfreundlicher als umfassende Benchmark-Bibliothek für Empfehlungen sind. Wir fassen diese Updates in " in Richtung einer benutzerfreundlicheren und benutzerfreundlicheren Benchmark-Bibliothek für Empfehlungssysteme " zusammen und senden das Papier an Sigir 2023 . Der Hauptbeitrag in diesem Update wird unten eingeführt.
Unsere Erweiterungen werden in drei Hauptaspekten hergestellt, nämlich die Modelle/Datensätze, das Framework und die Konfigurationen. Darüber hinaus bieten wir umfassendere Dokumentation und gut organisierte FAQ für die Verwendung unserer Bibliothek, was die Benutzererfahrung weitgehend verbessert. Insbesondere werden die Highlights dieses Updates zusammengefasst als:
Wir führen mehr Vorgänge und Einstellungen ein, um das Benchmarking der Empfehlungsdomäne zu unterstützen.
Wir verbessern die Benutzerfreundlichkeit unserer Bibliothek, indem wir detailliertere Dokumentationen bereitstellen und häufig gestellte Fragen gut organisieren.
Wir weisen mehrere Entwicklungsrichtlinien für die Open-Source-Bibliotheksentwickler auf.
Diese Erweiterungen machen es viel einfacher, die Benchmark-Ergebnisse zu reproduzieren und mit den jüngsten Fortschritten zu Empfehlungssystemen auf dem Laufenden zu bleiben. Der datailed -Vergleich zwischen diesem Update und früheren Versionen ist unten aufgeführt.
| Aspekt | Recbole 1.0 | Wiederumnahme 2.0 | Dieses Update |
|---|---|---|---|
| Empfehlungsaufgaben | 4 Kategorien | 3 Themen und 5 Pakete | 4 Kategorien |
| Modelle und Datensätze | 73 Modelle und 28 Datensätze | 65 Modelle und 8 neue Datensätze | 91 Modelle und 43 Datensätze |
| Datenstruktur | Implementierten Datensatz und Dataloader | Aufgabenorientiert | Kompatibler Datenmodul, das von Pytorch geerbt wurde |
| Kontinuierliche Merkmale | Feldeinbettung | Feldeinbettung | Feldeinbettung und Diskretisierung |
| GPU-Beschleunigte Ausführung | Ein-GPU-Nutzung | Ein-GPU-Nutzung | Multi-GPU und gemischte Präzisionstraining |
| Hyper-Parameter-Abstimmung | Seriengradientsuche | Seriengradientsuche | Drei Suchmethoden sowohl in serieller als auch in parallel |
| Signifikanztest | - - | - - | Verfügbare Schnittstelle |
| Benchmark -Ergebnisse | - - | Teilweise öffentlich (GNN und CDR) | Benchmark -Konfigurationen auf 82 Modellen |
| Freundliche Verwendung | Dokumentation | Dokumentation | Verbesserte Dokumentation und FAQ -Seite |
Recbole funktioniert mit den folgenden Betriebssystemen:
Recbole erfordert Python Version 3.7 oder höher.
Recbole erfordert die Torchversion 1.7.0 oder höher. Wenn Sie Recbole mit GPU verwenden möchten, stellen Sie sicher, dass die CUDA- oder Cudatoolkit -Version 9.2 oder höher ist. Dies erfordert die NVIDIA -Treiberversion> = 396,26 (für Linux) oder> = 397,44 (für Windows10).
conda install -c aibox recbolepip install recbolegit clone https://github.com/RUCAIBox/RecBole.git && cd RecBole
pip install -e . --verboseMit dem Quellcode können Sie das bereitgestellte Skript für die erste Verwendung unserer Bibliothek verwenden:
python run_recbole.pyIn diesem Skript werden das BPR-Modell im ML-100K-Datensatz ausgeführt.
Normalerweise dauert dieses Beispiel weniger als eine Minute. Wir erhalten eine Ausgabe wie:
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
Wenn Sie die Parameter wie learning_rate , embedding_size , ändern möchten, legen Sie einfach die zusätzlichen Befehlsparameter fest, wie Sie benötigen:
python run_recbole.py --learning_rate=0.0001 --embedding_size=128Wenn Sie die Modelle ändern möchten, führen Sie einfach das Skript aus, indem Sie zusätzliche Befehlsparameter einstellen:
python run_recbole.py --model=[model_name] Öffnen Sie RecBole/hyper.test und setzen Sie mehrere Hyperparameter auf die automatische Suche in der Parameterliste. Das Folgende bietet zwei Möglichkeiten, um das beste Hyperparameter zu durchsuchen:
Hier ist ein Beispiel für 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]']
Setzen Sie den Befehlsparametern der Trainingsbefehl, wie Sie ausführen müssen:
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
Beachten Sie, dass --config_files=test.yaml optional ist. Wenn Sie keine Anpassungskonfigurationseinstellungen haben, kann dieser Parameter leer sein.
Diese Verarbeitung dauert möglicherweise lange, bis der beste Hyperparameter und Ergebnis ausgibt:
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=?]
Weitere Informationen zur Parameterabstimmung finden Sie in unseren Dokumenten.
Wir haben vorläufige Experimente konstruiert, um die Zeit- und Speicherkosten für drei unterschiedliche Datensätze (klein, mittel und groß) zu testen. Für detaillierte Informationen können Sie auf die folgenden Links klicken.
Hinweis: Unsere Testergebnisse gaben nur die ungefähren Zeit- und Speicherkosten unserer Implementierungen in der RecBole -Bibliothek (basierend auf unserem Maschinenserver). Feedback oder Vorschläge zu Implementierungen und Tests sind willkommen. Wir werden unsere Implementierungen weiter verbessern und diese Testergebnisse aktualisieren.
| Veröffentlichungen | Datum |
|---|---|
| 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 |
Als One- Stop
In der folgenden Tabelle fassen wir die Open -Source -Beiträge von Github -Projekten auf der Grundlage von Recbole zusammen.
| Projekte | Sterne | Gabeln | Probleme | Anfragen ziehen |
|---|---|---|---|---|
| Wiederholung | ||||
| Recbole2.0 | ||||
| Recbole-da | ||||
| Recbole-Metarec | ||||
| Recbole-Debias | ||||
| Recbole-Fairrec | ||||
| Recbole-Cdr | ||||
| Recbole-Gnn | ||||
| Recbole-TRM | ||||
| Recbole-PJF | ||||
| Recsysdataseets |
Bitte teilen Sie uns mit, ob Sie auf einen Fehler stoßen oder Vorschläge haben, indem Sie ein Problem einreichen.
Wir begrüßen alle Beiträge von Fehlerbehebungen bis hin zu neuen Funktionen und Erweiterungen.
Wir erwarten alle Beiträge, die im Themen -Tracker diskutiert werden und PRs durchlaufen.
Wir danken den aufschlussreichen Vorschlägen von @tszumowski, @rowedenny, @deklanw et.al.
Wir danken den netten Beiträgen durch PRs von @rowedenny , @deklanw et al.
Wenn Sie RecBole für Ihre Forschung oder Entwicklung nützlich finden, zitieren Sie bitte die folgenden Arbeiten: RecBole [1.0], RecBole [2.0] und 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 wird von RUC, Bupt, ECNU entwickelt und von RUC aufrechterhalten.
Hier ist die Liste unserer Hauptentwickler in jeder Entwicklungsphase. Sie sind die Seelen von Recbole und haben herausragende Beiträge geleistet.
| Zeit | Version | Führende Entwickler | Papier |
|---|---|---|---|
| Juni 2020 ~ Nov. 2020 | v0.1.1 | Shanlei mu (@shanleimu), yupeng hou (@hyp1231), Zihan Lin (@Linzihan-Backforward), Kaiyuan li (@tsotfsk) | |
| Nov. 2020 ~ Jul. 2022 | v0.1.2 ~ v1.0.1 | Yushuo Chen (@chenyushuo), Xingyu Pan (@2017pxy) | |
| Jul. 2022 ~ November 2023 | v1.1.0 ~ v1.1.1 | Lanling Xu (@sherry-xll), Zhen Tian (@chenyuwuxin), Gaowei Zhang (@wicknight), Lei Wang (@Paitesanshi), Junjie Zhang (@leoleojie) | |
| November 2023 ~ Jetzt | v1.2.0 | Bowen Zheng (@Zhengbw0324), Chen Ma (@yilu114) |
Recbole verwendet die MIT -Lizenz. Alle Daten und Code in diesem Projekt können nur für akademische Zwecke verwendet werden.
Dieses Projekt wurde von der National Natural Science Foundation in China (Nr. 61832017) unterstützt.