
“世有伯乐 , 然后有千里马。千里马常有 , 而伯乐不常有。” —— 韩愈《马说》
Página inicial | DOCs | Conjuntos de dados | Papel | Blogs | Modelos | 中文版
A Recbole é desenvolvida com base em Python e Pytorch para reproduzir e desenvolver algoritmos de recomendação em uma estrutura unificada, abrangente e eficiente para fins de pesquisa. Nossa biblioteca inclui 91 algoritmos de recomendação, cobrindo quatro categorias principais:
Projetamos um formato de arquivo de dados unificado e flexível e fornecemos o suporte para 43 conjuntos de dados de recomendação de referência. Um usuário pode aplicar o script fornecido para processar a cópia de dados original ou simplesmente baixar os conjuntos de dados processados por nossa equipe.

Figura : Arquitetura geral de recuperação
Para apoiar o estudo de avanços recentes nos sistemas de recomendação, construímos uma biblioteca de recomendação estendida Recbole2.0 que consiste em 8 pacotes para tópicos e arquiteturas atualizados (por exemplo, Debiansed, Fairness e GNNs).
Estrutura de dados geral e extensível. Projetamos estruturas de dados gerais e extensíveis para unificar a formatação e o uso de vários conjuntos de dados de recomendação.
Modelos e conjuntos de dados abrangentes de referência. Implementamos 78 algoritmos de recomendação comumente usados e fornecemos as cópias formatadas de 28 conjuntos de dados de recomendação.
Execução eficiente acelerada por GPU. Otimizamos a eficiência de nossa biblioteca com várias técnicas aprimoradas orientadas para o ambiente da GPU.
Protocolos de avaliação extensos e padrão. Apoiamos uma série de protocolos ou configurações de avaliação amplamente adotados para testar e comparar algoritmos de recomendação.
11/01/2023 : Lançamos Recbole v1.2.0.
11/06/2022 : Lançamos os hiperparâmetros ideais do modelo e seus intervalos de ajuste.
10/05/2022 : Lançamos Recbole v1.1.1.
28/06/2022 : Lançamos o Recbole2.0 com 8 pacotes que consistem em 65 modelos de implementação recentemente .
25/02/2022 : Lançamos o Recbole v1.0.1.
17/09/2021 : Lançamos Recbole v1.0.0.
22/03/2021 : Lançamos Recbole v0.2.1.
15/01/2021 : Lançamos Recbole v0.2.0.
12/10/2020 : 我们发布了 Recbole 小白入门系列中文博客 (持续更新中)。。
12/06/2020 : Lançamos Recbole v0.1.2.
29/11/2020 : Construímos experimentos preliminares para testar o custo de tempo e memória em três conjuntos de dados de tamanho diferente e fornecemos o resultado do teste para referência.
11/03/2020 : Lançamos a primeira versão do Recbole v0.1.1 .
Para melhor atender aos requisitos do usuário e contribuir para a comunidade de pesquisa, apresentamos uma atualização significativa do Recbole na versão mais recente, tornando-a mais amigável e fácil de usar como uma biblioteca abrangente de referência para recomendação. Resumimos essas atualizações em " em direção a uma biblioteca de referência mais fácil de usar e fácil de usar para sistemas de recomendação " e enviamos o documento ao Sigir 2023 . A principal contribuição nesta atualização é introduzida abaixo.
Nossas extensões são feitas em três aspectos principais, a saber, os modelos/conjuntos de dados, a estrutura e as configurações. Além disso, fornecemos documentação mais abrangente e perguntas frequentes bem organizadas para o uso de nossa biblioteca, o que melhora amplamente a experiência do usuário. Mais especificamente, os destaques desta atualização estão resumidos como:
Introduzimos mais operações e configurações para ajudar a comparar o domínio da recomendação.
Melhoramos a simpatia do usuário de nossa biblioteca, fornecendo documentação mais detalhada e perguntas frequentes bem organizadas.
Apontamos várias diretrizes de desenvolvimento para os desenvolvedores de bibliotecas de código aberto.
Essas extensões facilitam muito a reprodução dos resultados de referência e permanecem atualizados com os recentes avanços nos sistemas de recomendação. A comparação de dados entre esta atualização e versões anteriores está listada abaixo.
| Aspecto | Recbole 1.0 | Recbole 2.0 | Esta atualização |
|---|---|---|---|
| Tarefas de recomendação | 4 categorias | 3 tópicos e 5 pacotes | 4 categorias |
| Modelos e conjuntos de dados | 73 modelos e 28 conjuntos de dados | 65 modelos e 8 novos conjuntos de dados | 91 modelos e 43 conjuntos de dados |
| Estrutura de dados | DataSet implementado e Dataloader | Orientado para tarefas | Módulo de dados compatível herdado de Pytorch |
| Recursos contínuos | Incorporação de campo | Incorporação de campo | Incorporação de campo e discretização |
| Execução acelerada por GPU | Utilização de GPU único | Utilização de GPU único | Treinamento multi-GPU e precisão mista |
| Ajuste hiper-parâmetro | Pesquisa em gradiente em série | Pesquisa em gradiente em série | Três métodos de pesquisa em série e paralelos |
| Teste de significância | - | - | Interface disponível |
| Resultados de referência | - | Parcialmente público (GNN e CDR) | Configurações de referência em 82 modelos |
| Uso amigável | Documentação | Documentação | Documentação aprimorada e página de perguntas frequentes |
Recbole funciona com os seguintes sistemas operacionais:
A Recbole requer Python versão 3.7 ou posterior.
Recbole requer a versão 1.7.0 ou posterior. Se você deseja usar o Recbole com a GPU, verifique se a versão Cuda ou Cudatoolkit é 9,2 ou posterior. Isso requer versão do driver nvidia> = 396.26 (para Linux) ou> = 397.44 (para Windows10).
conda install -c aibox recbolepip install recbolegit clone https://github.com/RUCAIBox/RecBole.git && cd RecBole
pip install -e . --verboseCom o código -fonte, você pode usar o script fornecido para uso inicial de nossa biblioteca:
python run_recbole.pyEste script executará o modelo BPR no conjunto de dados ML-100K.
Normalmente, este exemplo leva menos de um minuto. Vamos obter alguma saída como:
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
Se você deseja alterar os parâmetros, como learning_rate , embedding_size , basta definir os parâmetros de comando adicionais conforme necessário:
python run_recbole.py --learning_rate=0.0001 --embedding_size=128Se você deseja alterar os modelos, basta executar o script definindo parâmetros de comando adicionais:
python run_recbole.py --model=[model_name] Abra RecBole/hyper.test e defina vários hiperparâmetros para pesquisar automaticamente na lista de parâmetros. O seguinte tem duas maneiras de pesquisar o melhor hiperparâmetro:
Aqui está um exemplo para 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]']
Defina os parâmetros de comando de treinamento conforme você precisa executar:
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
Observe que --config_files=test.yaml é opcional, se você não tiver nenhuma definição de configuração personalizada, esse parâmetro pode estar vazio.
Esse processamento talvez demore muito para produzir o melhor hiperparâmetro e resultado:
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=?]
Mais informações sobre o ajuste de parâmetros podem ser encontradas em nossos documentos.
Construímos experimentos preliminares para testar o custo de tempo e memória em três conjuntos de dados de tamanho diferente (pequenos, médios e grandes). Para obter informações detalhadas, você pode clicar nos links a seguir.
NOTA: Nossos resultados de teste apenas forneceram o custo aproximado de tempo e memória de nossas implementações na biblioteca Recbole (com base em nosso servidor de máquina). Qualquer feedback ou sugestão sobre as implementações e o teste são bem -vindos. Continuaremos melhorando nossas implementações e atualizaremos esses resultados dos testes.
| Lançamentos | Data |
|---|---|
| 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 |
Como uma estrutura única, desde o processamento de dados, desenvolvimento de modelos, treinamento de algoritmo até avaliação científica, a Recbole possui um total de 11 projetos relacionados ao github, incluindo
Na tabela a seguir, resumimos as contribuições de código aberto dos projetos do GitHub com base no Recbole.
| Projetos | Estrelas | Garfos | Problemas | Puxar solicitações |
|---|---|---|---|---|
| Recuperar | ||||
| Recbole2.0 | ||||
| Recbole-da | ||||
| Recbole-metarec | ||||
| Recbole-debias | ||||
| Recbole-fairrec | ||||
| Recbole-cdr | ||||
| Recbole-gnn | ||||
| Recbole-trm | ||||
| Recbole-PJF | ||||
| Recsysdatasets |
Informe -nos se você encontrar um bug ou tiver alguma sugestão, apresentando um problema.
Congratulamo -nos com todas as contribuições de correções de bugs para novos recursos e extensões.
Esperamos todas as contribuições discutidas no rastreador de questões e passando pelo PRS.
Agradecemos às sugestões perspicazes de @tszumowski, @rowedenny, @deklanw et.al.
Agradecemos às boas contribuições através do PRS de @Rowedenny , @Deklanw et.al.
Se você achar útil para sua pesquisa ou desenvolvimento, cite os seguintes trabalhos: Recbole [1.0], Recbole [2.0] e 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 é desenvolvido pela RUC, BUPT, ECNU e mantido pela RUC.
Aqui está a lista de nossos desenvolvedores principais em cada fase de desenvolvimento. Eles são as almas do Recbole e fizeram contribuições excelentes.
| Tempo | Versão | Desenvolvedores principais | Papel |
|---|---|---|---|
| Junho de 2020 ~ Nov. 2020 | v0.1.1 | Shanlei Mu (@shanleimu), yupeng hou (@hyp1231), Zihan Lin (@Linzihan-BackForward), Kaiyuan Li (@trotfsk) | |
| Nov. 2020 ~ Jul. 2022 | v0.1.2 ~ v1.0.1 | Yushuo Chen (@Chenyushuo), Xingyu Pan (@2017pxy) | |
| Jul. 2022 ~ Nov. 2023 | v1.1.0 ~ v1.1.1 | Lanling Xu (@Sherry-xll), Zhen Tian (@Chenyuwuxin), Gaowei Zhang (@wicknight), Lei Wang (@PaiteSanshi), Junjie Zhang (@Leoleojie) | |
| Nov. 2023 ~ agora | v1.2.0 | Bowen Zheng (@zhengbw0324), chen ma (@yilu114) |
Recbole usa a licença do MIT. Todos os dados e código deste projeto só podem ser usados para fins acadêmicos.
Este projeto foi apoiado pela National Natural Science Foundation of China (nº 61832017).