Self-Attentive Sequential Recommendation(有代码)

题目翻译:Self-Attentive Sequential Recommendation

来源:http://arxiv.org/abs/1808.09781

代码:Self-Attentive Sequential Recommendation | Papers With Code

目录

摘要

I. 介绍

II. 相关工作

A.一般推荐

B.时序推荐

C.序列推荐

D.注意力机制

III. 研究方法

A. Embedding层

B. 自注意力模块

C .堆叠自注意力块

D.预测层

E. Network Training

F.复杂度分析

V. 结论


摘要

序列动态是许多现代推荐系统的一个关键特征,它试图在用户最近执行的动作的基础上捕捉用户活动的"上下文"。为了捕捉这种模式,出现了两种方法:马尔科夫链( Markov Chains,MCs )和循环神经网络( Recurrent Neural Networks,RNNs )。马尔科夫链( Markov Chains )假设用户的下一个动作可以根据他们最近的(或最后几个)动作进行预测,而循环神经网络( RNNs )原则上允许更长期的语义被揭示。一般来说,基于马尔科夫链的方法在极度稀疏的数据集中表现最好,模型简约是关键,而RNNs在更稠密的数据集中表现更好,因为更高的模型复杂度是可以承受的。我们工作的目标是平衡这两个目标,通过提出基于自注意力的序列模型( SASRec ),允许我们捕获长期语义(像一个RNN),但是,使用注意力机制,基于相对较少的动作(像MC马尔科夫链)进行预测。在每个时间步,SASRec(自注意力序列模型)试图从用户的行为历史中识别出哪些物品是"相关"的,并使用它们来预测下一个物品。大量的实证研究表明,我们的方法在稀疏和稠密数据集上都优于各种先进的序列模型(包括基于MC / CNN / RNN的方法)。此外,该模型比基于可比较的CNN / RNN的模型效率高一个数量级。对注意力权重的可视化也展示了我们的模型如何自适应地处理各种密度的数据集,并揭示了活动序列中的有意义的模式。

I. 介绍

序列推荐系统的目标是在用户近期行为的基础上,将个性化的用户行为模型(基于历史活动)与某种"情境"概念相结合。从序列动态中捕获有用的模式是具有挑战性的,主要是因为输入空间的维度随着作为上下文使用的过去动作的数量呈指数增长。因此,序列推荐的研究主要关注如何简洁地捕捉这些高阶动态

马尔科夫链( Markov Chains,MCs )是一个经典的例子,它假设下一个动作以前一个动作(或以前的几个)为条件,并成功地用于表征短程项目转移以进行推荐[ 1 ]。另一类工作使用循环神经网络( Recurrent Neural Networks,RNNs )通过一个隐藏状态来总结以前的所有动作,并用于预测下一个动作[ 2 ]。

这两种方法虽然在特定情况下都很有效,但在一定程度上仅限于某些类型的数据。基于MC马尔科夫链的方法,通过做出强有力的简化假设,在高概率设置中表现良好,但可能无法捕捉更复杂场景的复杂动态。相反,RNN虽然具有表达能力,但在优于更简单的基线之前,需要大量数据(尤其是密集的数据)。

最近,一种新的序列模型Transformer在机器翻译任务中取得了最先进的性能和效率[ 3 ]。与现有的使用卷积或循环模块的序列模型不同,Transformer纯粹基于提出的一种称为"自注意力"的注意力机制,该机制高效且能够揭示句子中单词之间的句法和语义模式。

受此方法的启发,我们试图将自注意机制应用于顺序推荐问题。我们希望这一想法能够解决上述两个问题,一方面能够从过去的所有行动(如RNN)中提取上下文,另一方面能够仅从少量行动(如MC)中构建预测。具体来说,我们构建了一个基于自注意的顺序推荐模型(SASRec),该模型在每个时间步长自适应地为先前的项目分配权重(图1)

图1:显示SASRec训练过程的简化图。在每个时间步,模型考虑了所有以前的项目,并使用注意力来"关注"与下一步行动相关的项目。

在多个基准数据集上,本文提出的模型显著优于现有的基于MC / CNN / RNN的序列推荐方法。特别地,我们将性能作为数据集稀疏性的函数来考察,其中模型性能与上面描述的模式非常一致。由于自注意力机制,SASRec倾向于在稠密数据集上考虑长程依赖,而在稀疏数据集上关注更近期的活动。这对于自适应处理密度变化的数据集至关重要。

此外,SASRec的核心组件(即自注意力区块)适合并行加速,从而得到比基于CNN / RNN的替代方案快一个数量级的模型。此外,我们分析了SASRec的复杂性和可扩展性,进行了全面的消融研究,以展示关键组件的效果,并将注意力权重可视化,以定性地揭示模型的行为。

