基于动态卷积和自注意力的序列推荐模型
2023-11-14郑海利陈平华
郑海利,陈平华
(广东工业大学计算机学院,广东 广州 510006)
0 引 言
随着互联网和大数据的发展,推荐系统在人们的日常生活和社交活动中扮演着越来越重要的角色,可为用户提供更好的选择和决策,提供个性化服务。在网络平台上,历史交互行为蕴含丰富的项目特征信息,可以很好地刻画用户兴趣。用户交互记录的顺序信息实时反映了用户的兴趣爱好变化。因此,基于用户的历史行为分析复杂的行为转换模式对于提高推荐精度至关重要。
目前大多数推荐模型可以分为协同过滤模型和序列推荐模型。协同过滤[1]利用兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的物品,它没有利用用户行为的时间特征,无法学习动态变化的兴趣。随着深度学习的兴起,神经网络凭借强大的数据拟合和泛化能力,涌现出大量结构复杂的序列推荐模型,相比传统模型取得了显著的效果,因此基于深度学习序列推荐方法是本文的主要研究对象。
由于序列推荐中交互的项目有先后之分,用户的交互序列往往包含了用户长期兴趣和短期兴趣。卷积神经网络一般是使用卷积滤波器挖掘序列中的局部上下文依赖。文献[2]将用户交互的嵌入矩阵L视为一个“图像”,并应用水平卷积和垂直卷积分别提取项目个体级别特征和联合级别的特征。然而,用户的兴趣通常是动态变化的,将矩阵视为静态图像可能会阻碍捕获项目的动态转换。文献[3]应用1-D扩展卷积来获得会话中的上下文项目转换,具备在历史序列中进行长范围依赖的建模能力。肖妍等人[4]采用多尺度垂直和水平卷积层提取复杂局部特征,结合自注意力学习长期交互关系,但是对于局部特征的提取仍旧没有脱离传统卷积不变性的假设。为了减少局部噪声的影响,从而更准确地推荐,大量的研究将长短期兴趣结合起来。文献[5]提出了一种短期注意/记忆优先级模型,该模型能够从会话上下文的长期记忆中捕获用户的通用兴趣,同时从最后点击的短期记忆中考虑用户当前的兴趣,但是该方法无法确定长期兴趣和短期兴趣的界限,特别是不同用户的行为是个性化的。文献[6]同时考虑项目个体和组合依赖,使用卷积网络和自注意力分别提取局部特征和全局特征,并利用压缩激励网络融合。
以上研究在长期兴趣依赖和短期兴趣依赖方面取得了显著成果,但是仍有以下不足:
1)现有的使用卷积神经网络提取历史序列局部特征的方法假定用户的兴趣是静态的,能够被固定参数的卷积核捕获。但事实上,用户的兴趣是动态变化的,特别是在序列变长的时候,常常发生兴趣漂移。因此,现有的卷积方法无法很好地捕捉到动态的局部特征。
2)对于长短期兴趣的区分,现有的方法大多将最近交互的项目作为短期兴趣,将更久之前的项目作为长期的兴趣学习静态偏好,最终结合长短期兴趣预测下一交互项目。首先,这种割裂的兴趣建模方法无法准确地区分长短期兴趣的边界,可能会误导模型学习;其次,用户的局部特征常表现为“组合兴趣”,不同阶段的局部特征间也可能存在较强联系。用图1 用户的购买情况举例。
单个历史项目(手机和平板)会对当前交互产生影响,同时历史电子产品的组合兴趣(电子产品)能更好地推断当前兴趣,但是目前对于“组合兴趣”间关系的研究较少。
本文的工作如下:
1)尝试使用动态卷积提取局部上下文特征,根据不同上下文项目自适应计算项目的重要性,解决用户兴趣动态变化下局部特征的提取问题。
2)不同于传统的全局-局部依赖结合方式,本文关注每一个时刻的全局和局部特征依赖,能够更好地挖掘个体特征依赖和组合特征依赖。通过混合注意力的方式将全局和局部依赖有机结合起来。
3)在3 个不同密度的推荐系统真实数据集上对所提出的模型进行实验验证,结果表明,本文模型在序列推荐方面优于已有的基准模型,并且有较强的鲁棒性。
1 相关工作
1.1 序列推荐
早期的序列推荐工作一般使用马尔科夫链提取用户历史行为中的信息。文献[7]利用矩阵分解和马尔科夫链分别学习用户下一个项目推荐的长期和短期偏好。然而,基于马尔科夫链的方法只考虑最后一个或最后几个动作,很难利用行为之间的依赖关系,无法捕获相对较长的序列中的动态偏好。
近年来,深度学习技术被引入序列推荐任务。基于循环神经网络(RNN)的模型通过多个递归结构学习用户的偏好表示,例如为基于会话的用户序列建模而提出的门控循环单元GRU 模型[8]。文献[9]结合GRU 和注意力机制来对用户在当前会话中的主要意图进行建模。文献[10]结合上下文信息进行分类,重新定义GRU 单元的更新门和复位门,对用户兴趣进行动态建模。文献[11]使用门控线性单元捕获交互序列中的用户兴趣,利用带有注意力权重的门控循环网络学习用户的动态兴趣,更加符合用户的真实行为。
卷积神经网络(CNN)可以挖掘序列中的局部上下文依赖。文献[2]提出使用水平和垂直卷积层去学习序列转换模式。文献[12]首次使用二维卷积进行序列推荐,认为对成对关系进行建模,可以学习到序列化特征数据的更好表示。文献[13]使用门控卷积改进胶囊网络,并且设计了项目级和特征级的双通道路由机制挖掘序列的转换模式,更好地对用户的短期兴趣变化进行建模。
注意力机制的模型能够依据信息的权重去度量不同信息特征的重要性。文献[14]首次利用自注意力机制来捕捉用户的序列特征,在多个公共数据集上显著提升了效果。文献[15]引入时间间隔信息,设计时间卷积网络获取长期偏好特征;使用双层自注意力对短期项目关联进行建模。文献[16]采用深度双向自我注意模型对用户的行为序列进行建模。文献[17]提出随机共享正则来增加自注意力的个性化,取得了更好的性能和解释性。文献[18]在项目特征基础上融入了属性特征和上下文特征,使用了多层多头自注意力模块去提取用户历史行为包含的用户特征,还利用交叉注意力模块将目标item 和用户的特征进行融合。
1.2 全局-局部依赖
全局-局部兴趣依赖在推荐系统中获得了越来越广泛的关注,一些研究也称之为结合长短兴趣推荐。对于用户兴趣的建模既考虑到用户稳定的、不易改变的兴趣,也关注近期内可能临时出现的兴趣。文献[19-20]提出和设计局部-全局记忆机制来学习不同层次的项目序列,而它们使用简单的神经模块连接,没有自适应的可学习偏好因素。文献[21]使用共享参数的自注意力区分最近几次交互的重要性,得到短期兴趣表示,然后采用度量学习对长期偏好进行建模。文献[22]提出了注意力和循环神经网络的混合模型,第1个模块是双向长短期记忆网络,第2个模块是GRU 模块,两者都具有基于用户的注意机制,分别用来提取用户的一般偏好和最新意图。文献[23]使用BERT 进行预训练,然后根据交互顺序将用户历史交互序列划分为多个时间窗口。通过融合空洞卷积和前向注意,得到各时间窗内的局部偏好和时间窗间的全局偏好,进而为每个用户生成多个不同的兴趣嵌入。文献[24]在每个时间步上对用户的长、短期顺序行为进行建模,并通过分层注意机制在更高阶上捕获物品对物品的依赖关系。该模型同时考虑动态的长期和短期用户偏好,并引入联合学习机制将两者融合。文献[25]同样采用自注意力学习最近几次交互的局部特征表示,提出基于位置的注意力层提取长期偏好,并通过物品相似度门控函数融合局部和全局特征表示。
2 DConvSA模型
2.1 问题定义
定义U={u1,u2,…,u|U|}和I={i1,i2,…,i|I|}作为用户集合和项目集合,其中和分别是用户的数量和项目的数量。对于每一个用户u,可以获得其按照时间升序的交互序列,其中代表用户u在时刻t交互的项目。序列推荐系统的目标是预测用户将要点击的下一个项目。
2.2 模型结构
本文提出基于动态卷积和自注意力的序列推荐模型DConvSA,该模型旨在利用动态卷积和自注意力的优势分别对局部和全局2 个方面的兴趣特征进行建模。其整体架构如图2 所示,主要分为嵌入层、动态卷积层、自注意力层、混合注意力层和预测层5 个部分。首先,将高维稀疏的用户交互序列及用户特征作为模型的输入。其次,通过嵌入层将所有的特征映射到一个低维的空间中,得到低维稠密的嵌入向量。然后,将用户交互序列嵌入向量通过自注意力学习全局项目间的联系,得到全局依赖;通过动态卷积提取每一时刻局部的特征,得到局部依赖。下一步,通过混合注意力层,自适应计算全局-局部特征的非线性关系。接着,将用户最后一次交互得到的向量作为当前时刻的兴趣表示,同时融入矩阵分解的用户特征表示,用于下一项交互预测。
图2 DConvSA模型结构图
2.3 嵌入层
将项目编号的one-hot编码嵌入连续的低维密集向量中,定义E∈R|I|×d作为一个d维的嵌入查询表,其中d是隐向量空间的维度,|I|代表数据集里面的物品数量。嵌入矩阵E是随机初始化的,它将在模型训练过程中和参数共同学习。对于给定的用户点击序列Xi=[x1,x2,…,xn]T,可以通过快速查表的方式得到其对应的嵌入向量表示Ei=[e1,e2,…,en]T。同理,可以得到用户的嵌入向量表U∈R|U|×d。
物品在序列中的位置很重要,因为用户和物品之间的交互顺序有可能影响用户的下一个交互行为。然而,自注意力模型不包含任何循环或卷积模块来捕捉前一项的位置信息,因此需要编码项目在行为序列中的位置信息,在模型的输入阶段注入可学习的位置嵌入向量P=[P1,P2,…,Pn]T∈Rn×d,所以最终的模型输入如下:
其中,ei,Pi∈Rd分别表示第i个项目的嵌入向量和位置向量。
2.4 自注意力模块
自注意力从全局范围提取项目的特征信息,挖掘项目个体之间的关联性,从而提升推荐的准确性。自注意力使用相同的对象作为查询、键和值的输入,在该模块里,项目嵌入层的嵌入矩阵E'作为输入,经过线性映射转化为3 个矩阵,进一步进行注意力计算,采用scaled dot-product attention 的方式。
其中,Q代表查询向量,K代表键向量,V代表值向量。WQ,WK,WV∈Rd×d是可训练的参数矩阵,d是输入向量的维度大小。比例因子用来避免内积值过大,特别是高维度的情况下,能够避免梯度爆炸问题。自注意力机制无法完全学习到用户多个层面的兴趣偏好,因此,采用多头自注意力机制,使用j个独立的自注意力块并行训练。然后将各自注意模块的输出进行拼接,得到不同层面的用户兴趣组合。
2.5 动态卷积模块
自注意力是一个高度非局部的操作,没有很好地捕捉局部特征依赖。卷积网络常用来提取局部特征。受文献[26]启发,与部署所有输入共享固定参数的标准卷积相比,动态卷积是在捕获不同项目的局部依赖性方面提供了更高的灵活性。
图3 展示了深度卷积的操作过程。定义卷积核为W∈Rd×k,其中d为隐向量维度,k为卷积核宽度。用户交互的序列项目可以看作用户的“画像”,项目嵌入向量的每一维度看作通道。使用卷积核按照交互的顺序方向滑动进行乘积运算,则交互位置i通道c的深度卷积输出如公式(6)所示。
图3 Depthwise卷积示意图
传统的序列卷积方式需要的参数量为d2k,而深度卷积的参数量为dk,可以有效缩减参数量。
将权值和通道维度绑定,不同通道共享一个卷积核,则能进一步简化卷积核W∈Rk,从而得到轻量级卷积,计算公式如下:
动态卷积的操作过程如图4 所示,其为每一个项目的嵌入向量动态生成卷积核,生成卷积核时使用一个内核生成器,内核生成器是一个函数f:Rd→RH×k,f(Xi)=WQXi,其中权重WQ∈RH×k×d,H为通道共享卷积的组数(图中H为3,同颜色通道共享卷积核),类似于多头注意力的头数,可以动态调整。
图4 动态卷积示意图
但是,这样卷积核只依赖于输入的单个项目,忽略了局部上下文。同一个项目在不同的上下文中可能具有不同的含义,对刻画当前局部兴趣具有不同程度的重要性。如图5 所示,在[iPhone,iPad,skirt]和[iPad,skirt,shoes]这2 个局部窗口内,skirt 对刻画当前兴趣的重要程度大不相同。理想情况下,前者权重很小,后者权重更大,模型可以根据输入动态分配权重。因此,通过接收一个输入范围而不是单个物品向量来产生更自适应的卷积核。
图5 局部卷积核生成图
为了能够使自注意力更好地兼容动态卷积,局部动态卷积和自注意力使用相同的查询向量Q和值向量V,Q,V∈Rn×d。输入的项目嵌入向量要经过一个Depthwise 卷积来获取每个项目局部的一个区间内的信息Ks,然后使用这个卷积后的结果Ks与Q的哈达玛积来动态生成卷积核(内核生成器的权重为Wf,Wf∈Rk×d),如公式(9)所示。
使用动态生成的卷积核在V上做卷积,由此得到局部动态卷积的计算公式如下:
2.6 混合注意力模块
前面2 个模块分别针对每一时刻的交互获得了全局特征依赖和局部特征依赖,本模块将全局-局部特征结合一起。
同时为了使模型具有非线性,让全局-局部特征充分交互,应用前馈层到混合注意力子层的输出。
其中,W1∈R2d×d,W2∈Rd×d是可学习的参数矩阵,b1,b2∈Rd是偏置向量,使用ReLU 激活函数。在一层混合注意力层后,Fi已经学习到了每次交互物品的全局和局部特征,堆叠多个自注意力层能够进一步挖掘复杂的物品转换模式。因此模型使用多个全局-局部注意力块,每个块的输出是下一个块的输入,并使用残差网络和层归一化避免由于网络层数增加可能造成过拟合和训练不稳定,计算公式如下:
式中,g(x)表示混合注意层或前馈网络,l代表所处层数,第1 层的输入是序列嵌入向量。也就是说,对于每个块中的g层,在输入g之前对输入x应用层归一化,对g的输出应用Dropout,并将输入Fl加到最终输出中。
2.7 预测模块
经过多层注意力块后,时刻t的输出已经有效融合了全局的特征和局部特征。使用时刻t的输出作为下一项的兴趣,采用经典的矩阵分解来获取用户的一般性兴趣Ui,形成最终的兴趣表示ri,t。
为了预测下一项交互,需要对所有的候选项目进行预测打分,使用向量内积计算与候选项目ei的相似度评分:
模型的损失函数使用二值交叉熵损失函数:
其中,S表示所有用户的交互序列集合,θ为可训练的参数集合,λ为正则化系数。对于真实交互的项目视作正样本,随机采样用户未交互的项目作为负样本对模型进行训练,通过反向传播将损失函数的值最小化。
3 实验与分析
3.1 数据集
本文在3个真实的应用程序数据集上评估模型的性能。数据集在领域、平台和稀疏性方面差异显著:
1)Amazon:由从亚马逊网站上的产品评论语料库构成。亚马逊网站上的不同的产品类别被视为独立的数据集,本文使用“Beauty”数据集,该数据集以其高度的稀疏性和可变性而著称。
2)Steam:一个来自大型在线视频游戏分发平台Steam的新数据集。
3)MovieLens:一个广泛用于推荐系统的电影评分数据集。本文使用MovieLens-1M 这个版本,包括100万用户评分。
对于所有数据集,将评论或评分的存在视为隐式反馈,即用户与项目进行交互,并使用时间戳来确定操作的顺序,丢弃产生交互少于5 个的用户和物品。对于每个用户将其历史交互序列分为3 个部分:最近的一次交互用于测试;倒数第2 次交互用于验证;剩余的交互,…用于训练。对于训练集,每次随机采样4 个用户未交互的项目作为负样本,同样随机采样100 个未交互的项目作为测试集的负样本。经过预处理后的数据统计结果如表1 所示。可以看到Amazon Beauty 数据集的每个用户和每个项目的平均交互动作最少,Steam 用户交互行为和商品交互行为较不对称,而MovieLens-1M 是最密集的数据集。
表1 预处理数据集统计
3.2 评估指标
本文使用Recall@K(Recall rate)作为评估准确性的指标。Recall@K代表了用户下一次点击的项目在前K个预测项中所占有的比率。
其中,n表示测试集的样本总数,hhit代表在前K个预测结果中真实结果的数量。Recall 指标只能衡量在前K个预测结果中是否有真实结果,忽略了真实结果在前K个预测结果中的排名情况。为了衡量模型的排序能力,引入MRR@K(Mean Reciprocal Rank)和NDCG@K(Normalized Discounted Cumulative Gain)2个指标。
其中,n表示测试集的样本总数,Q表示前K个推荐项目中包含正确项目的样本集;ranki是项目i在推荐排名列表中的排名。
NDCG@K关注的是预测到的项目是否放在推荐列表中更靠前的位置,即强调推荐系统的“顺序性”。其中r(i)为推荐列表中第i个项目的相关性分数,命中为1,否则为0。
3.3 对比模型及实验设置
1)BPR[27]:使用偏置矩阵分解法作为隐式反馈的学习方法。
2)NCF[28]:结合矩阵分解和多层感知机学习用户和项目的内部交互特征。
3)GRU4Rec[8]:使用RNN 对用户行为序列中的项目间依赖关系进行建模。
4)Caser[2]:使用垂直卷积核和水平卷积核捕获序列的点级、联合级及跳跃行为模式。
5)SASRec[14]:通过Transformer 中的自注意力机制自适应寻找与目标相关的项目并进行推荐。
6)AttRec[21]:利用自注意力机制来捕捉用户历史行为交互的物品与物品之间的关系,从而更好地学习用户短期兴趣的表示;利用度量学习来对用户的长期偏好进行建模,即同时考虑“局部”与“全局”。
7)FISSA[25]:提出一种类似LSTM 单元的门控函数,将局部兴趣表示和全局偏好有效融合。
对于实验参数设置,采用均值为0、标准差为0.1的高斯分布随机对网络中所有参数进行初始化,采用Adam 动量梯度下降法进行损失函数优化,初始学习率为0.001。在嵌入层中,项目的嵌入维度d=64。Amazon Beauty 和Steam 的序列长度为50,MovieLens-1M 的序列长度为200。对所有需要调整的参数在验证集上运行网格搜索,以此来求解不同的数据集的最佳设置和超参数值,训练模型直到验证集上性能不再提升。
3.4 实验结果比较
3 个数据集MovieLens-1M、Amazon Beauty 和Steam 的对比模型在3 个评估指标Recall@10、MRR@10 和NDCG@10 上的实验结果如表2 所示(最好结果用粗体标出,下划线为次好结果)。
表2 不同数据集上对比模型的实验结果
由表2可得出,在3个公开数据集上进行实验,其召回率、平均倒数排名和归一化折损累计增益在MovieLens-1M 数据集上至少提升1.53%、3.77%和3.28%,在Amazon Beauty 数据集上至少提升1.86%、1.94%和2.46%,在Steam 数据集上至少提升0.22%、0.97%和1.08%。
通过对比实验可以得出:
1)相比于传统矩阵分解的协同过滤推荐方法BPR和深度学习协同过滤模型NCF,多数情况深度序列模型效果都有极大提升,特别是在衡量模型排序能力的指标MRR和NDCG上。
2)不同应用场景下,推荐效果也不是绝对的:Amazon Beauty 数据集最稀疏,使用简单的协同过滤模型NCF 有更高的召回率,能够更好地对用户的静态兴趣进行建模;同时,稀疏场景下,卷积模型Caser获得了更好的排序效果,反映了卷积提取稀疏特征的优势,能够更好地挖掘不同层次的特征;在用户行为密度较高的场景下,自注意力大多取得了较好的效果,这是由自注意力能够关注全局依赖决定的,进而学习不同项目间的内在联系。
3)SASRec、AttRec 和FISSA 模型都使用了自注意力机制,AttRec 模型的效果是最差的,其仅对最近几个交互的项目使用自注意力;相比之下GRU4Rec 模型的效果更好,这是因为它使用GRU 对整个序列建模,学习到了全局依赖,但是存在序列过长导致梯度消失问题。FISSA 模型相比于AttRec 模型的优势在于使用基于位置的注意力机制学习全局的兴趣表示,并且提出物品相似度门控融合全局和局部表示解决用户意图不确定问题。
4)在所有数据集上,本文使用的DConvSA 模型相比于基线模型在稀疏场景和稠密场景下,都取得了一致性提升,充分说明结合动态卷积提取局部特征和自注意力提取全局表示的方法能够很好地对用户兴趣进行建模。在MovieLens-1M 数据集上,本文模型效果提升最为明显,能够在稠密场景下提取复杂的行为转换模式。特别地,在Steam 数据集上,FISSA 模型和本文模型相比有较强竞争力,个别指标甚至更优,这是因为其考虑了候选列表进行物品相似度计算,获得了更好的相关性。
3.5 消融实验
消融实验的主要设置如下:
1)DConv:只有动态卷积模块的模型。
2)SA:只有多头自注意力模块的模型。
3)DConvSA(w/o user):不添加用户特征向量的模型。
4)DConvSA:同时使用动态卷积和自注意力,融合用户特征信息。
根据图6 的实验结果可以观察到,在Steam 和MovieLens-1M 数据集上,单一的动态卷积效果相对较差,这是因为只有动态卷积堆叠时只关注到了最后几次交互的项目,是短期的局部兴趣。而只有多头自注意力则关注到的是单个项目级别的注意力,关注的是全局范围内的项目间的联系,效果好于动态卷积。而在Beauty数据集上,单一的动态卷积效果好于自注意力,因为该数据集的用户行为稀疏,在间隔时间较长的条件下,最近点击的项目对预测下一项目更加重要。不添加用户特征信息的模型没有体现用户的个性化兴趣依赖,在召回率指标上区别较为明显,这是因为融合矩阵分解的用户特征能反映用户的一般兴趣特征。在同时使用动态卷积和自注意力后,效果明显提升,动态卷积专注提取每次交互发生时上下文的局部特征,使得自注意力计算项目间联系时更加准确。
图6 消融实验结果图
3.6 参数对模型的影响
3.6.1 动态卷积核尺寸
在动态卷积模块,改变动态卷积的卷积核宽度运行模型,图7 显示了不同数据集的NDCG@10 值。可以看出随着卷积核宽度的增加,不同数据集上的精度趋势表现相似。当卷积核k=3、k=4 时分别在MovieLens-1M 和Steam 数据集精度达到饱和。较小的卷积核尺寸不足以挖掘上下文的行为联系,而较大的尺寸将模糊局部特征的提取。而Steam 数据集需要较大的卷积核尺寸是因为该场景下用户的交互行为更紧密。相比之下,k=2 时Beauty 数据集取得了较好的效果,说明稀疏场景下用户点击项目的差异性较大,动态卷积时“组合兴趣”的粒度更小。
图7 不同卷积核宽度对性能的影响
3.6.2 堆叠层数
随着层数的增加,网络的容量更大,表达能力也更强。特别是本文模型,会多次计算项目间的相关性,得到更准确的兴趣状态表示。如图8所示,在3个数据集上,MovieLens-1M 和Amazon Beauty 的最佳堆叠层数为2,Steam 的最佳堆叠层数为3。层数过小会导致模型表达能力不够,性能没有饱和;而层数过大,性能不会提升,甚至下降,还会出现网络的收敛速度慢、梯度消失等问题。
图8 不同堆叠层数对性能的影响
4 结束语
在序列推荐问题中,大多数卷积方法都使用多个固定的卷积核提取局部特征,没有很好地体现动态兴趣,并且需要大量参数。此外,现有的方法很少研究“组合兴趣”间的关系。针对上述问题,本文提出了DConvSA模型,该模型结合了动态卷积和自注意力机制的优势,根据局部输入自适应生成卷积核,提取局部上下文特征,学习动态的组合兴趣;同时使用自注意力在全局范围内学习项目个体间的显著兴趣依赖。因此,该模型能够更好地对不同时刻兴趣间的联系进行建模。通过对公开数据集的实验,以及与基线模型的比较,验证了该方法在序列推荐上的有效性。
目前深度学习快速发展,在推荐方面的应用也逐渐成熟。可以尝试对用户的多兴趣表示进行建模,刻画用户不同角度的“人物画像”。另外,目前可解释性在序列推荐的研究工作较少,如何对推荐的结果做出令用户满意的解释也是未来的研究方向。