前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >BERT4Rec:当NLP王者BERT进军推荐领域

BERT4Rec:当NLP王者BERT进军推荐领域

作者头像
NewBeeNLP
发布2022-04-15 13:23:18
1.4K0
发布2022-04-15 13:23:18
举报
文章被收录于专栏:NewBeeNLP

作者 | 知乎博主@青枫拂岸 整理 | NewBeeNLP

CIKM2019上,阿里发表了《BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer》[1],继BST将Transformer之后,又一次将NLP领域中前沿技术迁移到了推荐领域。这一次则是发表之后,霸榜无数的Bert模型。想了解BST模型的可以参考我之前的解读:BST:Transformer在推荐领域的应用

结合的切入点仍旧是阿里深耕的领域: 利用用户历史行为,提取历史兴趣进行用户关注商品预测

文中提到,之前的算法使用序列神经网络从左向右地编码用户的历史交互信息,提取用户历史兴趣,只利用了单向的信息进行建模。尽管它们是有效的,但是存在两点问题:

  • 单向结构限制了用户行为序列中隐藏表示的能力;
  • 之前的序列神经网络经常采用严格有序的序列,这并不总是可行的;

为了解决这些问题,作者提出了一个称为 BERT4Rec 的序列推荐模型。该模型采用深层的双向Self-Attention来对用户行为序列进行建模。

为了避免信息泄漏并有效地训练双向模型,我们采用Cloze objective方式 进行序列推荐,即:通过联合item左右的上下文来预测序列中随机masked item。用这种方式,我们学习了双向表示模型,允许用户历史行为中的每个item融合左右两侧的信息来作出推荐。

文章在四个基准数据集上进行的大量实验表明,证明了模型始终优于各种最新的序列模型。

1.背景介绍

尽管正常情况下,用户都会根据时间进程来选择购买的物品,如用户购买了switch后一段时间,会购买joycon(switch手柄)和游戏卡带。并且现阶段使用RNN结构的一些模型也取得了不错的成绩。其基本思想是将用户的历史行为序列从左向右编码向量,基于最后一个隐向量进行推荐。这里举了两个例子分别是SASRec模型和RNN结构。

虽然他们被证明是普遍且有效的,但是文章认为这种单向模型并不是最优的,不足以完全学习到用户的兴趣信息。因为:

  • 单向体系结构限制了隐藏表示在用户行为序列中的能力;
  • 假设一个严格有序的序列,这并是实用的;

所以将两个方向的上下文合并到用户行为序列建模中,会产生更好的效果。但是为了防止信息泄露,采用了 Cloze task 方法。即Bert模型预训练中的Masked LM方法。按下不表,下文具体介绍。

本文的主要贡献:

  • 提出了一种基于双向self-attention和Cloze task的用户行为序列建模方法。第一个将深度序列模型和Cloze task引入推荐系统的研究。
  • 将提出的模型与最先进的方法进行了比较,并通过对四个基准数据集的定量分析,证明了本文算法的有效性。
  • 进行了一项消融分析,分析了模型中关键部件的贡献。

2.模型

2.1 问题描述

在序列化问题中,定义 为用户集合, 为物品集合, 为用户历史行为序列。我们的目标是预测下一时刻用户与每个候选物品交互的概率:

2.2 模型结构

如下图所示,Bert4Rec是由L个有向Transformer层堆叠起来的,在每一层,它通过与Transformer层并行地交换前一层所有位置的信息,迭代更新每个位置的表示,与图1d中基于RNN的方法不同, self-attention赋予BERT4Rec直接捕捉任何距离的依赖关系的能力,而不是像图1d中基于RNN的方法那样一步一步地传递相关信息。这种机制导致了一个全局的感受野,而基于CNN的方法(如Caser)通常感受野有限。

此外,与基于RNN的方法相比,self-attention非常易于直接并行化。相比于1c和1d的模型(都是left-to-right的单向模型),本文提出的双向模型可以解决现有模型的问题。

图1 BERT4Rec 模型整体架构

2.3 Transformer层

上图a中的Transformer Layer 主要有两部分构成,分别是Multi-Head Self-Attention和Position-wise Feed-Forward network。

这里,不再具体介绍。

左:原始transformer encoder 右:BERT2Rec中transformer Layer

2.4 Embedding Layer

将相应的item转化为Embedding vector。并且加入Postional Embedding,这里需要注意的是:

对于给定的物品 ,其输入表示 是通过将相应的物品和位置Embedding求和来构造的:

其中 是关于商品 的d维Embedding, 是关于位置index 的d维度位置编码。位置embedding的矩阵 允许我们的模型识别他在正在处理的输入的那一部分。此外我们设定了模型可以处理的句子最大长度 ) 。我们会讲输入序列的长度进行截断, 阶段到最后的N个商品 当 。