II. 相关工作

A.一般推荐

推荐系统专注于根据历史反馈(如点击、购买、点赞)对用户和物品之间的兼容性进行建模。用户反馈可以是明确的(例如评分)或隐含的(例如点击、购买、评论)[4]、[5]。由于解释“未观察到”(如未购买)数据的模糊性,对隐含反馈建模可能具有挑战性。为了解决这个问题,提出了逐点[4]和成对[5]方法来解决这些挑战。

矩阵分解( Matrix Factorization,MF )方法试图发现潜在的维度来表示用户的偏好和项目的属性,并通过用户和项目嵌入之间的内积来估计交互[ 6 ],[ 7 ]。此外,另一类工作是基于项目相似度模型( Item Similarity Models,ISM ),并没有用潜在因子( e.g. FISM )显式地对每个用户建模。他们学习一个资源对资源相似度矩阵,通过度量用户与之前交互过的物品的相似度来估计用户对物品的偏好

最近,由于在相关问题上的成功,各种深度学习技术被引入推荐[ 9 ]。其中一个工作是利用神经网络提取项目特征(例如图像、、文本、等。)进行内容感知推荐。另一条工作路线寻求取代传统的MF。例如,NeuMF [ 14 ]通过多层感知( Multi-Layer Perceptions,MLP )估计用户偏好,AutoRec [ 15 ]使用自动编码器预测评分。

B.时序推荐

追溯到Netflix奖,时态推荐通过显式地建模用户活动的时间戳,在各种任务上都表现出了强大的性能。Time SVD + + [ 16 ]通过将时间分割成若干段,对每段中的用户和项目分别建模,取得了很好的效果。这些模型对于理解具有显著(短期或长期)时间"漂移" (例如, "过去10年中,人们对电影的偏好发生了怎样的变化? "或者"用户在下午4点访问了什么样的企业? "等等。)的数据集至关重要[ 16 ] - [ 18 ]。序列推荐(或下一个项目推荐)与此设置略有不同,因为它只考虑动作的顺序,与时间无关的序列模式。本质上,序列模型试图根据用户最近的活动来建模用户行为的"上下文",而不是考虑时间模式本身。

C.序列推荐

许多序列推荐系统寻求建模项目项转移矩阵作为捕获连续项目间序列模式的一种手段。例如,FPMC融合了矩阵分解项物品-物品转换项,分别捕捉长期偏好和短期转换[ 1 ]。本质上,捕获的转移是一阶马尔科夫链( Markov Chain,MC ),而高阶MC假设下一个动作与之前的几个动作相关。由于上一次访问的项目往往是影响用户下一次行动(本质上提供"语境")的关键因素,因此基于一阶MC的方法表现出较强的性能,特别是在稀疏数据集上[ 19 ]。也有采用高阶MC考虑更多前期项的方法[ 20 ],[ 21 ]。特别地,基于CNN的方法Convolutional Sequence Embedding ( Caser )将L个前项的嵌入矩阵视为"图像",并应用卷积操作提取转换[ 22 ]。

除了基于MC的方法外,另一项工作采用RNN对用户序列进行建模[2],[23]-[25]。例如,GRU4Rec使用门控递归单元(GRU)对基于会话的推荐的点击序列进行建模[2],改进后的版本进一步提高了其Top-N推荐性能[26]。在每个时间步长中,RNN将上一步的状态和当前动作作为其输入。这些依赖性降低了RNN的效率,尽管已经提出了“会话并行”等技术来提高效率[2]。

D.注意力机制

注意力机制已被证明在图像描述[ 27 ]和机器翻译[ 28 ]等各种任务中有效。本质上,这些机制背后的思想是,顺序输出(例如)每个依赖于模型应该依次关注的某些输入的"相关"部分。另外一个好处是基于注意力的方法往往更具有可解释性。最近,注意力机制被引入到推荐系统中[ 29 ] - [ 31 ]。例如,注意力因子分解机( Attentional Factorization Machines,AFM ) [ 30 ]学习每个特征交互对于内容感知推荐的重要性。

然而,上述使用的注意力技术本质上是对原始模型(例如attention + RNNs , attention + FMs等。)的一个附加组件。最近,一种纯粹基于注意力的序列到序列方法Transformer [ 3 ]在机器翻译任务上取得了最先进的性能和效率,而这一任务以前主要是基于RNN / CNN的方法[ 32 ] [ 33 ]。Transformer模型很大程度上依赖于提出的"自注意力"模块来捕获句子中的复杂结构,并检索相关单词(在源语中)用于生成下一个单词(在目标语言)。受Transformer的启发,尽管序列推荐问题与机器翻译有很大的不同,需要特殊设计的模型,但我们基于自注意力方法来构建新的序列推荐模型。

