配合使用效果更佳: Parameter-Efficient Transfer from Sequential Behaviors for User Modeling and Recommendation
大家好, 今天为大家分享的是来自腾讯的一篇收录到顶会SIGIR的一篇论文, Parameter-Efficient Transfer from Sequential Behaviors for User Modeling and Recommendation,论文共有11页,我大概会用35分钟左右的时间为大家进行讲述,如果有小伙伴之前有看过这篇文章,那么在讲述的过程中发现有些遗漏或者理解有偏差的话,欢迎及时指正; 现在正式开始,
首先介绍一下作者,一作是原发杰博士, 攻读博士及腾讯工作期间主要从事机器学习相关的应用科学研究。发表论文30余篇,其中以第一作者/相同贡献在机器学习与数据挖掘相关顶会(UAI,SIGIR,WWW,WSDM,CIKM,ACL等)发表论文十余篇,曾获ICTAI2016最佳学生论文,腾讯工作期间提交并公开AI专利十余项,多项科研成果及专利等核心技术,如LambdaFM(CIKM2016),NextItNet(WSDM2019),PeterRec(SIGIR2020)被应用于大规模工业检索和推荐系统,具有较好的业界影响力。
我们都知道迁移学习影响了计算机视觉和NLP领域的发展,但是在推荐领域还没有很多尝试, 特别是基于user-item的有序特征,几乎没有研究试图利用其去训练一个模型,并将该模型应用到其他下游场景或者任务
所以呢, 原博士就想着学习一个单一的用户表征模型, 然后将这个模型迁移到其他场景或者相关的任务中,甚至是在用户画像预测中使用;
大致的操作步骤应该是:微调一个大的预训练网络, 然后将该网络应用到其他推荐任务中;
但有一定的难度, 在遇到任何一个新的任务时,需要将该模型重新训练一次,几乎需要把模型的参数重新全部更新, 这么看来其实是参数低效使用的
为了解决参数低效的问题,他提出了 parameter-efficient transfer learning architecture ,也就是PeterRec框架,
这个框架做了一个什么事情呢,
之前我们有说, 如果遇到新的任务,在微调预训练模型时,基本和训练一个新的模型没有太大差别,因为模型参数都需要更新,复用效率是极低的,但是PeterRec能够保证在新的任务中, 微调预训练模型时, 参数基本保持不变, 这是通过插入一个小巧但表达能力强的神经网络完成的,具体怎么实现我们后面会讲到; 另外,作者也做了几组实验验证了PeterRec的优越性;
那么现在, 我们来想一个问题, 在推荐领域, 新用户或者冷启用户的喜好预测其实是一个难题,大部分解决方案都是基于用户的外部画像数据进行喜好预测, 其实就受限制于外部画像的准确率, 即使画像精准,也很难对新冷用户做到个性化推荐, PeterRec的出现, 通过迁移学习是否可以优化冷启策略呢?比如在咱们浏览器的任务中进行模型的预训练,然后将该模型应用到小说的冷启中呢, 这点论文中的实验部分在他的数据集上证实,可以,不过具体的细节,比如特征处理部分没太能理解,如果有同学感兴趣,咱们可以一起讨论,研究下.
下面我将会按照论文的标准结构来进行组织: 作者思考过程, 文章的灵魂PETERREC, 最后一部分实验验证;
近10年来, 社交和电商平台的用户数量激增, 留下了大量用户点击或者购买行为以及一些其他反馈, 比如,抖音的一般用户,一周会观看成百上千的小视频,因为平均每个视频的播放时长大概是是20秒, 这种交互序列完全可以用于对用户的喜好进行建模;
在深度学习领域中, GRURec, NextItNet已经在基于user-item的推荐中取得不错效果
但是 主要的问题依然是,这种建模方式不具有普适性, 就是模型都是基于任务的,换一个任务,就需要重新训练模型
这就是作者一直在强调和需要解决的问题,具体怎么做呢,
首先,需要使用深度神经网络, 在源任务中通过无监督的方式训练一个预训练模型, 这里的数据是有序的user-item的交互序列,且每个用户都有大量的交互数据
然后,将这个预训练模型放到目标任务中进行使用, 在这个目标域中,用户大部分是冷启用户
如果想完成上面的构想, 需要解决几个问题
第一个,需要在无监督的情况下,产生一个预训练模型,这个模型能够表达很长的一个user-item交互序列
第二个, 设计一个微调框架,这个框架能从预训练模型中提取用户表征,并且应用到目标任务中
第三个, 设计一个适应方法,这个方法能够保证上面的微调框架在不同的目标任务使更多的参数实现共享
(虽然在不同任务中分别训练模型,理论上效果会更好, 但是作者相信,复用在未来的意义更加重大,起码节约资源和成本,因为省去了大部分模型训练时间)
为了解决上面的问题, 需要用到两种技术
实际上, 仅微调输出层,在推荐场景下几乎没有太大的效果, 优化隐藏层能达到更好的效果, 但是需要更多的人为干预,比如隐藏层的数量需要人为确定, 但是这个数量是多少,目前没有找到最优解;另外就是,如果修改参数,其实机违背了最大化参数共享的原则;
好,现在问题清楚了,所用的技术也找到了,那么怎么实现呢?
针对前两个问题: 作者提出了一个两阶段的训练过程:
首先, 为了学习大量的用户表征, 采用序列化的神经网络作为预训练模型, 训练集是没有标注的数据,该模型预测的是序列中下一个item, backbone是最新的NextItNet, 后面还会详细讲解;
其次, 将预训练的模型用在监督学习的目标任务中;
针对第三个问题的实现,参数最大化共享,作者受到 Learning feed-forward one-shot learners 文章的启发, learning-to-learn方法, 核心思想是深度神经网络中参数可以被另一个模型预测, 有研究显示网络中95%的参数可以被的5%的参数预测出来, 作者借助这个想法,但不是预测参数,而是让参数适应, 所以设计了一个可分离的嫁接神经网络,也叫模型补丁, 这个补丁能够做到使预训练模型中的卷积层的参数适应目标任务,类似于, 补丁学习了这个适应参数的方法,参数量仅仅是卷积层的1/10, 为什么叫补丁呢,是因为这个模块在微调阶段被插入了预训练模型中, 后面我们详细介绍
到现在,第二部分讲完了,我们来总结一下, 作者为了将迁移学习应用到推荐任务中,设计了一个模型微调架构, 以及一个模型补丁的方式使参数共享最大化.
第三部分,具体怎么做的,也就是真的文章的灵魂 PeterRec
那么我们先来从原理上理解一下
作者定义了两个域,也就是上面说到的任务,一个是源域(任务) S \mathcal{S} S, 一个是目标域(任务) T \mathcal{T} T ,还有一个公共域 U \mathcal{U} U, 是 S \mathcal{S} S和 T \mathcal{T} T用户的交集,也就是UserId的交集
在第一阶段进行无监督学习的数据集构造为,在userId u ∈ U u \in U u∈U 在 S S S 中产生一个该 userId的交互序列
x u = { x 1 u , x 2 u , . . . , x n u } ( x i u ∈ X ) , ( u , x u ) ∈ S x^u = \{ x^u_1, x^u_2, ..., x^u_n \}(x^u_i \in \mathcal{X}), (u, x^u) \in \mathcal{S} xu={x1u,x2u,...,xnu}(xiu∈X),(u,xu)∈S
在第二阶段,将在 S \mathcal{S} S下产生的预训练模型, 作用在 T \mathcal{T} T中, T \mathcal{T} T中的每一个userId对应一个label y ∈ Y , ( u , y ) ∈ T y \in \mathcal{Y}, (u, y) \in \mathcal{T} y∈Y,(u,y)∈T, 如果有 g g g个不同label, 那么就会产生 g g g个实例
在模型结构这张图中,左边是预训练图, H ( Θ ~ ) \mathcal{H} ( \widetilde{ \Theta}) H(Θ ) 是预训练网络, Θ ~ \widetilde{ \Theta} Θ 包含embedding和卷积层, w ( Θ ^ ) w(\hat{\Theta}) w(Θ^) 和 π ( v ) \pi(v) π(v) 分别是预训练和微调的分类层, 右图微调结构 H ~ ( Θ ~ , ϑ ) \widetilde{\mathcal{H}}(\widetilde{ \Theta}, \vartheta) H (Θ ,ϑ) Θ ~ \widetilde{ \Theta} Θ 保持不变, ϑ \vartheta ϑ 就是之前说的作者提出的模型补丁部分
从这个图上来看, 在预训练阶段,采用单向无监督的方式, 根据用户观看的前 k 个视频预测其可能会看的下一个视频。输入是用户在腾讯视频看过的视频 id 序列 [ x 1 , x 2 , x 3 , ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ , x n − 1 ] [x_1, x_2, x_3,······, x_n-1] [x1,x2,x3,⋅⋅⋅⋅⋅⋅,xn−1],然后通过 embedding lookup 的方式获取每一个视频的隐向量并输入到预训练网络中;输出是对应的下一个视频 id,即 [ x 2 , x 3 , ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ , x n − 1 , x n ] [x_2, x_3,······, x_n-1, x_n] [x2,x3,⋅⋅⋅⋅⋅⋅,xn−1,xn]。可以看到,PeterRec 模型不需要借助任何图像和文本特征,仅需要用户点击视频的 ID 即可,视频的向量表示完全由模型训练得到,省去了特征工程的步骤, 这种预训练方式已经被应用于 CV 和 NLP 领域,并且取得了非常认可的效果,然而并没有在推荐系统领域得到推广。
在微调阶段
微调(finetune)阶段是根据用户在腾讯视频的观看记录,预测其可能会在 QQ 看点感兴趣的视频。输入是 [ x 1 , x 2 , x 3 , ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ , x n − 1 , x n , [ C L S ] ] [x_1, x_2, x_3,······, x_n-1, x_n, [CLS] ] [x1,x2,x3,⋅⋅⋅⋅⋅⋅,xn−1,xn,[CLS]],其中 [ x 1 , x 2 , x 3 , ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ , x n − 1 , x n ] [x_1, x_2, x_3,······, x_n-1, x_n] [x1,x2,x3,⋅⋅⋅⋅⋅⋅,xn−1,xn] 为用户在腾讯视频看过的视频 ID 序列,[CLS] 是一个特殊的记号,表示在这个位置输出分类结果;输出 Label 是 QQ 看点的视频 ID,即预测用户在 QQ 看点可能会看的 top-N 个视频 ID。
现在,我们再来详细介绍一下具有用户表征的预训练模型
首先预训练的目标, 通过训练一个有序的user-item序列,来预测用户对下一个item行为的概率, 公式为
p ( x u ; Θ ) = Π i = 1 n p ( x i u ∣ x 1 u , . . . x i − 1 u ; Θ ) p(x^u; \Theta) = \Pi^n_{i=1}p(x^u_i|x^u_1, ...x^u_{i-1}; \Theta) p(xu;Θ)=Πi=1np(xiu∣x1u,...xi−1u;Θ)
Θ \Theta Θ包含神经网络的参数 Θ ~ \widetilde{ \Theta} Θ 和分类层的参数 Θ ^ \hat{\Theta} Θ^
但,有研究证明,用户的对item的行为其实不是严格有序的,如果用户对item1, item2, item3都进行的点击,那么其实item的顺序不一定必须是1,2,3;也可以是2,1,3, 因此作者随机的mask掉一些item,来缓解严格有序的问题
在数据和目标确定之后,就可以进行建模了,首先定义模型结构,主要采用了空洞卷积层和残差结构,熟悉CV的同学应该都知道,这里做一个简单的介绍,空洞卷积的目的是为了增加感受野,残差结构保留了更加原始的特征;
在模预训练阶段,我们将其看作一个超大多分类问题。输入的视频 ID 序列经 embedding_lookup 操作后,提供给后面的空洞卷积网络。整个空洞卷积网络由若干个残差结构堆叠构成。每个 block 包含两个空洞卷积层(DC layer),每层的空洞因子以 2 n 2^n 2n增加。最后通过一个 s o f t m a x softmax softmax 层预测出下一个视频
相较于其他时序模型如 RNN、Transformer 等,PeterRec 模型基于空洞卷积神经网络构建大规模预训练模型,同时通过叠加空洞卷积层达到感受野的指数级增加,这种网络结构使得它在对超长的用户点击序列进行建模时更加高效。而相比之下,RNN 模型在对超长序列建模时,通常会遇到梯度消失和梯度爆炸的问题;而像 Transformer 这类 self-attention based 的模型,时间复杂度和显存需求会随着序列长度以二次方的级别增加。
损失函数, 采用 softmax 的多分类交叉熵损失函数。在实际操作中,腾讯视频中的视频经过各种过滤 ID 映射后还有数百万级别的有效视频。如果采用 full softmax,训练效率会很低,所以这里采用了 tf.nn.sampled_softmax_loss,实际只采样了 20% 的 item 作为负样本用做训练,还有其他的 例如 NCE loss 或者下文提到的 LambdaFM 方式。
然后到第二阶段,微调, 其实在微调阶段,我的理解是需要通过模型补丁去学习预训练模型对新任务的适应能力,也就是上面提到的两个参数, v v v 和 ϑ \vartheta ϑ
为了实现对预训练网络参数的最大化共享,微调阶段仅对预训练模型做了两处改动:
在残差结构中以串行的方式插入模型补丁,每个模型补丁由一个瓶颈结构的残差块构成,且参数量不到原始空洞卷积的十分之一;(这个模型补丁机构是最右边采用了11的卷积先降采样,也就是减少通道数,然后经过ReLU激活之后,进行11卷积的上采样,这样做增加了高位特征,同时也减少了参数量;)
直接移除预训练 softmax 层,然后添加新任务的分类层。
微调通常要重新训练整个网络,并更新模型所有参数,因此从参数量的角度来看,微调是非常低效的。相比这种微调所有参数的方式,PeterRec 模型在微调阶段仅对模型补丁和新任务的 softmax 层中的参数进行更新,参数量大大减小的同时却可以达到与微调所有参数相当甚至更好的效果。而且,由于仅有少数参数参与更新,PeterRec 模型还具有很好的抗过拟合能力。
对于排序场景,pairwise 类方法要比 pointwise 类方法(直接看做分类或者回归)更合适,所以微调阶段采用了 pairwise ranking loss (BPR)。pairwise loss 构造样本时我们同时考虑两个 item 比如 x i x_i xi和 x j x_j xj,这两个 item 是有顺序的,比如用户在排序列表里点击了 x i x_i xi,而未点击 x j x_j xj,我们可以看做 x i x_i xi 要优于 x j x_j xj。
因此,我们需要为每一个真实物品 label(y)采样一个负样本 y-,通过计算用户的隐向量与 y 和 y- 的隐向量的内积作为两个 item 的打分 o y o_y oy 和 o y − o_y- oy−,然后算出最终的 BPR loss
其实在整个微调阶段有一点我自己也不太能理解,就是在真的实现过程中,这个label具体是什么,我看源码的时候,发现这个label其实是对用户画像的预测,就是性别,年龄等这些的预测,所以如果有想试试这种冷启方式的同学的话,可以一起讨论下源码.
最后,实验部分,作者做了几组实验,回答了四个问题
作者的实验配置的数据集有五个
ColdRec-1 dataset: 源域是qq浏览器完播和点赞的item, 取用户近50个item,不够用0补齐, 目标域是看点用户数据,用户对item的行为少于3个
ColdRec-2 dataset: 源域是100个item序列, 目标域是少于5次行为
其他三个仅在目标域有,分别是性别,年龄和人生状态
最后我们来总结一下,作者整个论文最大的贡献依然是想使用迁移学习的思想,训练一个能够复用的预训练模型,然后在将该模型迁移到其他任务中使用,同时仅需要微调模型中的部分参数即可,这样可以提升目标任务的冷启效果,同时在用户画像预测方面也有一定的指导意义.
好了今天的论文分享就到这里,恭喜你,又读完了一篇论文.