罗 旭,汪海涛,贺建峰
(昆明理工大学信息工程与自动化学院,云南 昆明 650500)
序列推荐作为推荐系统中一个重要的分支,近些年来在很多领域得到了极大的关注,如电子商务、在线服务等[1]。序列推荐是解决网络信息过载问题的有效算法之一,其重点围绕着如何从用户的历史交互行为中挖掘出用户最近的偏好以及历史长期偏好,来为其生成个性化的推荐。
早期的序列推荐一般都是采用基于马尔科夫链的算法[2-4]来捕获基于马尔科夫链的高阶序列模式,这些算法共有的局限性在于其只能捕获局部模式,即重点关注短期依赖关系而忽略了长期依赖关系。近些年来,基于深度神经网络的算法,因其强大的序列建模能力,成为了众多研究人员研究的重点,并提出了各式各样的基于深度神经网络的算法,典型的包括循环神经网络RNN(Recurrent Neural Network)、卷积神经网络CNN(Convolutional Neural Network)和Transformer等[5-7]。然而,这些算法的局限性在于,它们只能建模连续项之间的单向转换,而忽略了同一个交互序列中其他上下文项目之间的转换。为了解决这一问题,很多研究人员将最近热门的图神经网络[8-10]引入进来。基于图的算法首先通过构图将交互序列转换为序列图,再利用图神经网络对图中的节点之间的复杂关系进行建模。
虽然上述算法都取得了不错的效果,但它们都只对目标用户交互序列中的项目转换进行建模,而忽略了邻居的交互序列中的项目转换,这些项目转换中包含了潜在的协作信息,可以反映不同用户之间类似的行为模式,这些协作信息对于推荐是有帮助的。另外,He等人[11]提出的LightGCN算法,虽然对于推荐系统是有效的,但其在获得最终的嵌入表示时,是将每一层得到的嵌入取平均值,这种做法是存在局限性的,因为每一层得到的信息对于最终的项目嵌入所应该分配的权重显然是不同的。
基于上述分析,本文提出了一种基于双通道轻量图卷积的序列推荐算法,命名为DLGC(Dual-channel Light Graph Convolution)。本文的主要工作如下:
(1)构图阶段将目标用户序列和得到的邻居序列进行合并生成一个总的有向图,充分利用用户之间潜在的协作信息。
(2)使用双通道轻量图卷积,分别对目标用户序列和邻居序列进行信息传播,通过指数分母的形式给每一层不同的权重,将每一层的信息进行聚合得到每个通道的嵌入矩阵,然后将得到的2个通道的嵌入通过拼接操作生成最终的项目嵌入矩阵,提高序列推荐的有效性。
(3)在2个公开数据集Beauty和MovieLens-20M上进行了充分的实验,实验结果表明,本文提出的DLGC在HR和NDCG这2个评价指标上都有提升,表明了本文提出的序列推荐算法DLGC的有效性。
在序列推荐[12]早期的研究中,大多数的算法都是基于马尔可夫链[2,3]的,根据用户的最后一个行为来推荐下一个将要进行的交互行为。Rendle等人[13]提出的因子分解个性化马尔可夫链FPMC(Factorizing Personalized Markov Chains) 通过结合矩阵分解和马尔科夫链来学习项目之间迁移的概率矩阵,然后根据用户的最后一个交互项目进行下一项推荐。但是,基于马尔可夫链的算法缺点也比较明显,它缺乏有效学习长期依赖中复杂行为的能力。随着深度学习在各个领域的兴起,大多数序列推荐的研究开始与各种深度神经网络相结合。Hidasi等人[14]在序列推荐当中引入循环神经网络RNN,利用门控循环单元GRU(Gate Recurrent Unit),从用户的历史交互序列中学习长期依赖关系。Tang等人[7]使用卷积神经网络CNN来进行序列推荐,提出了Caser算法,其将项目嵌入看作图像的特征映射,并对其进行卷积操作,以学习项目之间的局部依赖关系。自注意力机制在序列推荐中一般用来为每个项目分配不同的权重,对推荐起关键性作用的项目分配更大的权重,而那些与下一个交互项目不太相关的项目,则分配较小的权重。Kang等人[15]提出了一种名为SASRec(Self- Attentive Sequential Recommendation)的序列推荐算法,其采用多头自注意力机制来建模用户的交互序列。Jiang等人[16]提出了一种名为AdaMCT(Adaptive Mixture of CNN-Transformer)的算法,有效地混合CNN和Transformer来建模历史项目序列的局部和全局依赖关系。Du等人[17]提出了一种名为CBiT(Contrastive learning with Bidirectional Transformers for sequential recommendation)的算法,在双向Transformer中应用滑动窗口技术,从而能够对用户序列进行更细粒度的划分,再结合对比学习获取更高的推荐准确率。
在实际的推荐应用场景中,用户的交互序列是可以用图结构来表示的,节点表示项目,边表示节点间的关系。这些年,图神经网络因其强大的图结构数据的学习能力,在很多领域得到了广泛的应用,包括推荐系统。图神经网络在序列推荐中的应用主要体现在构造序列图和信息传播2个方面,总体来说就是应用在项目嵌入部分。
目前构建序列图的方法主要有2种:一种是利用额外的交互序列来丰富图的结构,附加的序列可以是其他用户的交互序列、同一用户的历史交互序列以及系统中所有的交互序列等。Wang等人[18]提出了一种名为MGNN-SPred(Multi-relational Graph Neural Network model for Session-based target behavior Prediction) 的算法,其利用所有的交互序列构成一个多关系项目图,包括目标和辅助行为类型。另一种方法是调整当前序列图的结构,比如Pan等人[19]在SGNN-HN(Star Graph Neural Network with Highway Network for session-based recommendation)算法中引入一个自设的虚拟star节点作为序列图的中心,该节点与序列图中的每个节点之间都通过双向边连接。
Figure 1 Process of DLGC algorithm图1 DLGC算法处理过程
在得到构建好的序列图后,需进行信息传播来学习序列中项目之间的转换模式。门控图神经网络GGNN(Gated Graph Neural Network)及其变体目前被广泛用于在有向图上传播信息。GGNN通过平均池分别聚合前一项和下一项的信息并组合这2种信息,再利用GRU组件集成中心节点和邻居节点的信息。比如Chen等人[20]提出的DAT-MDI(Dual Attention Transfer in session-based recommendation with Multi-Dimensional Integration)算法就是GGNN的变体之一。
除了上述工作,目前基于图神经网络的序列推荐算法的研究比较广泛,包括对超图神经网络的研究、图对比学习方法等[21-23]。比如,Zhang等人[22]提出了一种基于图对比学习的序列推荐算法GCL4SR(Graph Contrastive Learning for Sequential Recommendation),利用所有交互序列生成加权项目转换图,为所有交互提供全局上下文信息。Yang等人[23]设计了一个多行为超图增强Transformer框架MBHT(Multi-Behavior Hypergraph-enhanced Transformer framework)来捕获用户短期和长期的跨类型行为的依赖关系。
本文通过从其他用户的交互序列中,为目标用户生成对应的邻居交互序列,再将目标用户序列和邻居交互序列合并为一个有向序列图,充分利用用户之间潜在的协作信息。同时,使用一个双通道轻量图卷积结构来进行信息传播,生成更准确更有意义的项目嵌入,从而使得后续的偏好学习能够更有效,提高推荐算法的性能。
令U和V分别表示用户集合和项目集合,S={s1,s2,…,s|U|}表示所有的用户项目交互序列,su={v1,v2,…,vn}表示用户u按时间顺序交互的n个项目,其中,u∈U,vt表示在时间步t交互的项目。序列推荐的目标:给定目标用户u的交互序列su,通过计算得到用户在t+1时间步最有可能交互的前N个项目列表Top-N。
3.2.1 有向序列图的生成
在学习项目嵌入之前,首先要将用户的交互序列构建成图结构。本文不仅将目标用户的交互序列构建成图结构,而且还利用了相似的邻居序列,即最终生成的图是由目标用户序列和邻居序列共同构建而成的,这样可以充分利用其他用户潜在的协作信息。
构图之前,需要找到邻居序列,这个寻找过程本质上是对比序列之间的相似度。以往有的方法是简单比较2个序列之中重复的项目数,重复项目越多相似度越高。但是,这种方法存在一定的局限性,比如对于用户ui的交互序列{v1,v2,v3}和uj的交互序列{v3,v2,v1},在二者的交互序列中项目数量情况完全一致,但交互的时间顺序完全相反,若将这2个序列视为相似序列,是存在一定问题的。因此,本文在已有方法的基础上,提出了一种新的构图方法,具体如下:
首先保留判断项目重复数的做法,这样可以过滤掉大部分基本不相似的交互序列。然后在剩下的交互序列中,为每个交互序列生成一个有向图,有向图的节点为项目,边为项目之间的关系,即如果vi是vj的上一次点击,则生成一条vi指向vj的边。接着将原序列su(目标用户的交互序列)生成的图与其他序列生成的图进行比较,判断是否相似。
Figure 2 Construction of graph图2 图的构建
从数学的角度来说,本质上是比较二者的邻接矩阵。具体来说,对于2个序列,它们生成的图的邻接矩阵分别为A1和A2,对2个矩阵进行减法操作得到新的矩阵At,再将At与A1进行比较,如果A1中原本为1的元素,在At中大多数变成了0,则可以认为这2个序列是相似的。这里需要注意的是,交互序列中的项目数不同,导致邻接矩阵的阶数不同,所以在计算之前,需要将2个邻接矩阵的阶数统一,即低阶矩阵通过补0变为高阶矩阵。
At=A1-A2
(1)
对于得到的全体邻居序列,综合相同项目数和相似度进行排序,得到原序列su的前m个邻居序列后,将所有序列合并,生成最终的有向序列图G,如图2所示。
邻居序列集合记为Nsu,最终的有向序列图G中的每个节点为原序列su和邻居序列Nsu中的节点,边为项目的交互顺序。
算法1 有向序列图生成算法输入:用户项目交互序列S。输出:有向序列图G。(1)for si in S:(2) if counts(su)=or≈counts(si)//统计重复项目数 add si into Sinitial;//Sinitial为初始邻居序列(3)end for(4)A and Au←graphGenerate(Sinitial ,su);/*Au表示交互序列su对应的邻接矩阵,A表示Sinitial中交互序列得到的邻接矩阵集合*/(5)for Aj in A:(6) At←Aj-Au;(7) if isSimilar(At,Au)=true(8) add sj into N;//sj为Aj对应的序列(9)end for//得到全体邻居序列N(10)Nsu← rank(N);//对N排序(11)G← merge(su,Nsu);(12)return G
3.2.2 双通道轻量图卷积生成项目嵌入
在通过上述构建方法得到最终的有向图之后,算法将利用多层神经网络来传播节点信息并生成项目嵌入,最终图中的每个项目节点vi都聚合了图中的邻居节点所携带的信息。
通过He等人[11]提出的LightGCN算法验证了传统GCN中常用的特征转换和非线性激活对于性能的贡献较小,最终只保留GCN中的邻居聚合。本文在构图阶段,加入邻居序列的协作信息之后,生成的有向序列图将会更大,这可能会降低算法的训练效率。而LightGCN具有轻量的特性,能够更高效地训练算法,这恰好能弥补构图阶段带来的不足。因此,本文将使用LightGCN来进行信息传播。
另外,由于本文不仅利用了目标用户的交互序列,还利用了邻居用户的邻居序列,二者对最终的推荐所带来的影响是不同的,前者反映的是用户本身的行为信息,后者反映的是邻居用户的协作信息。因此,本文为2种类型的节点分别进行信息传播,即设计了一个双通道轻量图卷积算法(DLGC)来生成项目嵌入,双通道分别为原序列通道和邻居序列通道,如图3所示,其中K表示通道的层数。
Figure 3 Dual-channel light graph convolution图3 双通道轻量图卷积
(2)
(3)
LightGCN算法通过简单的求平均来生成最终的嵌入表示,即简单地将每一层得到的节点信息视为同等重要。但实际上,在较前面和较后面的层中得到的节点信息,其二者对最终的嵌入表示的重要性显然是不同的。因此,本文通过使用指数分母的形式,为每一层得到的节点信息分配不同的权重,削弱前面层的影响,来组合每一层的节点信息。具体的组合方式如式(4)和式(5)所示:
(4)
(5)
(6)
本节主要描述如何从上述生成的项目嵌入中学习出用户的短期和长期偏好,算法学习过程如图4所示。
3.3.1 短期偏好学习
通常来说,用户的短期偏好一般与其最后交互的几个项目相关,以往有些工作将最后一个项目的嵌入直接作为短期偏好,并证实其具有有效性。因此,本文在学习用户的短期偏好时,并不使用以往用得较多的卷积神经网络以及其他网络,而是简单地对项目嵌入矩阵中的后几项直接进行运算。具体来说,对于用户u所对应的项目嵌入矩阵E={e1,e2,…,en},本文截取最后o项,再通过取平均生成用户u的短期偏好表示Pshort,如式(7)所示:
(7)
Figure 4 Process of long-and short-term preference learning图4 长期和短期偏好学习过程
3.3.2 长期偏好学习
用户的长期偏好相对而言是稳定的,与交互序列中不同时间段交互的项目都有关。Jiang等人[16]指出以往使用的自注意力机制(Self- Attention),通过点击缩放和softmax函数为每个项目生成一个权重,但这些权重的和总是为1,即互斥的,无法同时考虑到多个与下一项交互高相关的项目。AdaMCT中引入了Hu等人[24]提出的挤压-激励网络SENet通过显式地建模通道之间的相互依赖关系来重新校准通道级的特征,通道之间的关系是非互斥的。因此,本文对长期偏好的学习,是在多头自注意力的基础上引入SENet,其中,对于多个与下一项高度相关的项目,SENet会为它们都生成一个较大的权重。
长期偏好的具体学习方式如下所述:首先采用多头自注意力机制,每个头都采用缩放点积的计算方式,如式(8)和式(9)所示:
(8)
output(E)=
LN(Dropout(Attention(Q,K,V)Wo))
(9)
其中,Q、K和V分别表示项目嵌入矩阵E通过变换得到的可学习的矩阵,对应于查询(query)、键(key)和值(value);Wo表示多头自注意力输出位置的可学习矩阵;LN(·)表示层归一化运算;output(·)表示多头自注意力的输出;d表示向量维度。
之后通过SENet网络为output(E)中的每个项目重新分配权重,同时考虑多个高相关的项目,从而有效地增强算法的表示能力,具体分配方式如式(10)~式(13)所示:
(10)
Fexcitation(z,W)=σ(W2δ(W1z))
(11)
α=SENet(z,W)=Fexcitation(z,W)
(12)
Fscale(output(E),α)=α·output(E)
(13)
其中,z表示通过挤压函数得到的一维特征向量,zi表示挤压得到的一维向量z的第i个分类,σ(·)和δ(·)分别表示sigmoid激活函数和ReLU非线性激活函数,W表示输入的权值矩阵,W1和W2表示可学习的权值矩阵,α表示得到的权重值。
在得到权重值之后,通过式(14)得到最终的长期偏好表示Plong:
Plong=α⊗output(E)
(14)
其中,⊗表示使用广播机制的的元素级操作。最后,将Pshort和Plong通过连接操作生成最终的用户偏好表示Pfinal。
(15)
(16)
在算法的训练过程中,本文使用一个交叉熵损失函数来量化模型的误差,如式(17)所示:
(17)
以20%甲醇为溶剂,将500 μg/mL的野黑樱苷标准储备液进一步稀释成0.3、0.5、1、5、10、20、50、100 μg/mL标准溶液,进样量10 μL,以质量浓度(x)为横坐标、峰面积(y)为纵坐标作图,得回归方程y=15.796x-1.177,R2=0.9999(n=3)。说明在0.30~100 μg/mL范围内有良好的线性关系。
本文选取2个广泛使用的公开数据集Beauty[25]和MovieLens-20M[26]进行实验。Beauty是从亚马逊平台收集得来的,包含了美妆等产品的产品评论和元数据;MovieLens-20M是在推荐系统中广泛使用的基准数据集,包含2 000多万的用户评分记录。数据集详情如表1所示。
Table 1 Statistics of experimental datasets表1 实验数据集的统计数据
在进行实验之前,本文先对2个数据集进行预处理。对于每个数据集,每个用户有自己按交互时间顺序进行排序的项目交互序列,然后将不活跃的用户和被交互次数少于4次的项目全部去除掉。
4.2.1 评价指标
为了评估DLGC算法的性能,本文采用广泛使用的留一法。具体而言,对于每个用户的交互序列,本文将最后1个项目用于测试,倒数第2个项目用于验证,剩余项目用于训练。并遵循以往常见的做法,随机抽样99个未被该用户交互过的项目作为负样本,与最后1个项目组成包含100个项目的测试集。本文使用命中率HR(Hit Ratio)和归一化折损累计增益NDCG(Normalize Discounted Cumulative Gain)这2个广泛应用于推荐系统的评价指标来评价排名列表。
(1)HR@N:HR@N是一种用来评估召回率的指标,其表示Top-N列表中属于测试集合中项目的占比。
(2)NDCG@N:NDCG@N用来评价排序结果的准确性。推荐系统通常为指定用户返回一个Top-N列表,这时可以用NDCG@N评价该排序列表与用户真实交互列表的差距。
4.2.2 实验参数设置
对于所有算法,向量维度统一设置为64,涉及到注意力机制的算法,与SASRec中提到的一致,其注意力层数与头数均设置为2。对于MovieLens-20M和Beauty,最大序列长度分别设置为200和50。退化率dropout根据MovieLens-20M和Beauty的稀疏性分别设置为0.2和0.5。
为了充分验证DLGC的有效性,本节将其与一些典型且较为先进的序列推荐算法进行对比。具体的对比算法如下:
(1)FPMC[13]:这是一种结合了矩阵分解和马尔科夫链的算法,该算法可以在捕获序列信息的同时,提取用户的长期偏好。
(2)GRU4Rec+[27]:这是GRU4Rec(Gated Recurrent Unit for Recommender system)的提升版,使用与GRU4Rec不同的损失函数和采样策略。
(3)Caser[7]:这是一种典型的将CNN 应用到序列推荐中的算法,通过对项目嵌入矩阵进行卷积操作从而提取用户的短期偏好。
(4)SASRec[15]:这是一种将Transformer引入序列推荐的算法,该算法使用多头自注意力机制为每个物品分配不同的权重,捕获用户的长期偏好。
(5)BERT4Rec(sequential Recommendation employing the deep Bidirectional Encoder Representations from Transformer to model user behavior sequences)[28]:这是一种在SASRec基础上进行改进的算法。
(6)SURGE(SeqUential Recommendation with Graph neural nEtwork)[29]:这是一种引入GNN的序列推荐算法,从包含噪声信息的交互序列中提取用户当前的核心兴趣。
(7)H2SeqRec(HyperbolicHypergraph representation learning method for Sequential Recommendation with the pre-training phase)[30]:这是一种基于超图的序列推荐算法,提出了双曲超图表示学习方法。
对于对比算法,本文使用原始文献提供的代码来进行实验。使用网格搜索的方式调整所有算法中通用共享的超参数。潜在向量的维度为16,32,64,128和256,注意力头数为2~4。对于算法特有的超参数和初始化设置,维持原始文献中所使用的默认设置。
表2给出了在2个公开数据集上的各个算法的实验结果。通过对实验数据进行分析,本文得出了以下结果:
在2个数据集上,评价指标结果最差的为FPMC,这主要是因为FPMC只考虑了项目之间的一阶关系,而忽略了高阶关系。相比之下,Caser通过水平卷积层和垂直卷积层,以及联合序列模式和一种跳跃行为来提取相邻项的依赖关系,其性能优于FPMC。在非基于图神经网络的序列算法中,SASRec和BERT4Rec相较于GRU4Rec+等算法,性能有显著提升,这表明了自注意力机制在建模序列行为时,具有一定的优越性。基于图神经网络的SURGE和H2SeqRec,其性能优于其他对比算法,且H2SeqRec在2个数据集上取得了相对较优的性能。这表明将交互序列转换成图结构数据,再通过图神经网络显式建模复杂上下文转换关系的有效性。
而本文提出的DLGC在2个评价指标上都优于其他基线算法。这得益于在构图阶段,引入了邻居序列,充分利用了其他用户的潜在协作信息。另外,在信息传播阶段,使用双通道轻量图卷积分别对2种序列进行信息传播,得到更充分有效的项目嵌入,提升了算法的建模能力。
本节验证DLGC中嵌入维度d、邻居序列数m以及指数分母形式对于实验结果的影响。对某个参数进行分析之前,都将其余参数设置为最佳性能时的值。
4.5.1 嵌入维度d的分析
本小节分别对Caser、SASRec、H2SeqRec和DLGC进行嵌入维度d的分析,以NDCG@10作为评价指标,结果如图5和图6所示。从图中可以明显看出,随着d的增加,算法的性能也随之增加。当d达到64时,算法的性能并没有继续随着d的增加而增加,而是趋于平稳或者有所下降。这说明并不是嵌入维度越高,算法的性能越好,嵌入维度越高反而会带来过拟合的问题,导致算法的性能有所下降。因此,本文将嵌入维度设置为64,以获得最佳的性能。
Figure 5 Effect of embedding dimensiond on Beauty图5 Beauty上嵌入维度d的影响
Figure 6 Effect of embedding dimensiond on MovieLens-20M图6 MovieLens-20M上嵌入维度d的影响
Table 2 Performance comparison between DLGC and baseline algorithms
4.5.2 邻居序列数m的分析
只关注指定用户的交互序列,无法充分利用到其他用户潜在的协作信息,但是如果引入大量的邻居序列,又会带来大量的噪声。因此,本小节对邻居序列数m进行分析,m取值为0~100。实验结果如图7所示,当邻居序列数m为50到70时,DLGC在2个数据集上都取得了较优的性能,当m为60时,性能最优。随着邻居序列的不断引入,更多的协作信息也随之引入,算法的性能也不断提升,这说明引入邻居序列是有效的。但是,越来越多相似性不高的邻居序列引入会给算法带来噪声,从而降低算法的性能。因此,本文将邻居序列数m设置为60。
Figure 7 Effect of number of neighbor sequences图7 邻居序列数量m的影响
4.5.3 指数分母形式有效性分析
本文在双通道轻量图卷积中,使用了一个指数分母形式来组合单个通道内的各层信息。本小节对指数分母形式的有效性进行分析,将其与另外2种方式进行对比,一种是直接取最后一个值作为结果(LastOne),另一种是求平均,也是LightGCN中的做法(Average)。这里不考虑使用深度神经网络方式(比如自注意力机制)的原因是避免增加额外的网络,影响双通道轻量图卷积的轻量特性。实验结果如图8所示。
Figure 8 Effect of combination modes图8 组合方式的影响
从图8中可以看出,本文使用的指数形式的组合方法,在2个数据集上都取得了最佳的效果,证实了该方式的有效性。比起LightGCN中使用的取平均方式性能更好,这是由于指数形式给每一层分配了不一样的权重,前面层的重要程度相比于后面层的重要程度有所削弱。
本节验证DLGC中核心部分的有效性,主要包括2个方面:构图方式的有效性和双通道轻量图卷积的有效性。实验结果如表3所示,表3中,DLGC-Number表示只考虑相同项目数量来生成前m个邻居序列;DLGC-Single表示只使用单个轻量图卷积来进行信息传播。
Table 3 Results of ablation experiment表3 消融实验结果
从表3中可以看出,相比于2个去除核心部分的DLGC,完整的DLGC在2个数据集上都取得了最佳的性能,验证了2个核心部分的有效性。具体来说,通过先为每个序列生成一个有向图,再对有向图对应的邻接矩阵进行运算等操作来判断序列之间的相似性,能够尽可能多地将高相似性的邻居序列找到,从而充分利用其他用户潜在的协作信息,对于最终的推荐起到了很大的帮助。另外,由于2种序列对最终的推荐所带来的影响是不同的,前者反映的是用户本身的行为信息,后者反映的是邻居用户的协作信息。将2种序列都输入到单一轻量图卷积中,无法有效地建模出项目之间的复杂关系转换,而使用双通道轻量图卷积进行信息传播,可以充分利用不同序列中所包含的信息,提升推荐的有效性。
本文考虑到目标用户与其他用户的交互序列中项目的复杂转换关系,提出了一种基于双通道轻量图卷积的序列推荐算法。该算法不仅建模目标用户的交互序列,还建模其邻居用户的交互序列,从而充分利用了用户之间潜在的协作信息。同时使用一个双通道轻量图卷积分别对2种序列中的节点进行信息传播,使得最终生成的Top-N列表更准确,推荐性能更好。将来,会继续考虑引入并有效地结合其他有效的信息(比如价格信息等),以获得性能更好的序列推荐系统。