III. 研究方法

在序列推荐的设定中,我们给定一个用户的动作序列,寻求预测下一个物品。在训练过程中,在时间步t,模型根据前t个项目预测下一个项目。如图1所示,将方便地认为模型的输入为,其期望输出为相同序列的"平移"版本:()。在本节中,我们描述了如何通过一个嵌入层、几个自注意力块和一个预测层来构建一个序列推荐模型。我们还分析了其复杂性,并进一步讨论了SASRec与相关模型的区别。我们的记法总结在表1中。

A. Embedding层

我们将训练序列()转化为固定长度的序列,其中n代表我们模型所能处理的最大长度。如果序列长度大于n,我们考虑最近的n个动作。如果序列长度小于n,则向左重复添加一个"填充"项,直到长度为n。我们创建一个项目嵌入矩阵,其中d是潜在维度,并检索输入嵌入矩阵,其中。用一个恒定的零向量0作为填充项的嵌入。

位置嵌入:正如我们将在下一节中看到的,由于自注意力模型不包含任何循环或卷积模块,因此它不知道以前项目的位置。因此我们将一个可学习的位置嵌入P∈Rn × d注入到输入嵌入中:

我们也尝试了文献[ 3 ]中使用的固定位置嵌入,但是发现在我们的情况下这导致了更差的性能。我们在实验中定量和定性地分析了位置嵌入的效果。

B. 自注意力模块

尺度化的点积注意力[ 3 ]定义为:

其中Q表示查询,K表示键,V表示值(每一行代表一个项目)。直观上,注意力层计算所有值的加权和,其中查询i和值j之间的权重关系到查询i和键j之间的交互。比例因子√d是为了避免内积的值过大,特别是当维度较高时。

自注意力层:在机器翻译等NLP任务中,注意力机制通常使用K = V (例如,使用RNN编码器-解码器进行翻译:编码器的隐藏状态为键和值,解码器的隐藏状态为查询) [ 28 ]。最近,一种自注意力方法被提出,它使用与查询、键和值相同的对象[ 3 ]。在我们的案例中,自注意力操作将嵌入 E作为输入,通过线性投影将其转换为三个矩阵,并将其馈送到注意力层:

其中投影矩阵WQ,WK,WV∈Rd × d .预测使模型更加灵活。例如,该模型可以学习非对称交互(即< query i , key j >和< query j , key i >可以有不同的交互)。

因果关系:由于序列的性质,模型在预测( t + 1) - st项时只需考虑前t项。然而,自注意力层( St )的第t个输出包含了后续项的嵌入,这使得模型是不适定的。因此,我们通过禁止Qi和Kj ( j > i)之间的所有链接来修改注意力。

Point-Wise Feed-Forward Network:自注意力机制虽然能够以自适应权重聚合所有先前项目的嵌入,但最终仍然是一个线性模型。为了赋予模型非线性并考虑不同潜在维度之间的相互作用,我们将一个点式两层前馈网络应用于所有Si (共享参数):

其中W ( 1 ),W ( 2 )是d × d矩阵,b ( 1 ),b ( 2 )是d维向量。注意,Si和Sj ( i6 = j)之间不存在交互,这意味着我们仍然防止信息泄露(从后到前)。

C .堆叠自注意力块

在第一个自注意力块之后,Fi实质上聚合了之前所有项目的嵌入(即 )。然而,通过另一个基于F的自注意力块来学习更复杂的项目转换可能是有用的。具体来说,我们将自注意力块(即一个自注意力层和一个前馈网络)进行堆叠,第b个( b > 1)块定义为:

并定义第1 块为:

然而,当网络深入时,几个问题变得更加严重:1 )模型容量增加导致过拟合;2 )训练过程变得不稳定(由于梯度消失等原因。);3 )参数较多的模型往往需要更多的训练时间。受[ 3 ]的启发,我们执行以下操作来缓解这些问题:

其中g ( x )表示自注意力层或前馈网络。也就是说,对于每个块中的层g,我们在输入g之前对输入x进行层归一化,对g的输出进行dropout,并将输入x添加到最终输出。我们在下面介绍这些操作。

