查看原文
其他

易用又强大的伯乐二期来啦!

AI Box RUC AI Box 2022-07-04

导读

RecBole 你用了吗?是否通过它体验到了轻松复现推荐模型的爽快?是否通过它快速入门推荐系统?是否因为它而跳过了数据处理的纷繁复杂?


易用又强大的推荐算法框架伯乐发布二期啦!


    什么?你还不知道RecBole是啥?快点击下方链接了解一下吧~


伯乐:一个易用、强大的 Pytorch 推荐系统开源库

 

    历时两个月的继续开发、代码重构、bug修复以及社区维护,在开发人员和海内外众多开发者的共同努力下,今天RecBole二期终于来啦!


    话不多说,直接来看看我们的的更新亮点、新特性以及社区维护工作吧!


       

 更新亮点 


1. 速度及效率优化

    我们针对不同方面进行了速度和效率上的优化,具体如下:


优化方向优化措施
提升数据读取速率数据列提前筛选
提升负采样速率优化负采样方式
提高基于GNN的通用推荐模型效率重构稀疏交互张量的结构

    

    *例:数据方面优化前后速度对比如图:


Speed optimization

(Take ml-1m for example)

Method

Train Time

(sec / epoch)

Valid Time 

(sec / epoch)

BPR1.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中,提高了开发的效率和质量。




 新特性添加 


1. 参数更新 
  • benchmark_filename

    为了支持读取提前划分好的数据,我们添加了该参数。用户可以通过设置配置文件或命令行使用该功能,例如在配置文件中写入:

benchmark_filename: [pre-split dataset name]
  • unused_col

    该参数用来指令会在数据与处理中用到但不会在模型中用到的数据列。此外,我们删除了 drop_filter_field  和  rop_preload_weight  两个参数。用户可以在配置文件中写入:
unused_col:  inter: [timestamp]
    表示在数据预处理时会用到 timestamp 这一列,但在模型中不会用到。在GRU4Rec模型实验过程中,使用这一参数能将训练速度提升近40%
  • training_neg_sample_distribution

    该参数用来选择训练时的负采样策略

  • loss_decimal_place and metric_decimal_place

    该参数用于损失和计量结果控制小数点


2. 添加时间条功能

    为了方便用户观察训练和评测的进度,我们添加了时间条功能。




    此外,我们对data部分和evaluation部分的代码进行了重构,提升了框架运行速率,也提高了代码的可读性和可复用性;并修复了部分模型和框架中的bug。更加全面的二期工作如下图:


    如果你想进一步了解,请移步下方链接:
    https://github.com/RUCAIBox/RecBole/releases/tag/v0.2.0



 数据集


    为了支持这个工具包的使用,我们收集整理了28个数据集合(提供本地拷贝),详细请见: https://github.com/RUCAIBox/RecSysDatasets,欢迎大家使用哦~


 社区维护 


    在RecBole一期上线至今仅两个多月的时间里,项目已获得了688个star,众多热心用户积极使用,并给出了很好的反馈。我们在GitHub上收到了共计63个issue,社区非常活跃。


    我们也一直尽力为大家解决问题,持续做出信息回复和代码调整。


    下面简单列举几条有代表性的issue,感兴趣的小伙伴可以去我们的GitHub页面(https://github.com/RUCAIBox/RecBole)查看更多信息哦~


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中读取。



    除了issue之外,我们还开放了discussion板块,在这里,你可以提出使用方面的问题,可以发表自己的使用感受和体验,还可以为RecBole接下来的发展建言献策,例如提出你想加入的模型等。总之,这是一个自由而欢快的地方,我们真心希望可以与大家一同交流进步。欢迎大家积极参与讨论!(不限中英文哦!)


    最后,为了方便中文用户的使用,我们还在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推荐系统开源库



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存