易用又强大的伯乐二期来啦!
导读
RecBole 你用了吗?是否通过它体验到了轻松复现推荐模型的爽快?是否通过它快速入门推荐系统?是否因为它而跳过了数据处理的纷繁复杂?易用又强大的推荐算法框架伯乐发布二期啦!
什么?你还不知道RecBole是啥?快点击下方链接了解一下吧~
伯乐:一个易用、强大的 Pytorch 推荐系统开源库
历时两个月的继续开发、代码重构、bug修复以及社区维护,在开发人员和海内外众多开发者的共同努力下,今天RecBole二期终于来啦!
话不多说,直接来看看我们的的更新亮点、新特性以及社区维护工作吧!
更新亮点
1. 速度及效率优化
我们针对不同方面进行了速度和效率上的优化,具体如下:
优化方向 | 优化措施 |
提升数据读取速率 | 数据列提前筛选 |
提升负采样速率 | 优化负采样方式 |
提高基于GNN的通用推荐模型效率 | 重构稀疏交互张量的结构 |
*例:数据方面优化前后速度对比如图:
Speed optimization (Take ml-1m for example) | ||
Method | Train Time (sec / epoch) | Valid Time (sec / epoch) |
BPR | 1.93 -> 1.87 | 7.43 -> 4.46 |
FM | 19.33 -> 2.29 | 2.34 -> 0.13 |
Wide&Deep | 26.13 -> 3.26 | 2.95 -> 0.13 |
GRU4Rec | 7.78 -> 4.30 | 0.11 -> 0.04 |
KGAT | 9.95 -> 7.08 | 8.63 -> 4.15 |
2. 添加12个新模型
在原有53个模型的基础上又添加了12个新的模型:
4个支持基于AE的General类模型: CDAE, MacridVAE, MultiVAE, MultiDAE.
6个Sequential类模型: RepeatNet, Fossil, HGN, SHAN, NPE, HRM.
1个图嵌入方法模型: LINE.
1个外部算法库模型: XGBoost,支持其数据接口、训练接口,以及相应预测及评估功能。
模型更加多样化,可以更好地满足用户对模型的需求。
3. 支持Context-aware推荐模型的排序评测方法
在一期中Context-aware模型并不支持排序评测,评测一般使用CTR方法和相应指标——AUC和LogLoss,在二期中我们使其支持了排序评测和相应的评测指标,例如MRR、NDCG等。
4. 添加Case study功能
为了方便用户分析模型的结果,我们添加了Case study功能。该功能使得用户可以针对特定的user id,方便地获取其对各商品的打分,以及给出topk的商品推荐。
*例如,训练好模型之后,以下接口通过给定一个user id序列、模型和测试集,可以得到模型在测试集上对这些用户关于所有商品的打分。
score = full_sort_scores(uid_series, model, test_data)
5. 添加CI (Continuous Integration)模块
我们将CI (Continuous Integration,持续集成)添加到RecBole中,提高了开发的效率和质量。
新特性添加
benchmark_filename
为了支持读取提前划分好的数据,我们添加了该参数。用户可以通过设置配置文件或命令行使用该功能,例如在配置文件中写入:
benchmark_filename: [pre-split dataset name]
unused_col
drop_filter_field
和 rop_preload_weight
两个参数。用户可以在配置文件中写入:unused_col:
inter: [timestamp]
training_neg_sample_distribution
该参数用来选择训练时的负采样策略
loss_decimal_place
andmetric_decimal_place
该参数用于损失和计量结果控制小数点
为了方便用户观察训练和评测的进度,我们添加了时间条功能。
数据集
社区维护
Q1
框架里的batch_size的具体定义是什么?为什么运行的时候会收到警告信息呢?
在RecBole的dataloader中,batch_size的意义是一个batch中交互记录数目的上界。一方面,这样的定义更容易计算和控制GPU显存的使用。例如,在比较不同数据集的时候,你不必改变batch_size的值,因为GPU显存的使用不会改变太多;另一方面,在top-k评测时,我们规定一个user的所有记录都分在一个batch中。为了使所有user都满足这个条件,因此可能会尝试把更多的交互记录放入一个batch里,但是由于batch_size只是一个上限,框架会调用 _batch_size_adaptation() 来动态调整batch size,当batch_size 需要调整变大的时候,框架会输出一条警告信息。
Q2
框架是否支持将数据划分设置成只有train和test两个部分?
可以通过参数 benchmark_filename 来设置读取提前做好数据划分的数据集。例如将其设置成:
benchmark_filename: ['part1', 'part2', 'part3']
假设原数据集名称为my_data(即config['dataset']= 'my_data'),则我们会从以下三个文件读取数据:
my_data.part1.inter(train数据)
my_data.part2.inter(valid数据)
my_data.part3.inter(test数据)
如果valid部分数据不存在,用户可以在my_data.part2.inter的第一行写入描述数据的信息,不用填入数据。这样一来,训练数据就会从part1中读取,测试数据就会从part3中读取。
最后,为了方便中文用户的使用,我们还在CSDN上发布了小白入门系列的博客,对大家快速上手我们的框架很有帮助,如图:
欢迎有需要的朋友来看~链接指路:
https://blog.csdn.net/Turinger_2000/article/details/111182852
我们衷心感谢所有向我们提出问题,指明发展方向和提供发展建议的朋友们,RecBole的蓬勃发展离不开每个用户的支持,希望RecBole可以在大家的帮助和敦促下越做越好。
以上就是RecBole二期的主要更新内容啦!
还在等什么呢?点击阅读原文,马上安装RecBole框架,体验一下船新版本吧!
"伯乐"推荐系统库将承诺持续开发维护,保持版本稳定,同时不断规划更多实用、强大的功能。
最后,我们郑重感谢下列GitHub开发者,他们或是我们提出了非常深刻有用的建议,或是向我们的项目提交了很棒的代码,为RecBole的成长做出了很大贡献。他们是: @tszumowski, @rowedenny, @deklanw
我们仍将继续公开招募开发团队成员,从贡献单一代码到核心模块的开发,都欢迎大家的加入。欢迎小伙伴们联系recbole@outlook.com加入我们~
有好的建议或意见也欢迎关注(点击右边链接关注➡️)AI Box公众号后台留言或者在Github的issues中提问。
Reference
[1]Wayne Xin Zhao, Shanlei Mu, Yupeng Hou, Zihan Lin, Kaiyuan Li, Yushuo Chen,Yujie Lu, Hui Wang, Changxin Tian, Xingyu Pan, Yingqian Min, Zhichao Feng,Xinyan Fan, Xu Chen, Pengfei Wang, Wendi Ji, Yaliang Li, Xiaoling Wang, andJi-Rong Wen. 2020. RecBole: Towards a Unified, Comprehensive and Efficient Framework for Recommendation Algorithms. arXiv preprint arXiv:2011.01731(2020).
更多开源工具推荐
CRSLab:可能是最适合你的对话推荐系统开源库
"妙笔"生花:一个易用、高效的文本生成开源库
伯乐:一个易用、强大的PyTorch推荐系统开源库