残差连接:在某些情况下,多层神经网络已经证明了分层学习有意义特征的能力[ 34 ]。然而,简单地增加更多的层数并不容易对应更好的性能,直到提出了残差网络[ 35 ]。残差网络的核心思想是通过残差连接将低层特征传播到高层。因此,如果低层特征是有用的,模型可以很容易地将它们传播到最后一层。类似地,我们假设残差连接在我们的情况下也是有用的。例如,现有的序列推荐方法已经表明,上一个访问过的项目对预测下一个项目起着关键作用[ 1 ],[ 19 ],[ 21 ]。然而,经过若干个自注意力块后,最后一次访问的项目的嵌入与之前的所有项目纠缠在一起;加入残差连接将上次访问的项目的嵌入传播到最后一层,这将使模型更容易利用低层信息

图层归一化:图层归一化用于对跨特征(即零均值和单位方差)的输入进行归一化,有利于稳定和加速神经网络训练[ 36 ]。不同于批归一化[ 37 ],层归一化中使用的统计量与同批中的其他样本无关。具体来说,假设输入为包含样本所有特征的向量x,则操作定义为:

其中是元素乘积(即Hadamard积),μ和σ是x的均值和方差,α和β是学习的尺度因子和偏差项。

Dropout:为了缓解深度神经网络中的过拟合问题," Dropout "正则化技术在各种神经网络架构中被证明是有效的[ 38 ]。dropout的思想很简单:训练时以概率p随机"关闭"神经元,测试时使用所有神经元。进一步分析指出,dropout可以被视为集成学习的一种形式,它考虑了大量共享参数的模型(神经元数量和输入特征呈指数增长) [ 39 ]。我们还在嵌入 E上施加了一个dropout层。

D.预测层

在b个自适应分层提取先前消费项目信息的自注意力块后,我们基于F ( b ) t预测下一个项目(给定前t项)。具体来说,我们采用MF层来预测项目i的相关性:

其中是给定前t个项目(即s1 , s2 , ... , st ),项目i作为下一个项目的相关性,是项目嵌入矩阵。因此,高交互评分ri,t意味着高相关性,我们可以通过对评分进行排序来生成推荐。

共享项嵌入:为了减少模型规模和缓解过拟合,我们考虑了另一种只使用单个项嵌入M的方案:

注意到F ( b ) t可以表示为一个依赖于项嵌入M的函数:。使用同构项目嵌入的一个潜在问题是它们的内积不能表示非对称的项目转换(例如,项目i经常在j之后购买,但反之亦然),因此现有的方法如FPMC倾向于使用异构项目嵌入。然而,我们的模型没有这个问题,因为它学习了一个非线性变换。例如,前馈网络可以很容易地实现相同项嵌入的非对称性:FFN ( Mi ) MT j 6 = FFN ( Mj ) MT i。实证上,使用共享项嵌入显著提高了我们模型的性能。

显式用户建模:为了提供个性化推荐,现有方法通常采取两种方法之一:1 )学习一个表示用户偏好的显式用户嵌入( e.g. MF 、FPMC 和Caser );2 )考虑用户的先前行为,从访问过的物品( e.g. FSIM 、Fossil 、GRU4Rec )的嵌入中诱导出一个隐式的用户嵌入。我们的方法属于后一类,因为我们通过考虑用户的所有操作来生成一个嵌入F ( b ) n。然而,我们也可以在最后一层插入一个显式的用户嵌入,例如通过加法:ru,i,t = ( Uu + F ( b )) t ) MT i,其中U是用户嵌入矩阵。然而,我们实证发现,增加一个显式的用户嵌入并没有提高性能(大概是因为模型已经考虑了)

E. Network Training

回想一下,我们通过截断或填充项将每个用户序列(排除最后一个动作) ( Su1 , Su2 , ... , Su | Su | -1)转换为固定长度的序列s = { s1,s2,..,sn }。我们定义ot为t时刻的期望输出:

其中表示填充项。我们的模型以一个序列s作为输入,相应的序列o作为期望输出,采用二进制交叉熵损失作为目标函数:

注意,我们忽略了ot =的项。

通过Adam优化器[ 41 ]对网络进行优化,该优化器是随机梯度下降( SGD )的变种,具有自适应矩估计。在每个历元中,我们为每个序列中的每个时间步随机生成一个负项j。后面将描述更多的实现细节。

F.复杂度分析

空间复杂度:我们模型中的学习参数来自于自注意力层、前馈网络和层标准化中的嵌入和参数。总的参数个数为O( | I | d + nd + d2),与FPMC的其他方法( e.g. O ( | U | d + | I | d ))相比是适中的),因为它不随用户数量的增加而增加,并且在推荐问题中d通常较小。

