查看原文
其他

首次公开超参配置!更用户友好的伯乐四期来啦!

徐澜玲 RUC AI Box 2022-12-14

导读

RecBole 你用过了吗?作为一个拥有从数据处理、模型开发、算法训练到科学评测的一站式全流程托管框架,伯乐从 2020 年 11 月 15 日 正式发布起,截至今天已经正式运营了 年。在此期间,社区活跃度稳定上升,用户数量不断增长,我们主库的 GitHub repo 已经获得了近 2.3k 个 star 和 426 个 fork。与此同时,2022 年 6 月 正式亮相的 RecBole2.0 涵盖了从数据到模型的 8 个最新主题和方向,为推荐系统多个领域的研究提供了易用又强大的代码工具库!

2022 年 11 月,推荐算法框架伯乐(RecBole)又双叒叕发布新版本啦!

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


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

2020-11-05

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

2021-01-15

咚咚咚!你期待的RecBole三期来了!

2021-09-17

8个扩展子包!RecBole推出2.0!

2022-07-04

自 2020 年 11 月正式亮相以来,伯乐一共发布了 7 个版本,包含伯乐一期、二期、三期和这次的四期。同时今年上半年我们在 RecBole2.0 中从数据和模型两个角度对主库进行扩展,推出了 8 个扩展工具包。现如今,伯乐成为了同时拥有 GitHub 仓库、数据集仓库、论文、主页网站和 API 文档的推荐系统代码库,相关的代码仓库共计 11 个,开源影响与日俱增,致力于推进推荐系统开源社区的发展。


与此同时,伯乐的主库论文和 2.0 版本的论文分别被 CIKM 2021 Resource Track 和 CIKM 2022 Resource Track (Best Resource Paper Runner-up) 接收。



这些成果持续激励着我们的开发团队不断进步,向着国际一流推荐系统工具库的目标迈进!在伯乐现有框架的基础上,我们团队综合考虑了与时俱进的科研需求和用户的反馈意见,花费近三个月的时间进行了一次大规模的版本更新!在伯乐团队的不懈努力下,RecBole 四期(v1.1.1)终于来啦!


本次更新的伯乐四期主要有四个亮点:①更灵活的数据处理;②更高效的 GPU 利用;③可复现的基准结果;④更用户友好的说明文档。为了便于用户使用,我们团队针对此次更新编写了论文并提交到了 arXiv 网站上,欢迎大家阅读我们的论文和 Release Note v1.1.1 来了解更多技术细节~


  • 论文地址:

    • 1.0:https://doi.org/10.1145/3459637.3482016

    • 2.0:https://doi.org/10.1145/3511808.3557680

    • 1.1.1:https://arxiv.org/abs/2211.15148

  • 项目主页地址:

    • https://recbole.io

  • RecBole (主站|本次发布):

    • https://github.com/RUCAIBox/RecBole/releases/tag/v1.1.1

  • RecSysDatasets (数据集|本次更新):

    • https://github.com/RUCAIBox/RecSysDatasets


 更新亮点 

1. 更灵活的数据处理

我们用 PyTorch 接口对整个数据流框架进行了如下图所示的重构和封装,并针对不同类模型的特点新增了数据处理接口,包括序列模型的序列增强、针对上下文模型的连续特征离散化、基于知识模型的知识图谱过滤以及基于流行度负采样的自适应权重,使得研究人员能高效地利用最新的主流数据处理方法。



对于数据处理,我们的更新主要体现在以下四个方面:

1.1 数据模块的 PyTorch 封装