值得注意的是,这里的positional embedding不是想transformer中的利用正余弦变化得到的固定不变的,而是一个可训练学习得到的。

2.5 Output Layer

经过上面的层后,最终得到输入序列中所有items的最终输出 。如上图1(b)所示,我们在第 步掩盖掉物品 ,然后基于 预测被掩盖的物品 。这里使用两层带有GELU激活函数的前馈网络得到最终的输出:

这里需要注意,输出层的公式是推荐场景特有的,因此我来详细解释一下。 是前馈网络的权重矩阵; 和 是偏置项; 是item集合的embedding矩阵。BERT4Rec模型在输入层和输出层用了共享的物品embedding矩阵,目的是减轻过拟合和减少模型大小。

3.模型训练和预测

3.1 训练

推荐算法的目标是:预测用户下一个可能选择的物品 ,文章从原始长度为t的序列中构建了t-1个样本,形式为:

但是!但是!但是! 使用Self-Attention后,任何序列中的item都包含序列中所有item的信息,这就造成了数据泄露。为了解决这个问题,借鉴BERT中的Masked LM方法,在处理用户历史行为序列中,将其称作: Cloze task

其核心是:就是将输入序列中的p%的物品进行masked,让模型来预测这部分盖住地方对应的物品:

与“[mask]”相对应的最终隐藏向量被输入到商品集上的输出softmax中,就像在传统的顺序推荐中一样。采用这种训练方式,最终的损失函数为:

其中 是用户行为历史 的masked版本, 是随机masked的商品, 是masked商品, 是真实商品。

Cloze task和Masked LM一样,它可以产出更多的样本用于模型的训练,不受限于label数量。

3.2 测试

BERT经过两种预训练,得到词向量的embedding后。再fine-tune到其他任务上,从而达到更好的效果。

为了更好地匹配序列推荐任务(即,预测最后一项),在训练过程中我们还生成了只mask输入序列中最后一项的样本。这个工作就像对序列推荐的微调一样,可以进一步提高推荐性能。

4.实验

4.1 数据集

三个公共数据集,

  • Amazon Beauty
  • Steam
  • MovieLens
    • ML-1M
    • ML-20M
4.2 评估指标

将行为序列的最后一项作为test集,之前的作为验证集。为了模拟真实情况,每个正样本随机抽取100个负样本。采样负样本时,根据其受欢迎程度,因此项目变成了对正样本和负样本进行排名。

指标选取

  • Hit Ratio (HR) k=1,5,10
  • Normalized Discounted Cumulative Gain (NDCG) k=1,5,10
  • Mean Reciprocal Rank (MRR)
4.3
4.4 Bert4Rec模型
  • 使用Tensorflow,训练初始向量[-0.02,0.02]
  • Adam优化器β1 = 0.9,β2 = 0.999,ϵ = 10e−4。ℓ2 weight decay 为0.01。
  • Transformer层 L = 2
  • head 数量 h = 2 ,每个head 维度d为 32
  • maximum sequence length N = 200 for ML-1m and ML-20m
  • maximum sequence length N = 50 for Beauty and Steam datasets
  • Cloze task 的 遮挡概率ρ为 (Beauty ρ=0.6),(Steam ρ=0.4),(ML-1m and ML-20m ρ=0.1)
  • GPU型号 NVIDIA GeForce GTX 1080 Ti GPU
  • batch size of 256
4.5 结果

结果分析:

几乎所有的序列化处理方法(GRU4Res、FPMC)都胜过非序列化方法(NCF BPR-MF)在所有数据集上。

Caser 胜过FPMC 在所有数据集上。表明高阶MCs有利于顺序推荐。然而,高阶MCs通常使用非常小的阶数L,因为它们不能很好地按照阶数L进行缩放。

Caser差于 GRU4Rec+ 和 SASRec,尤其是稀疏的数据集。而且SASRec 更优于 GRU4Rec and GRU4Rec+,证明了Self-Attention是非常强,针对于序列推荐。

Bert4Rec在所有的数据集上都是最优的,称之为”杀疯了“都不为过;它和所有的强的Baseline相比,HR@10上获得了7.24%的提升; NDCG@10上取得了11.03%的提升, MRR上取得了11.46%的提升。再一次证明了,Bert一出,谁与争锋!不仅适用于NLP领域,在推荐领域的效果也是显著的。

4.6 一些问题

Q1:是否Cloze objective的Bidirectional self-attention模型可以带来帮助?

增加了BERT4Rec(带1个mask)的实验,其与SASRec之间的主要区别在于,BERT4Rec预测目标项时理解上下文中的序列中所有item信息,而SASRec只抽取了左侧当前时刻前浏览过的item。

结果上,BERT4Rec(带1个mask)效果优于SASRec。

Q2:为什么Bidirectional的模型比unidirectional的模型好?

