罗 旭,汪海涛,姜 瑛,陈 星
(昆明理工大学 信息工程与自动化学院,云南 昆明 650500)
随着科学技术的持续迅速发展,互联网迎来了一个信息化的全新时代。人们在日常生活中使用互联网时,总是面对着海量的信息,也正是因为这些丰富多样的信息,产生了信息过载这一比较棘手的问题。用户如何在海量的信息中迅速地获取自己想要得到的信息,而信息发送方又如何能够尽可能快地将自己的信息展现给用户呢?推荐系统的出现使得这一问题得到了很好的解决。推荐系统根据用户过往的交互信息来对用户将来最有可能访问的项目进行推荐。目前,推荐系统已经在相当多的领域中得到了应用,典型的包括电商平台、影音软件等。
推荐系统根据建模偏好的特性不同分为两大类: 传统的推荐系统以及序列推荐系统。前者当中具有代表性的当属协同过滤推荐算法[1],协同过滤主要分为基于项目的和基于用户的,两种方法基本类似,都是根据用户或者项目之间的相似性来进行推荐,这样做的缺点也很明显,即无法捕获到用户动态变化的偏好。而序列推荐则通过建模用户-项目交互序列,随后从中挖掘用户最近的偏好以及历史长期偏好,很好地弥补了传统推荐系统的不足。
这些年来深度神经网络的迅速发展,促使越来越多的研究人员转向将序列推荐与深度神经网络相结合[2]。其中典型的包括将循环神经网络(RNN)、卷积神经网络(CNN)、Transformer[3-5]等先进的模型引入序列推荐。尽管通过深度学习获得了很多成果,但目前大多数序列推荐模型是潜在因子模型,即每个项目都被映射到一个唯一的向量进行表示,然后通过项目嵌入来获取目标用户的偏好。以电商平台为例,其系统中必然存在着数以万计的潜在项目,而如果将每个项目都一一映射到嵌入矩阵中的唯一向量,当在资源受到限制的环境中进行部署时,项目嵌入矩阵将成为内存瓶颈。因此,急需轻量级的序列推荐来解决这一问题。
目前,主流的轻量级序列推荐[6-7]的做法是将项目嵌入矩阵进行压缩,即用组合嵌入的思想,使用包含少量项目的基嵌入表来代替完整的项目嵌入。此外,这些采用组合嵌入方案的序列推荐通常与一些过度参数化的网络[8]相结合,这样做会产生过度计算的问题,降低推荐模型的性能。因此,除了在项目嵌入时采用更轻量的嵌入方式,还应该在序列模式挖掘阶段采取更轻量的方式,换句话说,采用训练参数更少的网络来进行序列模式挖掘。
基于上述分析,本文提出了一种基于动态组合嵌入和动态卷积神经网络的序列推荐算法模型(DCE-DCN)。本文主要贡献有以下3点:
(1) 引入组合嵌入的思想,设计一个新颖的组合嵌入方案,大大减少了项目嵌入矩阵的内存消耗;
(2) 使用动态卷积神经网络学习用户的短期偏好,大大减少训练参数。同时在长期偏好学习阶段,采用双头自注意力取代多头自注意力机制,减少参数冗余;
(3) 在三个真实有效的公开数据集上进行实验,证明了DCE-DCN模型在时间复杂度和空间复杂度方面具有轻量级的特性,并且模型的准确性也有所提升。
在序列推荐[9]早期的研究中,大多数的模型都是与马尔科夫链[10-11]相结合,对用户-项目的交互序列进行建模,以预测下一次交互。Rendle等人[12]将矩阵分解和马尔科夫链相结合来学习项目间迁移的概率矩阵,然后根据用户交互的最新项目进行下一项预测,命名为FPMC。但基于马尔科夫链的模型只能提取短期依赖关系却忽略了长期依赖关系。
随着深度学习在各个领域的飞速发展,序列推荐的研究也随之转向与深度神经网络相结合。Hidasi等人[3]提出将RNN引入到序列推荐当中去,利用门控循环单元,从用户的历史交互序列中提取长期依赖关系。袁涛等人[13]提出引入CW-RNN的序列推荐算法,从用户项目交互序列中提取多尺度的用户偏好。Tang等人[5]提出了基于CNN的Caser算法,其将项目嵌入看作图像的特征映射,并对其进行卷积操作,以捕获项目之间的局部依赖关系。然而,基于RNN的模型在序列太长时捕获全局依赖存在局限性,而基于CNN的模型更关注局部特征,强调用户近期的行为。自注意力机制由于其建模长期依赖的能力,近来得到了广泛的使用。Kang等人[4]提出了一种叫作SASRec的序列推荐算法,其采用多头自注意力机制来提取用户的序列模式,也是首次将自注意力机制引入到序列推荐中。Li等人[14]提出了一种名为TiSASRec的算法,通过显式地建模交互项目之间的时间间隔,来挖掘不同时间间隔对下一项推荐的影响。袁涛等人[15]提出了DHT4Rec,通过多层次结构的动态层次Transformer,既学习用户兴趣的多尺度隐式表示,又显式地建模层次结构。
然而,上面所提到的序列推荐算法大多会在两个方面存在着问题: 过大的项目嵌入带来的内存问题以及模型结构带来的计算问题。也正因为如此,许多研究人员开始研究如何使得推荐系统更加的轻量级。目前大部分的轻量级序列推荐的研究[6,16-17],主要集中于将项目嵌入矩阵进行压缩以得到更高的内存效率。而这些研究的核心思想是采用组合嵌入的方式,使用一组远小于原始项目嵌入矩阵的基嵌入矩阵进行代替。除了针对内存效率来实现轻量级的序列推荐,也有研究人员尝试解决以往模型存在的过度计算问题,从而达到轻量级的效果,比如针对多头自注意力机制虽然能有效地建模长距离依赖,但是计算量巨大的问题,Wu等人[18]提出了轻量卷积和动态卷积,大大减少了训练参数,提升训练性能。然而,大多数序列推荐算法在进行组合嵌入时,都是静态地进行,这导致其产生的结果无法体现用户的动态兴趣。因此在本文中,在引入组合嵌入的思想的基础上,设计了一种动态组合嵌入方案来得到最终的项目嵌入,大大降低了项目嵌入表所占用的内存成本,同时使用动态卷积神经网络和双头注意力分别学习用户的长短期偏好,大大减少训练参数。
本节对本文提出的DCE-DCN算法进行具体的描述。该算法模型主要由两部分组成: ①对项目的一种新的组合嵌入方式; ②动态卷积神经网络和双头自注意力提取用户的长短期偏好。DCE-DCN算法整体模型如图1所示。
令U和V分别表示用户集合和项目集合,Su={v1,v2,…,vt}表示用户u按时间顺序交互的t个项目,其中u∈U,vt表示在时间步t交互的项目。序列推荐的目标: 给定目标用户u的交互序列Su,通过计算得到用户在下一个时间步t+1最有可能交互的前N个项目的Top-N候选项目列表。
对于一个集合中的向量x,y,z,满足以下条件: ①自反性:x~x; ②对称性:x~y并且y~x; ③传递性: 如果x~y并且y~z,则x~z。
具体如何划分可以以服装为例: 我们可以根据服装的季节性、材质、颜色、适用人群等属性来划分分区,而每件衣服都可以由这些分区中的某一个特定值构成,因此这些分区是互补的。通俗来讲,项目的每个属性都可以视为一个等价类,每个等价类对应一个分区,而每个项目最终的项目嵌入向量,可以由从每个互补分区中选取自身特定的向量生成。
图2 动态组合嵌入
(3)
(4)
其中,oi为项目vi的one-hot编码。
(5)
其中,SiLU(x)=x·sigmoid(x)是一个使得模型为非线性并且收敛速度更快的激活函数,W是一个变换矩阵。通过计算得到的权重,最终项目vi的嵌入向量可通过式(6)计算得到。
(6)
另外,为了充分利用交互序列中项目的绝对位置信息和相对位置信息,提高序列推荐的有效性。本文引入了一个使用Sinusoidal位置编码[19]的位置嵌入矩阵P∈RT×D,P=[p1,p2,…,pT],具体如式(7)、式(8)所示。
其中,pos(pos=1,2,…,T)为项目在序列中的位置,因此位置嵌入本身就能建模绝对位置信息,i为向量索引。由于三角函数的特性,即sin(α+β)=sinαcosβ+cosαsinβ等变换,位置α+β的位置嵌入向量可以由位置α和位置β的位置嵌入向量线性表示,从而可以建模相对位置信息。
(9)
通过本文采用的一种新的动态组合嵌入的方案,既为每一个项目生成了一个唯一的嵌入向量,又保证了项目嵌入生成的动态性,同时大大减少了项目嵌入矩阵的内存占用。
本节主要介绍用户的长期偏好和短期偏好是如何提取的,包含两个部分: ①使用动态卷积神经网络提取用户的短期偏好; ②使用双头自注意力提取用户的长期偏好。最后,再使用特定的操作将提取到的短期偏好和长期偏好进行融合,生成用户的最终偏好。
2.3.1 短期偏好提取
虽然轻量级CNN大大减少了训练参数数量,但是其在卷积过程中不同时间步的卷积核是固定的,为了达到更好的效果,本文引入了动态卷积神经网络(DCN),其结构如图3所示。
图3 动态卷积神经网络
DCN与Lightweight CNN的唯一区别在于,卷积过程中每个时间步的卷积核都是动态生成的,如式(10)所示。
(10)
其中,X为输入,d为通道数,i为卷积的位置,m为通道划分的头数,DWCNN为DepthWiseCNN的缩写,f(Xi)是对一个可学习的权重矩阵WQ∈RM×k×D的一个线性变换,如式(11)所示。
(11)
(12)
到这里,本文完成了对用户短期偏好Pshort的提取。
2.3.2 长期偏好提取
Self-Attention(自注意力)这些年在机器翻译、图像识别等领域都得到了非常多的成果,其通过当前元素和其上下文元素来确定该元素应该得到的权重。现有的许多序列推荐算法通常使用自注意力机制来同时捕获局部和全局模式。然而,有研究[22]中指出自注意力机制更倾向于关注局部模式,导致不能充分地建模全局长期依赖。而多头自注意力机制,即多个注意力头并行使用,虽然能够更好地捕获用户的长短期偏好,但是注意力头越多,模型的计算量也越大,由于每个注意力头都是单独计算,因此头数越多,计算产生的不必要的冗余参数也越多,从而带来较高的计算成本和内存成本,例如,Transformer模型(8个注意力头)。因此,为了达到更好的性能,并且使得模型更加的轻量级,本文采用双头自注意力机制代替多头自注意力机制,来专门地提取用户的长期偏好,同时减缓不必要的网络结构和训练参数冗余问题。值得注意的是,本文并没有使用一个注意力头数的结构来获取更低的计算成本和内存占用,这是因为双头自注意力带来的性能更佳。双头自注意力机制如图4所示。使用双头自注意力机制提取用户长期偏好的具体实现过程如下。
图4 双头自注意力
(13)
到这,本文已经完成了对用户的短期偏好和长期偏好的提取。将得到的短期偏好Pshort和长期偏好Plong通过Concat操作得到用户最终的偏好表示Pfinal,如式(14)所示。
Pfinal=Concat(Pshort,Plong)
(14)
(15)
本文使用一个交叉熵损失函数来量化预测DCE-DCN的下一项的误差,如式(16)所示。
(16)
其中,L为训练的样本数目,l∈L为第l个样本。同时在实验的过程中,本文采用Adam优化器[23]来对损失函数进行优化,其是一个具有自适应矩估计的随机梯度下降的变体。
本节首先介绍实验过程中的一些设定,包括数据集的选择、评价指标的选择,然后通过充分的对比实验来分析验证本文提出的DCE-DCN模型的有效性,具体来说主要包含以下几点:
(1) 从模型的准确性和模型性能方面,将DCE-DCN模型与目前先进的序列推荐模型进行对比实验;
(2) 分析超参数对DCE-DCN模型的影响,比如自注意力的头数等;
(3) 设置消融实验验证DCE-DCN模型中的关键组成部分是否真正影响模型的性能。
本文在三个序列推荐中比较常用的公开的数据集上进行实验,分别为Beauty、 Yelp和MovieLens-1M。Beauty是从亚马逊平台收集得来的,包含了美妆等产品的产品评论和元数据; Yelp数据集是从美国最大的点评网站Yelp提供的商户、点评和用户数据收集得到的,用于个人、教育和学术;MovieLens-1M(简称为ML-1M)是广泛使用在推荐系统中的数据集,包含100多万条的用户评分记录。
在进行实验之前,本文对这三个数据集进行了预处理,对预处理后的数据集进行了统计,得到数据的细节包含用户数、项目数、交互数和数据集的稀疏性,如表1所示,数据集分别涵盖了非常稀疏的Beauty以及相对稠密的ML-1M。
表1 实验数据集的统计数据
对于每个数据集,每个用户有自己的一个按交互的时间顺序进行排序的项目交互序列,然后将不活跃的用户和被交互的次数小于4次的项目全部去除掉。通过进行如上处理之后,得到的数据集对于模型的训练更加有效。
本文实验过程中搭载的硬件环境为Windows 10系统,Intel CORE i7处理器,显卡为英伟达2070,编程环境为Python 3.6,构建神经网络训练模型使用的是PyTorch。
本文使用的是命中率Hit Ratio(HR)和归一化折损累计增益(NDCG)[24]这两个广泛应用于推荐系统的指标作为实验的评价指标。
(1)HR@N: HR@N是一种用来评估召回率的指标,其表示Top-N列表中属于测试集合中项目的占比。
(2)NDCG@N: NDCG用来评价排序结果的准确性。推荐系统通常为指定用户返回一个Top-N列表,这时可以用NDCG@N评价该排序列表与用户真实交互列表的差距。
本文将DCE-DCN模型与目前比较经典或者比较先进的序列推荐模型进行对比,具体模型如下:
(1)FPMC[12]: 这是一种结合了矩阵分解和马尔科夫链的模型,该模型可以在捕获序列信息的同时,提取用户的长期偏好。
(2)p-RNN[25]: 这是一种基于RNN的会话推荐模型,在GRU4Rec的基础上考虑到了物品的更多特征,并使用各不相同的RNN并行训练。
(3)Caser[5]: 这是一种典型的将CNN 应用到序列推荐中的模型,通过对项目嵌入矩阵进行卷积操作提取用户的短期偏好。
(4)SASRec[4]: 这是一种将Transformer引入序列推荐的模型,该模型使用多头自注意力机制为每个物品分配不同的权重,捕获用户的长期偏好。
(5)TiSASRec[14]: 这是一种对项目的绝对位置和交互项目间的时间间隔进行建模的模型。
(6)FISSA[26]: 这是一种使用SASRec模型学习用户短期偏好,并且通过一个全局表示模块来优化用户长期偏好建模的模型。
在DCE-DCN模型中,本文设置嵌入维度D为128,DCN卷积操作中的卷积核大小为5×5,自注意力头数为2,基嵌入矩阵的个数统一设置为10。同时,为了使实验能够公平地比较不同方法之间的精度和模型大小,本文对所有方法的嵌入维度进行了统一的设置,嵌入维度均为128。
3.5.1 整体性能比较
表2给出了实验最终得到的在三个公开数据集上的各个模型的结果。通过对实验数据进行总结,本文得出以下结论:
表2 DCE-DCN与基线方法的性能比较
(1) 在所有的序列推荐模型中,性能表现最差的为FPMC模型,这是意料之中的,因为FPMC模型只考虑了项目之间的一阶依赖关系,而忽略了项目之间存在的高阶依赖关系。
(2) 相比于FPMC,基于深度神经网络的模型在性能上更具优势。值得注意的是,由于Caser模型的滑动窗口大小是固定的,其能够计算的项目数量有限,导致其处理具有长距离依赖关系的交互序列时,效果并不好。例如,在Yelp数据集中,通过观察表中的数据可以看到p-RNN的性能是优于Caser模型的。而在其他数据集上Caser模型则具有更优的性能。
(3) SASRec、TiSASRec和FISSA同时作为典型的基于自注意力机制的模型,与其他基线方法相比,具有一定的性能优势。这说明了自注意力结构在序列推荐模型中更具优势。同时TiSASRec和FISSA模型分别利用了时间间隔信息和项目相似性信息,二者相比于SASRec,性能均有所提升。
(4) 而本文提出的DCE-DCN模型,在三个公开数据集上都取得了相比之下最好的性能。具体来说,动态组合嵌入方式所生成的项目嵌入更具个性化,能更有效地表示项目,从而有利于后续的偏好建模。而用户偏好建模阶段所采用的DCN和双头自注意力机制,使得训练过程中的参数大幅减少,训练时间也大幅缩短。得益于这二者,模型中参数所占用的内存比起最小的SASRec也有所下降,这正好体现了DCE-DCN具有轻量级的特性,说明动态组合嵌入很好地压缩了以往使用的项目嵌入矩阵,并且在使用较少参数的情况下,模型的性能并没有降低。
3.5.2 超参数对模型性能的影响
本节主要验证超参数对实验结果的影响,包括嵌入维度D以及自注意力头数H。在进行实验时,本文采用控制变量的方法,即改变一个超参数的值,而将其他参数都设置为最佳效果时的值。具体结果如图5、图6所示。
图5 嵌入维度的影响
图6 自注意力头数的影响
从图5中可以看出,对于嵌入维度D而言,随着维度的增大,模型的性能在三个数据集上都依次增加, 在D=128时,达到最高点,而当继续增加至256时,模型的性能并没有得到提升,反而有所下降,造成这一结果的原因可能是过拟合问题。由此验证了当维度等于128时,本文提出的模型能够得到最佳的性能。
同时,通过对图6的观察可以发现,当自注意力头数为2时,模型在三个数据集上基本都取得了最佳的性能,在Yelp数据集上,头数为3时达到了最佳的性能,但与头数为2的结果差距不大。当头数继续增加时,性能却有所下降,因此,本文提出的模型将自注意力机制的头数设置为2可使模型达到最佳的性能。
3.5.3 消融实验
为了验证本文提出的DCE-DCN模型中核心部分是否真正地对模型的性能产生了影响,本节设置了两个消融实验来验证,最终结果如表3所示。
表3 消融实验
(2)DCE-DCN2: 在提取用户短期偏好阶段,使用标准的卷积神经网络进行卷积操作,而非采用动态卷积神经网络。
从表3中的数据可以看出,当去除模型的某一核心组成部分时,模型的性能都有所下降,这也正好证明了在本文提出的模型中,各个关键组成部分对模型最终的性能都有积极的影响,能够提升模型的性能,具有重要意义。
具体来说,在组合嵌入阶段时如果直接采用相加的计算方式,则是为每个基嵌入向量分配了一个相同的权重,这样会导致本应对最终的项目嵌入向量起到决定性作用的基嵌入向量没有被重点体现出来,从而影响模型最终的准确性,从表3的数据中也可以很清楚地发现这一点。而采用动态的方法将每个基嵌入向量融合在一起的方式,很好地弥补了这一不足。而对于使用动态卷积神经网络来提取用户的短期偏好,其相较于标准的卷积神经网络,优势就在于在进行卷积操作时,每个时间步的卷积核都是动态变化的。
3.5.4 从模型的参数方面分析模型的轻量级
本文提出了基于一种动态组合嵌入方式的轻量级序列推荐模型DCE-DCN,很好地解决了现有的大多数基于深度神经网络的序列推荐模型中存在的项目嵌入矩阵所存在的内存占用问题,同时在用户偏好建模阶段,能够训练更少的训练参数来提取用户的偏好,最终实现了一种轻量级的序列推荐模型。通过充分的实验得到的实验结果可以看出,本文提出的模型相比于其他典型的基线方法,在时间复杂度和空间复杂度上具有轻量级的特性,在性能上也有所提升。将来,我们还会继续探索如何使项目嵌入矩阵所占用的内存进一步减少,并且提升序列推荐模型的性能。