时间复杂度:我们模型的计算复杂度主要来自于自注意力层和前馈网络,为O( n2d + nd2)。自注意力层的主导项通常为O ( n2d )。然而,在我们的模型中,一个方便的特性是每个自注意力层中的计算是完全可并行的,这有利于GPU加速。相比之下,基于RNN的方法( e.g. GRU4Rec )对时间步(也就是说,时间步长t的计算必须等待时间步长t - 1的结果)具有依赖性,这导致顺序操作的时间为O ( n )。我们通过实验发现我们的方法在GPUs (对于机器翻译任务,结果与文献类似)上比基于RNN和CNN的方法快十倍以上,并且最大长度n可以很容易地扩展到几百,这对于现有的基准数据集来说通常是足够的。

在测试过程中,对于每个用户,在计算出嵌入F ( b ) n后,其过程与标准MF方法相同。( O ( d )用于评价对一个项目的偏好)。

处理长序列:虽然我们的实验从经验上验证了我们方法的有效性,但最终它不能扩展到很长的序列。在未来的研究中,有一些方案值得研究:1 )使用受限的自注意力机制[ 42 ],它只关注最近的动作,而不是所有的动作,并且可以在更高的层次上考虑远距离的动作;2 )像[ 22 ]一样将长序列分割成短序列。

G.讨论

我们发现,SASRec可以看作是一些经典CF模型的推广。我们还从概念上讨论了我们的方法和现有的方法是如何处理序列建模的。

对现有模型的化简:

·因式分解马尔科夫链:FMC对一个一阶项转移矩阵进行因式分解,并根据上一个项i预测下一个项j:

如果将自注意力块设置为零,使用未共享的项目嵌入,并移除位置嵌入,则SASRec退化为FMC。此外,SASRec还与因子化个性化马尔可夫链( Factorized Personalized Markov Chains,FPMC ) [ 1 ]密切相关,它将MF与FMC融合,分别捕获用户偏好和短期动态:

在对FMC进行上述约减操作的基础上,通过增加一个显式的用户嵌入(通过级联),SASRec等价于FPMC。

·因子化物品相似度模型[ 8 ]:FISM通过考虑物品i和用户之前消费的物品之间的相似度来估计对物品i的偏好分数:

如果使用一个自注意力层(排除前馈网络),在项目上设置统一的注意力权重(即1 | Su |),使用未共享的项目嵌入,并移除位置嵌入,则SASRec简化为FISM。因此,我们的模型可以被看作是一个自适应的、分层的、顺序的项目相似度模型,用于下一个项目的推荐。

基于马尔科夫链的推荐:马尔科夫链( Markov Chains,MC )可以有效地捕获局部序列模式,假设下一个项目只依赖于前L个项目。现有的基于MC的序列推荐方法要么依赖于一阶MCs ( e.g. FPMC 、HRM 、TransRec ),要么依赖于高阶MCs ( e.g. Fossil 、Vista 、Caser )。第一组方法往往在稀疏数据集上表现最好。相比之下,基于高阶MC的方法有两个局限性:( 1 ) MC阶数L需要在训练前指定,而不是自适应地选择;( 2 )性能和效率与阶数L没有很好的标度关系,因此L通常是小( e.g.小于5)的。我们的方法解决了第一个问题,因为它可以自适应地关注之前的相关项(例如,在稀疏数据集上只关注最后一个项目,而在稠密数据集上关注更多的项目)。此外,我们的模型本质上是以n个先前项目为条件的,并且可以经验性地扩展到几百个先前项目,表现出随着训练时间的适度增加而获得的性能增益。

基于RNN的推荐:另一行工作试图使用RNN来建模用户动作序列[ 2 ],[ 17 ],[ 26 ]。RNNs通常适用于建模序列,尽管最近的研究表明CNNs和自注意力可以在一些序列设置中更强[ 3 ],[ 44 ]。我们的基于自注意力的模型可以由项目相似性模型衍生而来,这些模型是推荐中序列建模的合理选择。对于RNNs,除了它们的并行计算效率(第三节- F)之外,它们的最大路径长度(从一个输入节点到相关的输出节点)是O ( n )。相比之下,我们的模型具有O ( 1 )的最大路径长度,这有利于学习长距离依赖关系[ 45 ]。

V. 结论

在这项工作中,我们提出了一种新的基于自注意力的序列模型SASRec用于下一个项目推荐。SASRec对整个用户序列(没有任何递归或卷积操作)进行建模,并自适应地考虑消费项目进行预测。在稀疏和稠密数据集上的大量实验结果表明,我们的模型优于现有的基准方法,并且比基于CNN / RNN的方法快一个数量级。未来,我们计划通过引入丰富的上下文信息(例如驻留时间、动作类型、位置、设备等。)对模型进行扩展,并研究处理超长序列(例如clicks )的方法。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值