更新前的 Dataset 和 Dataloader 是我们为伯乐的推荐系统定制的数据模块,为了进一步提升数据框架的可扩展性和可复用性,我们在此次更新中分别使用 PyTorch 的 torch.utils.data.Dataset 和 torch.utils.data.Dataloader 对接口进行了封装。
DataLoader 类在给定的 Dataset 类上提供了一个可迭代的方法,每次迭代过程分为两个阶段:索引采样 (index sampling) 和数据收集 (data collection)。前者生成采样索引,后者在 collate_fn(·) 的接口中实现。
兼容后的数据模块支持多种高效机制,如锁页内存、数据预取和并行处理等 PyTorch 内置的 API
1.2 知识图谱的过滤与增强
在这次更新中,我们针对基于知识图谱的推荐模型新增了两种数据预处理方法:
一方面,推荐模型在数据集预处理的时候,通常会对不活跃的用户和不流行的商品进行 k 核过滤 (即 k-core filtering [1])。而在涉及知识图谱的时候,三元组的冗余结点和关系同样需要过滤处理。更新后我们可以利用参数 entity_kg_num_interval 和  relation_kg_num_interval 对知识图谱的结点和关系也进行 k 核过滤,以缓解噪声问题。
另一方面,为知识图谱的三元组构造反向边的对称关系也是常用的预处理操作。通过改变新增布尔参数 kg_reverse_r 的值,我们可以选择是否为知识图谱的三元组构造反向边的关系,默认为 False
1.3 连续特征的离散化
在基于上下文的模型中,用户和物品的特征交互至关重要,而在四期的更新中我们新增了对于连续特征的离散化处理。对于数值特征,我们支持两种主流表示方法:字段向量和特征离散化。
字段向量 (field embedding) 是学术界常用的方法,同一字段中的特征共享一个统一的嵌入表示,并将其与对应的权重相乘,得到各自的特征表示。
同时在最近的工业推荐系统,倾向于使用离散化方法 (discretization) 来处理连续的数字特征。通过离散化,数字特征被转换为不同的特征桶。我们支持两种广泛使用的离散化方法,即等距离散化和对数离散化。
等距离散化 (equal distance discretization) 将数字特征划分为具有相同宽度的多个桶。对数离散化 (logarithm discretization) 是由 Kaggle 的 Criteo 广告预测的冠军提出的。通过对数离散化,每个数字特征都通过对数运算进行转换。
在标准化的数据结构中,每个特征都由一个由 连续值和 离散值组成的元组表示。对于字段向量,连续值为权重,离散值固定为 1;而对于离散化,其连续值固定为 1,离散值由离散化方法来确定。也就是说,具有相同离散值的特征共享统一的嵌入表示,并将其与连续值相乘。因此,我们可以利用统一的特征表示同时支持字段向量和离散化方法。
1.4 负采样器的重构升级
在隐式交互的推荐系统中,负采样模块提供的负例信息对推荐模型的结果至关重要。本次更新重构了负采样的模块,将相关的配置都统一放在了 train_neg_sample_args 这个字典格式的参数中,包括负例的分布 distribution,负例的个数 sample_num,是否进行动态负采样的 dynamic 以及动态负采样时候选负例的个数 candidate_num
通过选择不同的负采样参数配置,伯乐目前支持三种经典的负采样方法:随机负采样 (RNS, random negative sampling)、流行度负采样 (PNS, popularity-biased negative sampling) 以及动态负采样 (DNS, dynamic negative sampling)。
对于 PNS,我们借鉴了 word2vec 的负采样思想,设置了一个超参数  来控制流行度对 PNS 的影响。形式化来看,一个物品成为某用户负例的概率满足 ,其中  是所有用户和物品 的交互次数之和。当  为正时,流行商品更有可能被视为负样本;而负  则相反,从而兼容低流行度和高流行度的负采样器。

2.更高效的 GPU 利用

伯乐一直支持使用 GPU 来加速推荐模型的训练和验证过程,这次更新我们通过分布式计算、混合精度训练以及超参多种数调优策略进一步提升了伯乐的效率。
2.1 分布式计算
近年来大型的模型架构增加了对机器计算能力的需求,单个 GPU 难以高效运行拥有庞大参数数量的模型。在效率优化的方法中,分布式计算是一种经典的方法。在此更新中,我们提供了一种基于 torch.nn.parallel.DistributedDataParallel 的多 GPU 和多机器训练方法,分布式计算环境的设置为:
from recbole.quick_start import run_recboles
import torch.multiprocessing as mp
args = dict(
    model = 'BPR', dataset = 'ml-100k',
    config_file_list = ['test.yaml'], port = '5678',
    world_size = 8, nproc = 4, group_offset = 0
)
mp.spawn(
    run_recboles, 
    args=(args.model, args.dataset, config_file_list, args.ip, args.port, args.world_size, args.nproc, args.group_offset), 
    nprocs=args.nproc
)
为了直观体现多 GPU 对模型的加速作用,我们分析了 MovieLens-1M 数据集中,BPR 模型在不同 GPU 数量下的计算效率。如下图所示,随着 GPU 数量的增加,训练和评估时间逐渐减少,显示了分布式计算的加速效果。


2.2 混合精度训练
混合精度训练是一种结合了半精度 (FP16) 和单精度 (FP32) 的模型训练优化技术,其有两方面的优势:一方面加速了模型训练,使用 Tensor Core 技术的很多 GPU 上半精度操作的吞吐量,是相同 GPU 硬件上单精度的八倍;另一方面节省了内存使用,半精度所需的存储空间是单精度的一半,从而大大减少了占用的内存。
我们通过实验验证了 CFKG 和 NNCF 模型在是否使用混合精度训练下的性能,由下表可以观察到,混合精度下的性能几乎相同甚至更好,但训练时间大大减少。经过混合精度训练后,CFKG 和 NNCF 模型在 MovieLens-1M 数据集上的训练速度分别提高了 14.4% 和 88.3%