为了回答这个问题,我们试图通过可视化图2中关于Beauty测试集上测试最后10个项目的平均注意力权重来揭示有意义的模式。由于篇幅的限制,我们只展示了四个不同layer和head的有代表性的注意热图。

我们从结果中进行了一些观察。

a)不同head的注意力不同。例如,在第1层中,head1倾向于参加左侧的项目,而head2倾向于参加右侧的项目。

b)注意力在不同的层面上有所不同,第二层的注意力往往集中在最近的项目上。这是因为第二层与输出层直接相连,最近的项目在预测未来方面发挥着更重要的作用。

另一个有趣的模式是,图2a和2b中的头部也倾向于出现在[mask]上。这可能是自我注意将序列级状态传播到item级的一种方式。

c) 最后也是最重要的一点,与单向模型只能关注左侧的项目不同,BERT4Rec中的项目倾向于关注两侧的项目。这表明双向性对于用户行为序列建模是必要和有益的。

5.参数对结果影响研究

5.1 隐藏维度d

随着维数的增加,每个模型的性能趋于收敛。 更大的隐藏维度不一定会导致更好的模型性能 ,尤其是在Beauty和Steam等稀疏数据集上。这可能是由于训练过度造成的。

在细节方面。Caser在四个数据集上的性能不稳定,这可能会限制其实用性。基于Self-Attention的方法(即SASRec和BERT4Rec)在所有数据集上都能获得优异的性能。最后, Bert4Rec 模型在所有数据集上始终优于所有其他模型,即使隐藏维度相对较小。考虑到我们的模型在d=64上取得了令人满意的性能,以下分析确定d=64。

5.2 Mask的比例p

不能太大也不能太小,具体根据数据集来调整。

对于序列长度与p取值成反比,序列越长,p取短好;序列越短,p取越大更好。作者猜测,序列越长,p越大的话,会导致预测item非常大。模型训练很困难。

5.3 最大序列长度N

依旧是不同的数据集,最佳序列长度不一样。但 依赖于数据的平均序列长度。

Beauty更喜欢较小的N=20,而ML-1m在这方面的性能最好N=200。

由于较大的N往往会引入额外的信息和更多的噪声,因此该模型并不总是从较大的N中受益。然而,当长度N变大时,我们的模型表现得非常稳定。这表明我们的模型能够处理嘈杂的历史记录中的信息项。

6.消融实验

  • PE:位置编码对于Bert4Rec的影响是巨大的,删除PE,模型的效果大大的下降了。
  • PFFN: 长的序列可以从PFFN中获得较多的帮助;
  • LN,RC以及Dropout: 每个元素都可以从这些神经网络中获得提升;
  • 层的个数: 在大的数据集上,stacking Transformer layers可以得到较为明显的提升;
  • Head个数:越长序列数据集在更大h时效果更好,越短序列数据集更适合更小的h。

7.结论

将Bert迁移到的推荐任务中来处理用户行为序列,效果非常好。引入Masked LM方法的Cloze task效果显著,且不依赖于label数量。在四个数据集中表现均是目前最优。

整篇论文读下来,尤其是看了实验部分后,只能说Bert是真的强,在推荐上效果也是杠杠的。但是这篇文章只是将Bert迁移进了推荐领域,就连文中提到的Cloze task都是Bert原文中预训练任务中一个的变型。说明这是一篇偏工程导向上的论文。

连看了5篇阿里系出品、针对用户历史行为序列方面的论文后,感慨阿里在对用户行为序列上的用情至深,总是能针对某个点,或提出或迁移一些结构针对这个问题进行解决;并且阿里的论文结构清晰明了,读起来顺畅,可读性强。

本文参考资料

[1]

《BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer》: https://link.zhihu.com/?target=https%3A//dl.acm.org/doi/10.1145/3357384.3357895

[2]

Microstrong:BERT4Rec:使用Bert进行序列推荐: https://zhuanlan.zhihu.com/p/263014307

[3]

https://github.com/FeiSun/BERT4Rec: https://link.zhihu.com/?target=https%3A//github.com/FeiSun/BERT4Rec

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 NewBeeNLP 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.背景介绍
  • 2.模型
    • 2.1 问题描述
      • 2.2 模型结构
        • 2.3 Transformer层
          • 2.4 Embedding Layer
            • 2.5 Output Layer
            • 3.模型训练和预测
              • 3.1 训练
                • 3.2 测试
                • 4.实验
                  • 4.1 数据集
                    • 4.2 评估指标
                      • 4.3
                        • 4.4 Bert4Rec模型
                          • 4.5 结果
                            • 4.6 一些问题
                            • 5.参数对结果影响研究
                              • 5.1 隐藏维度d
                                • 5.2 Mask的比例p
                                  • 5.3 最大序列长度N
                                  • 6.消融实验
                                  • 7.结论
                                    • 本文参考资料
                                    相关产品与服务
                                    文件存储
                                    文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
                                    领券
                                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档