《BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer》
准确描述用户的兴趣是有效推荐系统的核心。在许多现实世界的 application
中,用户当前的兴趣本质上是动态(dynamic
)的和演变(evolving
)的,受到用户的历史行为的影响。例如,一名用户可能在购买一个 Nintendo Switch
后不久就购买配件(如,Joy-Con
控制器),然而该用户在正常情况下不会购买 console
配件。
为了建模用户行为中的这种序列动态( sequential dynamics
),人们已经提出了各种方法来根据用户的历史交互(historical interactions
)进行序列推荐(sequential recommendations
)。这些方法的目标是:预测用户在给定该用户历史交互的情况下,该用户接下来可能交互的下一个 item
。最近,大量工作采用序列神经网络(sequential neural networks
),如 Recurrent Neural Network: RNN
,用于序列推荐并获得有前景的结果。先前工作的基本范式是:使用从左到右的序列模型将用户的历史交互编码为向量(即,用户偏好的 hidden representation
),并基于该 hidden representation
进行推荐。
尽管它们的流行性和有效性,BERT4Rec
的作者认为这种从左到右的单向模型不足以学到用户行为序列的最佳representation
。
如下图 (c)
和 (d)
所示,主要限制是:对于历史行为序列中 item
,此类单向模型限制了 item
的hidden representation
的能力,其中每个 item
只能对来自 previous items
的信息进行编码。
另一个限制是:以前的单向模型最初是针对具有自然顺序(natural order
)的序列数据(sequential data
)引入的,如文本序列数据(text series data
)、时间序列数据(time series data
)。它们通常假设数据上的严格排序的序列 (ordered sequence
),这对于真实世界的 application
并不总是正确的。
事实上,由于各种不可观察(unobservable
)的外部因素,用户历史交互中的 item
选择可能不遵循严格的顺序假设(order assumption
)。在这种情况下,在用户行为序列建模中同时结合来自两个方向的上下文(context
)至关重要。
为了解决上述限制,BERT4Rec
寻求使用双向模型来学习用户历史行为序列的 representation
。具体而言,受 BERT
在文本理解方面的成功所启发,《BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer》
提出将深度双向自注意力模型(deep bidirectional self-attention model
)应用于序列推荐,如上图 (b)
所示。在 representation power
方面,深度双向模型在文本序列建模任务上的优异结果表明:将双向的上下文结合起来对sequence representations learning
是有益的。对于严格的顺序假设,BERT4Rec
比单向模型更适合建模用户行为序列,因为双向模型中的所有 item
都可以利用左右两个方向的上下文。
然而,为序列推荐训练双向模型并不简单,也不直观。传统的序列推荐模型通常通过预测输入序列中每个位置的 next item
来从左到右进行训练。如上图所示,在深度双向模型中同时联合调节(jointly conditioning
)左侧和右侧的上下文,会导致信息泄露,即允许每个位置间接 see the target item
。这可能会使预测未来变得没有价值,并且网络不会学到任何有用的东西。
为了解决这个问题,BERT4Rec
引入了完形填空任务(Cloze task
)来代替单向模型中的目标(即,序列地预测 next item
)。具体而言,BERT4Rec
在输入序列中随机地mask
一些 item
(即,用特殊 token
[mask]
来替换它们),然后根据它们周围的上下文来预测这些 masked item
的 id
。 通过这种方式,BERT4Rec
通过允许输入序列中每个 item
的 representation
同时融合左侧和右侧上下文,从而避免信息泄露并学习 bidirectional representation mode
。除了训练双向模型之外,完成填空目标的另一个优点是:它可以产生更多的样本来在多个 epoch
中训练更强大的模型。
例如,完形填空目标可以
mask
掉一个item
,也可以一次mask
掉多个item
。而传统的session-based
推荐一次只能预测一个目标。
然而,完形填空任务的一个缺点是:它与最终任务(即序列推荐)不一致。为了解决这个问题,在测试过程中,我们在输入序列的末尾附加了特殊的 token
[mask]
来指示我们需要预测的 item
,然后根据其 final hidden vector
进行推荐。对四个数据集的广泛实验表明,我们的模型始终优于各种 SOTA baselines
。
即,测试期间用
[mask]
替代target item
。
论文的贡献如下:
作者提出通过完形填空任务用双向自注意力网络来建模用户行为序列。据作者所知,这是第一个将深度双向序列模型和完形填空目标引入推荐系统领域的研究。
作者将BERT4Rec
与 SOTA
的方法进行比较,并通过对四个 benchmark
数据集的定量分析证明双向架构和完形填空目标的有效性。
作者进行了一项全面的消融研究,从而分析所提出模型中关键组件的贡献。
相关工作:这里我们简要回顾与我们密切相关的几个工作,包括通用推荐(general recommendation
)、序列推荐、以及注意力机制。
通用推荐:推荐系统的早期工作通常使用协同过滤( Collaborative Filtering: CF
)从而根据用户的交互历史来建模用户偏好。
在各种协同过滤方法中,矩阵分解(Matrix Factorization: MF
)是最流行的一种,它将用户和 item
投影到一个共享的向量空间中,并通过 user
向量和 item
向量之间的内积来估计用户对 item
的偏好。
协同过滤的另一个方向是 item-based
邻域方法。它通过使用预计算(precomputed
)的 item-to-item
相似度矩阵,通过测量目标 item
与用户交互历史中的 item
的相似性从而评估用户对目标 item
的偏好。
最近,深度学习已经极大地改变了推荐系统。早期的先驱工作是用于协同过滤的两层(Restricted Boltzmann Machine: RBM
),在 Netflix Prize
中由论文 《Restricted Boltzmann Machines for Collaborative Filtering》
提出。
基于深度学习的一个方向旨在通过将从辅助信息(如文本、图像、声音)中学到的 distributed item representation
集成到协同过滤模型中,从而提高推荐性能。
基于深度学习的另一个方向试图取代传统的矩阵分解模型。例如,Neural Collaborative Filtering: NCF
通过多层感知机而不是内积来估计用户偏好,而 AutoRec
和 CDAE
使用自编码器框架来预测用户的评分。
序列推荐:不幸的是,上述方法都不适用于序列推荐,因为它们都忽略了用户行为的顺序(order
)。
早期的序列推荐工作通常使用马尔科夫链( Markov chain: MC
),从而从用户历史交互中捕获序列模式( sequential pattern
)。例如:
《An MDP-Based Recommender System》
将 recommendation generation
形式化为序列优化问题(sequential optimization problem
),并采用马尔科夫决策过程(Markov Decision Processe: MDP
)来解决它。
后来,《Factorizing Personalized Markov Chains for Next-basket Recommendation》
结合马尔科夫链和矩阵分解的能力,通过分解个性化马尔科夫( Factorizing Personalized Markov Chain: FPMC
)来建模序列行为和通用兴趣。
除了一阶马尔科夫链之外,《Translation-based Recommendation》
和 《Fusing Similarity Models with Markov Chains for Sparse Sequential Recommendation》
还采用高阶马尔科夫链来考虑更多 previous items
。
最近,RNN
及其变体 Gated Recurrent Unit: GRU
、Long Short-Term Memory: LSTM
在建模用户行为序列方面变得越来越流行。这些方法的基本思想是:将用户以前的记录通过各种循环架构和损失函数,编码为一个向量(即,用于执行预测的、用户偏好的 representation
),包括具有 ranking loss
的 session-based GRU
(GRU4Rec
)、Dynamic REcurrent bAsket Model: DREAM
、user-based GRU
(《Sequential User-based Recurrent Neural Network Recommendations》
)、attention-based GRU
(NARM
)、以及具有新的损失函数(即 BPR-max
和 TOP1-max
)和改进的采样策略的 improved GRU4Rec
(《Recurrent Neural Networkswith Top-k Gains for Session-based Recommendations
)。
除了循环神经网络(recurrent neural network
)之外,人们还引入了各种深度学习模型来进行序列推荐。例如:
《Personalized Top-N Sequential Recommendation via Convolutional Sequence Embedding》
提出了一个卷积序列模型 Caser
,它同时使用水平卷积滤波器和垂直卷积滤波器来学习序列模式。
《Sequential Recommendation with User Memory Networks》
和 《Improving Sequential Recommendation with Knowledge-Enhanced Memory Networks》
使用 Memory Network
来改善序列推荐。
STAMP
使用具有注意力的 MLP
网络来同时捕获用户的通用兴趣(general interest
)和当前兴趣 (current interest
)。
注意力机制:注意力机制在建模序列数据方面显示出巨大的潜力,例如机器翻译和文本分类。最近,一些工作尝试使用注意力机制来提高推荐性能和可解释性。例如,NARM
将注意力机制融合到 GRU
中,从而在 session-based
推荐中同时捕获用户的序列行为和主要意图(main purpose
)。
上述工作基本上将注意力机制视为原始模型的附加组件(additional component
)。相比之下,Transformer
和 BERT
仅建立在 multi-head self-attention
之上,并且在文本序列建模上取得了 SOTA
结果。最近,人们越来越热衷于应用单纯的 attention-based
神经网络来建模序列数据,从而提高模型的效果和效率 (effectiveness and efficiency
)。对于序列推荐,《Self-Attentive Sequential Recommendation》
引入了一个名为 SASRec
的、两层的 Transformer
解码器(即,Transformer
语言模型)来捕获用户的序列行为,并在几个公共数据集上实现了 SOTA
的结果。SASRec
与我们的工作密切相关。然而,它仍然是一个使用因果注意力掩码(casual attention mask
)的单向模型。而我们使用双向模型在完形填空任务的帮助下,编码用户的行为序列。
问题定义:令 item
集合。interaction sequence
)(按时间顺序排列),time step
item
,
给定历史交互序列 time step
item
。该问题可以形式化为:建模用户 time step
item
的概率:
这里我们介绍了一种新的序列推荐模型,称作 BERT4Rec
。BERT4Rec
采用来自 Transformer
的 Bidirectional Encoder Representation
来完成一个新任务,即序列推荐。BERT4Rec
建立在流行的 self-attention layer
(即,Transformer layer
)的基础之上。
如下图 (b)
所示,BERT4Rec
由 Transformer layer
堆叠而成。在每一层,BERT4Rec
通过 Transformer layer
并行地修改每个位置的 representation
,这种修改是通过交换前一层所有位置的信息来实现的。不像图 (d)
中 RNN-based
方法那样 step-by-step
地学习 forward
相关的信息,self-attention
机制赋予 BERT4Rec
直接捕获任何距离的依赖关系的能力。这种机制导致全局感受野,而像 Caser
这样的 CNN-based
方法通常具有有限的感受野。此外,与 RNN-based
方法相比,self-attention
可以直接并行化。
比较下图 (b), (c), (d)
,最明显的区别是:SASRec-based
和 RNN-based
方法都是 left-to-right
的单向结构,而我们的 BERT4Rec
使用双向自注意力来建模用户的行为序列。通过这种方式,我们提出的模型可以获得用户行为序列更强大的 representation
,从而提高推荐性能。
如上图 (b)
所示,给定长度为 《Attention is All you Need》
中的 Transformer layer
,在每一层 hidden representation
representation
维度。这里,我们将 step-by-step
地计算)。
如上图 (a)
所示,Transformer layer
Trm
包含两个子层:一个 Multi-Head Self-Attention
子层、一个 Position-wise Feed-Forward Network
。
Multi-Head Self-Attention
:注意力机制已经成为各种序列建模任务中不可或缺的一部分,它允许捕获 representation pair
之间的依赖关系,而无需考虑 representation pair
在序列中的距离。 以前的工作表明,联合处理来自不同位置的、不同 representation
子空间的信息是有益的。因此,我们在这里采用 multi-head self-attention
而不是执行单个注意力函数。具体而言:
multi-head attention
首先将
然后并行采用 output representation
。
最后这 output representation
被拼接成单个 representation
并再次进行线性投影。
其中:
每个 head
的投影矩阵
Attention()
函数是 Scaled Dot-Product Attention
:
其中:query
key
value
注意:由于这里的
,而 ,因此 在左侧。
Position-wise Feed-Forward Network
:如前所述,自注意力子层主要基于线性投影。为了赋予模型非线性( nonlinearity
)、以及不同维度之间的交互(interaction
),我们将 Position-wise Feed-Forward Network
应用于注意力子层的输出,在每个位置独立(separately
)地、且等同地(identically
)应用。
Position-wise Feed-Forward Network
由两个仿射变换组成,中间有一个Gaussian Error Linear Unit: GELU
激活函数:
其中:
在这项工作中,遵循 OpenAI GPT
和 BERT
的工作,我们使用更平滑的 GELU
激活函数而不是标准的 ReLu
激活函数。
注意,这里通过
将 representation
先膨胀,然后再通过执行压缩。
堆叠 Transformer Layer
:如前所述,我们可以使用 self-attention
机制轻松地捕获整个用户行为序列中的 item-item
交互。通过堆叠 self-attention layer
来学习更复杂的 item transition pattern
通常是有益的。然而,随着网络的加深,网络变得更加难以训练。因此,我们在两个子层的每个子层周围使用一个残差连接,然后是 layer normalization
,如上图 (a)
所示。
此外,我们还将 dropout
应用于每个子层的输出,dropout
发生在 layer normalize
之前。即,每个子层的输出为:
MH()
、或逐位置的前向反馈网络 PFFN()
。
layer normalization
函数。我们使用 LN
对同一层中的所有隐单元的输入进行归一化,从而稳定和加速网络训练。
总之,BERT4Rec
将每一层的 hidden representation
调整为:
如前所述,由于没有任何递归模块或卷积模块,因此 Transformer layer Trm
不知道输入序列的顺序( order
)。为了利用输入的序列信息,我们将 Positional Embedding
注入到 Transformer layer stack
底部的 input item embedding
中。对于给定的 item
input representation
item embedding
和 positional embedding
相加得到:
其中:item
embedding
向量,positional embedding
。
所有 item
的 embedding
构成 item embedding
矩阵 embedding
构成 positional embedding
矩阵
在这项工作中,我们使用可学习的 positional embedding
而不是固定的正弦 embedding
,从而获得更好的性能。positional embedding
矩阵 positional embedding
矩阵 item
。
如果是固定的正弦
embedding
作为positional embedding
,那么模型没有最大序列长度的限制。
在 Transformer Layer
之后,我们得到输入序列的所有 item
的 final output
time step
mask
了 item
masked
的 item
GELU
激活的两层前馈网络来生成 target item
的输出分布:
其中:bias
项,item
的 embedding
矩阵。
我们在输入层和输出层使用共享的 item embedding
矩阵来缓解过拟合并减小模型大小。
一方面,由于
被 mask
了,因此在所有Transformer Layer
中都不会泄露的信息。 另一方面,位置
得到的 final representation
包含了所有剩余的 item
的信息从而用于预测。
训练阶段:传统的单向序列推荐模型通常通过预测输入序列的每个位置的 next item
来训练模型。具体而言,输入序列 target
conditioning
)左右上下文会导致每个 item
的 final output representation
包含 target item
的信息。这使得预测未来变得没有意义,并且网络不会学到任何有用的东西。
假如
target item
为序列中最后一个item
,那么在双向模型中,序列中第一个item
、第二个item
、... 其它所有位置item
都能访问到target item
的信息。
这个问题的一个简单解决方案是:从原始长度为 next item
作为 label
的子序列,如 target item
。然而,这种方法非常耗时和耗资源,因为我们需要为序列中的每个位置创建一个新样本并分别预测它们。
为了有效地训练我们提出的模型,我们将一个新目标,即完形填空任务(Cloze task
)(也被称作 Masked Language Model: MLM
),应用于序列推荐。这是一项由一部分语言组成的测试,其中某些单词被删除,模型需要预测缺失的单词。在我们的例子中,对于每个 training step
,我们随机mask
输入序列中所有 item
的 token
"[mask]"
替换),然后仅根据左右上下文预测被 masked item
的原始 ID
。例如:
与 "[mask]"
相对应的 final hidden vector
被馈送到一个 output softmax
,就像在传统的序列推荐中一样。最终,我们将每个 masked input
masked target
的负对数似然:
其中:
masked
版本,如
masked
的 item
集合,如
masked item
ground truth
,如
ground truth
的概率。
完形填空任务的另一个优点是它可以生成更多样本来训练模型。假设一个长度为 BERT4Rec
可以在多个 epoch
中获得 mask
item
)。这允许我们训练更强大的双向 representation
模型。
测试阶段:如前所述,我们在训练和最终的序列推荐任务之间造成了不匹配 (mismatch
),因为完形填空任务的目标是预测当前的 masked item
,而序列推荐任务的目标是预测未来。为了解决这个问题,我们将特殊 token
"[mask]"
附加到用户行为序列的末尾,然后根据该 token
的 final hidden representation
来预测 next item
。
为了更好地匹配序列推荐任务(即,预测 next item
),在训练期间我们还生成 mask
输入序列中最后一个 item
的样本。它的作用类似于用于序列推荐的微调,可以进一步提高推荐性能。
mask
输入序列中最后一个item
的样本是否可以给予更大的样本权重?这样可以让模型更focus
这类样本,从而缓解训练阶段和测试阶段不匹配的问题。或者直接使用domain adaption
方法。因为机器学习有一个核心假设:训练样本和测试样本的分布要保持一致。
我们讨论我们的模型与之前相关工作的联系。
SASRec
:显然,SASRec
是我们的 BERT4Rec
的从左到右的单向版本,具有 single head attention
以及 causal attention mask
。
不同的架构导致不同的训练方法。SASRec
预测序列中每个位置的 next item
,而 BERT4Rec
使用完形填空目标来预测序列中的 masked item
。
CBOW& SG
:另一个非常相似的工作是 Continuous Bag-of- Word: CBOW
和 Skip-Gram: SG
。
CBOW
使用 target word
上下文中所有的词向量(同时使用左侧和右侧)的均值来预测 target word
。它可以视为 BERT4Rec
的一个简化案例:如果我们在 BERT4Rec
中使用一个 self-attention layer
、对所有 item
使用均匀的注意力权重、取消共享的 item embedding
、移除 positional embedding
、并且仅mask center item
,那么我们的 BERT4Rec
就变成了 CBOW
。
与 CBOW
类似,SG
也可以看作是 BERT4Rec
在化简之后的、类似的简化案例(除了保留一个 item
之外,mask
所有其它 item
)。
从这个角度来看,完形填空可以看作是 CBOW
和 SG
目标的通用形式。
此外,CBOW
使用简单的聚合操作来建模单词序列,因为它的目标是学习良好的 word representation
,而不是 sentence representation
。相反,我们寻求学习一个强大的行为序列 representation
模型(即,本文中的深度自注意力网络)来进行推荐。
BERT
:虽然我们的 BERT4Rec
受到 NLP
中的 BERT
的启发,但是它仍然与 BERT
有几个不同之处:
最关键的区别是:BERT4Rec
是用于序列推荐的端到端模型,而 BERT
是用于 sentence representation
的预训练模型。BERT
利用大规模的、任务无关的语料库为各种文本序列任务训练 sentence representation
模型,因为这些任务共享相同的、关于语言的背景知识。然而,这个假设在推荐任务中并不成立。因此,我们针对不同的序列推荐数据集,端到端地训练 BERT4Rec
。
与 BERT
不同,我们移除了 next sentence loss
和 segment embedding
,因为在序列推荐任务中, BERT4Rec
仅将用户的历史行为建模为一个序列。
未来方向:
将丰富的 item
特征(如商品的类别和价格、电影的演员表)引入到 BERT4Rec
中,而不仅仅是建模 item ID
。
将用户组件引入到模型中,以便在用户有多个 session
时进行显式的用户建模。
另外,也可以将
SR-GNN
中的GNN
组件代替这里的item embedding
。
数据集:我们在四个真实世界的代表性数据集上评估所提出的模型,这些数据集在领域和稀疏性方面差异很大。
Amazon Beauty
:这是从 Amazon.com
爬取的一系列商品评论数据集。人们根据 Amazon
上的 top level
商品类别将数据拆分为单独的数据集。在这项工作中,我们采用 Beauty
类别。
Steam
:这是从大型的在线视频游戏分发平台 Steam
收集的数据集。
MovieLens
:这是一个用于评估推荐算法的、流行的 benchmark
数据集。在这项工作中,我们采用了两个版本,即 MovieLens 1m: ML-1m
和 MovieLens 20m: ML-20m
。
对于数据集预处理,我们遵循 SASRec
、FPMC
、Caser
中的常见做法。对于所有数据集,我们将所有数字评分、或者存在评论转换为数值为 1
的隐式反馈(即,用户与 item
存在交互)。此后,我们将交互记录按用户分组,并根据时间戳对这些交互记录进行排序,从而为每个用户构建交互序列。为了确保数据集的质量,按照惯例,我们仅保留至少存在五个反馈的用户。
处理后的数据集的统计数据如下表所示。
任务设置:为了评估序列推荐模型,我们采用了 leave-one-out
评估(即,next item
推荐)任务,该任务在SASRec
、FPMC
、Caser
中已被广泛使用。对于每个用户,我们将行为序列的最后一个 item
作为测试数据,将倒数第二个 item
作为验证集,并利用剩余的 item
进行训练。
为了简单的、公平的评估,我们遵循SASRec
、FPMC
、Caser
中的通用策略,将测试集中的每个 ground truth item
与 100
个随机采样的、用户未与之交互的 negative item
进行配对。为了使采样可靠和具有代表性,这 100
个 negative item
根据流行度进行采样。因此,任务变成将这些 negative item
与每个用户的 ground truth item
进行排名。
每个
ground truth item
独立地采样100
个negative item
,而不是所有ground truth item
共享相同的negative item
。
评估指标:为了评估所有模型的排名,我们采用了多种评估指标,包括 Hit Ratio: HR
、Normalized Discounted Cumulative Gain: NDCG
、Mean Reciprocal Rank: MRR
。考虑到每个用户仅有一个 ground truth item
,因此 HR@k
等价于 Recall@k
且与 Precision@k
成正比,MRR
相当于 Mean Average Precision: MAP
。
在这项工作中,我们使用 HR
和 NDCG
。对于所有这些指标,值越高则代表性能越好。
baseline
:
POP
:它是最简单的 baseline
,根据item
的热门程度来排序,其中热门程度根据交互次数来判断。
BPR-MF
:它使用 pairwise ranking loss
来优化带隐式反馈的矩阵分解。
NCF
:它使用 MLP
而不是矩阵分解中的内积来建模 user-item
交互。
FPMC
:它通过将矩阵分解与一阶马尔科夫链相结合,从而捕获用户的通用口味(general taste
)以及序列行为。
GRU4Rec
:它使用带 ranking based loss
的 GRU
来建模用户行为序列从而用于 session-based
推荐。
GRU4Rec+
:它是 GRU4Rec
的改进版本,具有新的损失函数和新的采样策略。
Caser
:它同时以水平卷积和垂直卷积两种方式来使用 CNN
来建模高阶马尔科夫链,从而进行序列推荐。
SASRec
:它使用从左到右的 Transformer
语言模型来捕获用户的序列行为,并在序列推荐上实现了 SOTA
的性能。
配置:
对于 NCF
、GRU4Rec
、GRU4Rec+
、Caser
、SASRec
,我们使用相应作者提供的代码。对于 BPR-MF
和 FPMC
,我们使用 TensorFlow
实现它们。
对于所有模型中的通用超参数,我们考虑隐层维度
所有其它超参数(如 Caser
中的马尔科夫阶次)和初始化策略,要么遵循原始论文作者的推荐,要么根据验证集进行调优。我们报告每个 baseline
在其最佳超参数设置下的结果。
我们使用 TensorFlow
实现 BERT4Rec
。所有参数都使用 [−0.02, 0.02]
范围内的截断正态分布进行初始化。
我们使用 Adam
训练模型,学习率为
当梯度的
为了公平比较,我们设置层数 head
数量 SASRec
中相同的最大序列长度,即:对于 ML-1m
和 ML-20m
数据集,Beauty
和 Steam
数据集,
对于 head
的设置,我们根据经验将每个 head
的维度设置为 32
(如果 single head
)。
我们使用验证集调优 mask
比例 Beauty
为 Steam
为 ML-1m
和 ML-20m
为
所有模型都是在单个 NVIDIA GeForce GTX 1080 Ti GPU
上从零开始训练的而没有任何预训练,batch size = 256
。
下表总结了所有模型在四个 benchmark
数据集上的最佳结果。最后一列是 BERT4Rec
相对于最佳 baseline
的提升。我们省略了 NDCG@1
的结果,因为在我们的实验中它等于 HR@1
。可以看到:
非个性化 POP
方法在所有数据集上的性能最差,因为它没有使用历史行为记录来建模用户的个性化偏好。
在所有 baseline
方法中,序列方法(如,FPMC
和 GRU4Rec+
)在所有数据集上始终优于非序列方法(如,BPR-MF
和 NCF
)。与 BPR-MF
相比,FPMC
的主要改进在于它以序列的方式来建模用户的历史行为记录。
这一观察结果验证了:考虑序列信息有利于提高推荐系统的性能。
在序列推荐 baseline
中,Caser
在所有数据集上都优于 FPMC
,尤其是在稠密数据集 ML-1m
上,这表明高阶马尔科夫链有利于序列推荐。然而,高阶马尔科夫链通常使用非常小的阶次 scalable
的。这导致 Caser
的性能比 GRU4Rec+
和 SASRec
更差,尤其是在稀疏数据集上。
此外,SASRec
的性能明显优于 GRU4Rec
和 GRU4Rec+
,这表明 self-attention
机制是一种更强大的序列推荐工具。
根据结果,很显然 BERT4Rec
在所有方法中,在四个数据集上的所有指标都是最佳的。与最强的 baseline
相比,它平均而言获得了 7.24%
的 HR@10
相对提升、11.03%
的 NDCG@10
相对提升、11.46%
的 MRR
相对提升。
问题一:收益是来自于双向自注意力模型还是来自于完形填空目标?
为了回答这个问题,我们尝试通过将完形填空任务限制为一次仅mask
一个 item
来隔离这两种因素的影响。通过这种方式,我们的 BERT4Rec
(带有一个 mask
)和 SASRec
之间的主要区别在于:BERT4Rec
通过联合地调节(jointly conditioning
)左右上下文来预测 target item
。
注意,这里要求被
masked
的item
是随机的,不能固定为最后一个item
。如果固定地mask
最后一个item
,那么BERT4Rec
就等价于SASRec
。
由于篇幅有限,我们在下表中报告了 Beauty
和 ML-1m
的实验结果,其中 mask
的 BERT4Rec
在所有指标上都显著优于 SASRec
。这证明了 bidirectional representation
对于序列推荐的重要性。
此外,最后两行表明完形填空目标也提高了性能。完形填空任务以及 mask
比例
问题二:双向模型为何、以及如何优于单向模型?
为了回答这个问题,我们试图通过在 Beauty
测试期间可视化 the last 10 items
的平均注意力权重来揭示有意义的模式,如下图所示。由于篇幅有限,我们仅报告了不同层和不同 head
的四个具有代表性的注意力热力图。从结果中可以看到:
不同 head
的注意力不同。例如,在 layer 1
中,head 1
倾向于关注左侧的 item
,而 head 2
更喜欢关注右侧的 item
。
不同层的注意力不同。显然, layer 2
的注意力往往集中在更近( more recent
)的 item
上。这是因为 layer 2
直接连接到输出层,而 recent item
在预测未来方面起着更重要的作用。
另一个有趣的模式是:图 (a)
和 (b)
中的 head
也倾向于关注 [mask]
(因为最后一个 item
是被 masked
的)。这可能是 self-attention
将 sequence-level state
传播到 item level
的一种方式。
最后也是最重要的一点,与单向模型只能关注左侧的 item
不同,BERT4Rec
中的 item
倾向于同时关注两侧的 item
。这表明双向对于用户行为序列建模是必不可少且有益的。
接下来我们检查了超参数的影响,包括隐层维度 mask
比例 NDCG@10
和 HR@10
。
隐层维度 NDCG@10
和 HR@10
指标,可以看到:
最明显的观察是:每个模型的性能随着维度 Beauty
和 Steam
等稀疏数据集上。这可能是由于过拟合造成的。
在细节方面,Caser
在四个数据集上的表现不稳定,这可能会限制其有用性(usefulness
)。self-attention based
方法(即,SASRec
,BERT4Rec
)在所有数据集上都取得了卓越的性能。
最后,我们的模型在所有数据集上始终优于所有其它 baseline
,即使在隐层维度
考虑到我们的模型在
mask
比例 mask
比例 mask
比例 masked item
。为了验证这一点,我们研究了 mask
比例
下图展示了 mask
比例 0.1
到 0.9
之间变化的结果。
考虑
从前两列的结果中,很容易看出
这些结果验证了我们上面所说的。
此外,我们观察到最优
对于具有短序列长度的数据集(如 Beauty
和 Steam
),在 Beauty
) 和 Steam
) 时获得最佳性能。
对于具有长序列长度的数据集(如 ML-1m
和 ML-20m
),在
这是合理的,因为与短序列数据集相比,长序列数据集中的大 item
更多。以 ML-1m
和 Beauty
为例,
对于 ML-1m
我们需要平均每个序列预测 item
。
对于 Beauty
我们仅需要平均每个序列预测 item
。
前者对于模型训练而言太难了。
注:下图的
x
轴文字有误,应该是Mask proportion
而不是Dimensionality
。
最大序列长度 Beauty
和 ML-1m
数据集上不同的最大长度
适当的最大长度 Beauty
更喜欢较小的 ML-1m
在 more recent items
的影响、受到长序列数据集上 less recent items
的影响。
这是因为
Beauty
数据集的平均序列长度很短,而ML-1m
数据集的平均序列长度很长。因此,二者的最佳值对应于 20
和200
。
通常而言,模型不能一致地从较大的 informative items
。
BERT4Rec
的一个可扩展性问题是:每层的计算复杂度为 GPU
可以有效地并行化 self-attention layer
。
最后,我们对 BERT4Rec
的一些关键组件进行了消融实验,从而更好地了解它们的影响,包括 positional embedding: PE
、position-wise feed-forward network: PFFN
、layer normalization: LN
、residual connection: RC
、dropout
、self-attention
的层数 multi-head attention
的 head
数量
下表显示了我们的默认版本
PE
:结果表明,移除 positional embedding
会导致 BERT4Rec
在长序列数据集(即 ML-1m
和 ML-20m
)上的性能急剧下降。
如果没有 positional embedding
,每个 item
hidden representation
item embedding
。此时,模型无法获得序列的顺序信息,例如模型对于不同位置的 "[mask]"
,使用相同 hidden representation
来预测不同的 target item
(假设unmask
的 item
保持不变) 。这使得模型有问题。这个问题在长序列数据集上更为严重,因为它们有更多的 masked item
需要预测。
PFFN
:结果表明,长序列数据集(如 ML-20m
)从 PFFN
中获益更多。这是合理的,因为 PFFN
的目的是整合来自多个 head
的信息。正如关于 head
数量 head
的信息是长序列数据集所偏好的。
LN, RC, Dropout
:引入这些组件主要是为了缓解过拟合。显然,它们在 Beauty
等小型数据集上更有效。为了验证它们在大型数据集上的有效性,我们在 ML-20m
上进行了实验。结果表明:当没有 RC
时,NDCG@10
降低了约 10%
(这个结果不在下表中)。
层数 Transformer layer
可以提高性能,尤其是在大型数据集(如 ML-20m
)上。这验证了通过深度自注意力架构学习更复杂的 item transition pattern
是有益的。在数据集 Beauty
上,
head
数量 ML-20m
)受益于较大的 Beauty
)更喜欢较小的 《Why Self-Attention? A Targeted Evaluation of Neural Machine Translation Architectures》
中的实验结果一致,即大 multi-head self-attention
捕获长距离依赖关系至关重要。