2.3 并行的超参数调优策略

超参数调优的策略决定了搜索模型最优参数所需的时间。我们在新版本中提供了三种超参数优化策略供用户选择,即网格搜索 (Grid Search)、随机搜索 (Random Search) 和贝叶斯优化搜索 (Bayesian Hyper-opt),都是基于 hyperopt 库来实现,可以通过 algo 参数进行设置。

我们进行了实验来比较三种调优策略在 LightGCN 和 KGAT 模型在 MovieLens-1M 数据集上的性能。可以观察到随机搜索和贝叶斯优化搜索都可以找到较好的超参数组合,而搜索时间比使用穷举法的网格搜索更短。

此外,通过引入参数调优工具 Ray,伯乐现在的版本支持并行地搜索超参数,从而进一步提升了模型调优的效率。

3.更全面的基准开源代码库
基准数据集、基准工具和参数配置是推荐系统基准开源代码库的三个关键方面。伯乐之前的版本侧重于前两个部分,此次更新进一步将处理好的基准数据集数量从 28 个扩展到 41 个,同时首次公开了伯乐中所有方法的超参数调节范围和推荐的参数设置,方便用户复现模型结果。
3.1 扩展的基准数据集
伯乐中预处理好的原子文件统一了推荐系统公开数据集的格式,省去了数据对齐的工作。为了进一步丰富伯乐的基准数据集,我们在现有 28 个数据集的基础上新增加了 13 个公开数据集。
新增的数据集有三个特点:
  • 多领域. 新增加的推荐数据集涵盖了电子商务、电影、餐厅和书籍的类别,拓宽了工具库的研究应用场景。
  • 多版本. 随着时间的推移,经典推荐数据集的信息也在不断更新。以 Yelp 数据集为例,学术论文中普遍使用的版本为 Yelp 人员在 2018 年挑战赛中发布的版本,但挑战赛的网站 (https://www.yelp.com/dataset/challenge) 已经不再被维护,Yelp 官网 (https://www.yelp.com/dataset) 提供的是 2022 年的版本。为了厘清不同版本的数据集,我们按年份整理了两个常用推荐数据集的不同版本,即分别在 2018 年、2020 年、2021 年和2022 年发布的 Yelp 数据集,以及亚马逊评论数据集在 2014 年发布的 24 个子类和 2018 年发布的 29 个子类,增强了基准数据集的可持续性。
  • 多特征. 用户和物品的特征属性对于基于内容或上下文的推荐任务至关重要。此次更新的大多数数据集都包含用户或物品的特征属性,这有助于公平感知推荐等新兴研究方向的发展。
3.2 可复现的超参数配置
为了构建推荐系统领域一个全面的基准工具库,我们首次公开了伯乐所有模型的超参数调节范围和推荐的参数设置,在主页 (https://recbole.io/hyperparameters) 提供了四种类型的推荐模型各在三个基准数据集的推荐超参数配置。
伯乐此次公开的模型超参数配置有以下四个特点:
  • 有代表性的基准数据集
    MovieLens-1M 作为一个拥有 3000 多引用次数的经典电影推荐数据集,不仅具有时间戳信息和电影的特征属性,还可以将物品链接到知识图谱,因此我们将其用作四种模型的基准数据集。
    对于通用和序列推荐模型,我们综合考虑了流行度、领域和规模,选择了 2022 年最新的 Yelp 数据集和 2018 年的亚马逊图书集作为基准。与此同时,Criteo 和 Avazu 是点击率预测的两个常用数据集,也是我们上下文感知模型的基准数据集。此外,我们使用 KB4Rec 中三个与知识图谱 Freebase 链接的推荐数据集用于知识感知的推荐模型。
    为了确保数据质量,我们对用户和物品应用了 10 核过滤来筛选不活跃的用户和不流行的物品。我们还对知识感知模型中的结点和关系使用了 5 核过滤。关于数据划分策略,我们采用留一法划分了序列数据,而对其他三种类型,我们以 8:1:1 的比例将数据分成训练/验证/测试集。
  • 全面的推荐模型
    RecBole 中有四种类型的推荐模型,包括通用推荐、序列推荐、基于内容的推荐以及基于知识的推荐,共涉及 83 个推荐模型。对于每类推荐模型,我们都在官网上公布了三个基准数据集的超参数调节范围和推荐的最优配置。同时,我们的团队欢迎社区贡献者共同努力,持续更新伯乐各个模型的最优超参数,让模型的结果更具有可复现性。
    在不久的将来,我们考虑公布 2.0 版本 [2] 中八个子包的超参数配置,涵盖元学习、跨域推荐、公平性推荐等新兴方向,致力于打造推荐系统领域更全面的基准评测工具库。
  • 精细的超参数调优
    我们使用 梯度搜索策略 到每个模型在各自基准数据集上的最优超参数。对于超参数的搜索范围,我们遵循 原论文和源码 中的设置,并根据实际的训练情况微调特定的参数。而学习率和正则化值等通用的超参数调整范围在同一数据集中保持相对一致性。同时,同类模型的超参数调整范围也尽量保证了可比性,例如基于图神经网络的模型中,卷积层数量的超参数搜索范围相同,进一步保证了使用伯乐库进行超参数调优的合理性。
  • 可复现的参数配置
    为了确保可复现性,我们将数据集和模型的配置文件、超参数调整范围以及最佳参数都详细地记录在了伯乐的官网上,以供研究者参考。硬件方面,我们的实验都是在 12 GB 内存的 Nvidia GPU 上执行的,CUDA 的版本是 11.4。根据我们的详细配置,研究人员可以方便地复现经典推荐模型的基准结果。

4.更用户友好的文档说明

作为一个用户友好的推荐工具库,RecBole 涵盖了代码库、发表的论文、导航网站、基准测试结果和 API 文档。为了进一步改善用户体验,我们在 1.1.1 的新版本中对网站和 API 使用文档进行了优化升级。
一方面,我们更新了伯乐的官方网站,新增了基准结果的显示页面和 RecBole2.0 中所有子包的说明页。同时我们将基于伯乐实现的 130+ 个推荐模型都整合在了模型页面,用户可以快速检索到所需的模型实现信息。此外,我们还为 GitHub 上 11 个伯乐相关的代码库添加了一个统计表,以便用户可以快速了解伯乐对开源系统的贡献。
另一方面,我们更新了 API 的使用手册,便于新入门者快速上手。对于模型训练,我们添加了自定义训练策略的例子。同时,我们添加了一个条目来演示多 GPU 训练的各种情况,包括单 GPU、单机多 GPU 和多机多 GPU 的训练实例,为并行化训练提供使用样例。此外,基于用户的实际使用需求,我们还为每种类型的推荐模型都提供了详细的运行步骤。
通过全面的网站导航和细致的说明文档,新老用户都可以快速上手本次更新的全部功能。在使用过程中如果觉得现有文档还有补充的地方,欢迎通过  issue 的方式向我们反馈,我们团队将持续跟进用户的意见,与时俱进地确保伯乐的用户友好性。

 社区维护


截至 2022 年 11 月 30 日,RecBole 已经收获 2.3k 个 Star,426次fork,并解决了 474 个 issue 和 923 个 PRRecBole 已经成为一款知名度较高的推荐算法库。

RecBole 的成长离不开我们的开发团队,本次伯乐四期开发团队名单如下:

  • Lead developer: 徐澜玲,田震
  • Core developer: 张高玮,王磊,张君杰

  • Participant: 李依凡,郑博文

  • Adviser:侯宇蓬,潘星宇,陈昱硕

我们团队一直秉持着认真负责的工作态度和不怕吃苦的工作精神,并向着将 RecBole 打造为国际知名开源推荐算法库的目标而努力奋斗。我们仍将继续公开招募开发团队成员,欢迎小伙伴们联系 recbole@outlook.com 加入伯乐的开发团队!我们也衷心感谢所有向我们提出问题,指明发展方向和提供发展建议的朋友们,RecBole 的蓬勃发展离不开每位用户的支持。未来,我们将不断更新,使其更加灵活、与时俱进和用户友好。希望 RecBole 可以在大家的帮助和敦促下越做越好!


以上就是 RecBole 四期的主要更新内容啦!还在等什么呢?点击阅读原文,马上安装 RecBole 框架,体验一下船新版本吧!







Reference

[1] Zhao W X, Mu S, Hou Y, et al. Recbole: Towards a unified, comprehensive and efficient framework for recommendation algorithms[C]//Proceedings of the 30th ACM International Conference on Information & Knowledge Management. 2021: 4653-4664.

[2] Zhao W X, Hou Y, Pan X, et al. RecBole 2.0: Towards a More Up-to-Date Recommendation Library[C]//Proceedings of the 31st ACM International Conference on Information & Knowledge Management. 2022: 4722-4726.

[3] Xu L, Tian Z, Zhang G, et al. Recent Advances in RecBole: Extensions with more Practical Considerations[J]. arXiv preprint arXiv:2211.15148, 2022.

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

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