Press "Enter" to skip to content

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

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

 

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

 

整理 | 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相比,[email protected]上获得了7.24%的提升; [email protected]上取得了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

 

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。