郑 诚,王宇航,颜莉莉
1(安徽大学 计算机科学技术学院,合肥 230601)
2(计算智能与信号处理教育部重点实验室,合肥 230601)
3(安徽商贸职业技术学院计算机系,安徽 芜湖 241000)
E-mail:maple_w@foxmail.com
伴随互联网技术的飞速发展,网络已经成为人们获取信息的重要途径.但由于网络资源的指数型增长,用户面临着信息过载的问题,很难快速从中检索到感兴趣的内容[1].推荐系统通过分析用户和物品的特征,利用用户和物品之间的历史交互行为数据,帮助用户筛选可能感兴趣的信息.
现阶段推荐领域的主流算法是协同过滤算法,可以分为两种:基于内存的(Memory-based)协同过滤方法[2],寻找相似的用户或物品进行推荐;基于模型的(Model-based)协同过滤算法[3],利用用户对物品的历史交互数据,构建一个模型进行推荐.协同过滤方法不需要考虑用户或项目自身的特征,能够很好的发现用户的潜在偏好.常用的方法如矩阵分解模型,将用户-项目交互矩阵转为表示用户和项目的低维矩阵,进而用来进行评分预测.但这种方法常常面临着数据稀疏问题.
解决该问题的一种思路是引入额外的辅助信息(Side information)作为输入.辅助信息能够丰富对用户和项目的描述,增强推荐算法的挖掘能力,进而弥补交互信息的稀疏.知识图谱是一种异构的语义网络,其节点表示实体或概念,边代表实体间的各种语义关系.知识图谱中蕴含着丰富的知识信息,能够极大扩展项目的信息,强化项目之间的联系.近年来,随着知识图谱技术的不断发展,研究者考虑使用知识图谱作为辅助信息的来源,提升推荐效果.而随着深度学习的兴起,使用神经网络模型捕获用户与项目的深层潜在特征也能够在一定程度上缓解该问题.
现有方法中,一种使用知识图谱嵌入(KGE)获取语义信息,直接应用于下游推荐任务中.虽然取得一定效果,但该种方法只考虑实体间存在直接连接的关系,没有考虑到利用多跳关系提取远距离特征,更适合应用于知识图谱补全等图内应用之中.另一种方法将知识图谱视为异构信息网络,通过元路径学习用户项目之间的相似度,并利用attention等手段进行处理.该种方法能够利用知识图谱中的结构信息,但元路径建模的方式比较低效,需要通过领域知识预先定义元路径,且在数据量大时路径抽取需要耗费大量时间、空间.而两种方法的单独使用都无法充分地利用知识图谱中的丰富信息,存在提升的空间.
围绕上述背景,本文在传统的矩阵分解的基础上引入深度网络模型,并结合知识图谱中的语义信息与结构信息,提出知识图谱增强的神经协同过滤推荐方法KGNCF(Knowledge Graph enhanced Neural Collaborative Filtering recommendation method).方法利用图神经网络的思想,无需人工定义即可方便地学习知识图谱中的结构信息.并取现有的两种不同方法的优点,将语义信息与结构信息有机的结合在一个端到端的过程中.本文的主要贡献如下:
1)为缓解数据稀疏问题,将知识图谱作为边信息的来源,引入到协同过滤方法中.并提出通过表示学习方法获取语义特征、通过有注意力的邻域消息传递机制获取结构特征的方法,充分利用知识图谱中的多方面丰富信息.
2)针对传统的矩阵分解方法无法捕获用户与项目间的复杂交互特征的问题,提出将知识增强后的用户与项目表示同时进行矩阵分解推荐与神经网络推荐,并将两模型加以融合得到最终的推荐结果.
3)模型在公开数据集上取得了较好的实验结果,证明了模型的有效性.
1994年GroupLens研究小组提出基于用户的协同过滤算法,利用与目标用户兴趣相似的用户为其进行推荐[4].而后以因子模型(SVD)为代表的基于模型(Model-based)的协同过滤算法逐渐得到研究者的关注.不同于基于内存的(Memory-based)协同过滤算法通过寻找相似的用户/物品进行推荐,基于模型的方法[5]则是利用用户对物品的历史交互数据,也称为反馈数据,构建一个模型来进行推荐,该模型随用户喜好的变化而改变,能够发现用户潜在的兴趣偏好,对于复杂对象如音乐、电影等,也有很好的推荐效果[6].
而随着深度学习的发展,Salakhutdinov[7]等人将深度学习应用于推荐领域,提出一种结合了受限玻尔兹曼机的协同过滤模型.Hinton[8]等提出深度信念网络,通过训练多层非线性变量连接成的生成模型,从数据中获取深层次的特征表示,并将其应用于音乐推荐中.基于深度学习的推荐能够从交互数据中进行特征学习,并将数据映射到低维空间之中,从而获得用户和项目的深层次特征表示.而后随着卷积神经网络、循环神经网络因能够减少参数数量、处理序列信息而兴起,研究者也将它们应用于推荐领域之中[9-11].
这些方法虽然能够提升推荐表现,但本质上的数据稀疏问题依然存在,添加辅助信息能够有效缓解该问题,如结合社交网络、异构信息网络的推荐方法也开始被提出.
知识图谱中蕴含丰富的知识,可以精确地描述用户和项目的属性[12].因此,将知识图谱作为一种辅助数据源引入已经引起了越来越多研究者的关注[13].现阶段将知识图谱引入推荐系统可以分为两类:基于嵌入的方法和基于路径的方法.前者将知识图谱弱化为物品属性,统一地把用户和物品的属性作为推荐算法的输入,如LibFM[14].Zhang等[15]结合知识图谱表示学习方法,将协同过滤模块与知识嵌入、文本嵌入、图像嵌入等多方嵌入结合到一个统一的贝叶斯框架中.Wang等人提出了MKR[16],通过多任务学习框架的使用,交替进行知识图谱表示学习和推荐模块训练,可以防止过拟合并提高泛化能力.后者将知识图谱视为一个异构信息网络,然后构造物品之间的基于meta-path或meta-graph[17]的特征,充分且直观地利用知识图谱的网络结构.程淑玉等将知识图谱与循环神经网络相融合,利用偏好扩散的思想丰富用户的偏好信息,提高了推荐结果的可解释性.
但基于嵌入的方法仅利用了知识图谱中的语义信息,未能很好的利用其中的结构信息.基于路径的方法通常需要手工构建元路径,元路径的质量对推荐结果存在很大影响,不能方便而有效的挖掘图谱中的所有信息.
本文提出一种知识图谱增强的神经协同过滤推荐方法KGNCF.方法首先获取项目对应的元数据,并以此构建出对应的知识图谱.再通过表示学习方法获取图谱中与项目对应实体的语义特征,并结合注意力机制对目标实体的邻居实体进行信息传播,以获取实体的结构特征.最后将语义和结构方面的特征向量融合后得到全局项目表示,与用户表示一起进行矩阵分解推荐与神经网络推荐,将推荐部分两模型加以融合得到最终的推荐结果.
知识图谱是一种异构的语义网络,其节点表示实体或概念,边代表实体间的各种语义关系.一般用三元组的形式表示其中的知识,每个三元组包括一个头实体、一个尾实体和头尾实体之间的关系,如(Titanic,genre,Drama)表示了《Titanic》这部电影的类型(genre)是剧情片(Drama).对于电影推荐领域的项目,即电影,我们从专业网站获取其元数据后构建出电影领域知识图谱.实体类型主要包括电影名、导演、主演、电影类型等,如图1所示.
图1 知识图谱样例示意图Fig.1 A sample of knowledge graph
3.2.1 语义特征提取
知识图谱中蕴含着丰富的语义信息,如何获取这些信息以得到推荐系统中对应项目的语义特征是我们首先要考虑的问题.考虑到表示学习能够将目标的语义信息表示为稠密低维的实值向量,我们使用知识表示学习处理得到的知识图谱.
传统的知识表示学习方法,如翻译模型,是受word2vec中词向量空间的平移不变现象启发,将知识图谱中的关系看做实体间的一个平移向量.对于三元组(h,r,t),翻译模型认为关系向量lr是头实体向量lh到尾实体向量lt的翻译,即
lh+lr≈lt
(1)
但该方法在处理1-N或N-N的复杂关系时会产生误解,导致学习得到的实体区分度较低.如在电影领域,可能存在有的人物既是电影的主演又是该电影的导演的情况,这种情况下该方法可能会学习到错误的实体表示,对后续推荐产生负面影响.
图2 传统翻译模型与改进的翻译模型Fig.2 Traditional translation model and modified translation model
为解决该问题,我们让同一实体在对应关系不同时,得到的表示也不同.对于三元组中的关系r,我们使用平移向量lr和超平面的法向量w共同表示.如图2所示,对一个三元组(h,r,t),首先将头实体和尾实体对应的向量lh,lt沿着法线wr投影到关系r对应的超平面,即
lhr=lh-wTrlhwr,ltr=lt-wTrltwr
(2)
因为关系r可能存在多个超平面,令lr与wr近似正交以选取一个作为投影超平面.损失函数定义为:
fr(h,t)=lhr+lr-ltrL2
(3)
3.2.2 结构特征提取与融合
知识图谱的实体节点之间存在着各种关系作为边连接,即相邻的节点之间存在着某种联系.以电影知识图谱为例,从一个电影节点开始向外延伸,与其相邻的节点存储着该电影的各种属性信息.如果继续向外延伸,则第2次延伸到的节点为与选定电影节点存在着某种相同属性的电影节点.以此类推,我们还可以继续向外扩展,以获取更多更远距离的相关节点.我们认为对知识图谱的利用不应局限于节点表示中的语义特征,在图结构中相邻节点的分布本身也蕴含着丰富的知识,我们称为结构特征.我们在图上迭代的获取实体的邻居信息,并通过注意力机制进行融合,将邻域信息聚合到目标实体节点上.该部分概念如图3所示.
图3 提取结构特征的邻域聚合概念图Fig.3 Conception of neighbor aggregation to extract structural features
经过语义特征提取后,对每个电影实体可得到一个表示ei.令Ni为该实体的邻域集合,Ni={en|(ei,r,en)∈G}.对于实体自身ei与其邻域中的实体en,使用实体注意力ain表示实体en对实体ei的重要性,定义为:
ain=att_entity(ei,en)=LeakyReLU(W[ei‖en])
(4)
其中ei,en分别是实体和其邻居实体经过语义特征提取得到的向量表示,‖表示拼接操作,W为训练参数.将拼接好的实体表示进行点积操作,然后使用LeakyReLU激活函数,得到实体en对于实体ei的重要性.为方便计算,使用softmax函数对其进行归一化,得到实体的聚合权重系数αin,公式为:
αin=softmax(ain)=exp(ain)∑m∈Niexp(aim)
(5)
经过邻域聚合后的实体表示由其邻居实体en和相对应的聚合权重系数αin的加权和表示:
ei_neighbor_agg=∑en∈Niαinen
(6)
将上述部分作为一个单层的邻域聚合层,我们可以通过不断叠加该聚合层获取更远距离的邻居实体上的知识.假设进行L次叠加,则实体ei在第l+1层的表示为:
el+1i_neighbor_agg=∑eln∈Nliαlineln
(7)
最终我们得到第L层聚合后的实体表示:
ei_final=eLi_neighbor_agg=∑eL-1n∈NiL-1αinL-1enL-1=…
(8)
接下来我们将得到的实体表示应用到推荐领域之中,为方便起见,推荐部分的ei即代表上式得到的最终实体表示ei_fianl.
在该部分我们将从知识图谱中提取的语义特征和结构特征与原始项目表示进行融合,以丰富项目表示中所蕴含的信息.并结合矩阵分解与神经网络进行神经协同过滤推荐.
3.3.1 矩阵分解推荐
矩阵分解使用pu和qi的内积来估计其交互yui:
ui=f(u,i|pu,qi)=pTuqi=∑Kk=1pukqik
(9)
其中K表示隐空间的维度.我们将从知识图谱中提取的语义特征和结构特征与原始项目表示进行融合,其中项目i对应与知识图谱中的实体e:
qi⊕ei
(10)
其中⊕表示将两种表示进行融合.我们尝试使用sum、avg、concat三种不同方式进行融合并进行实验比较,根据实验结果,我们采用avg方法对实体嵌入和项目表示进行合并,并作为最终的项目表示输入矩阵分解模型:
φMF=pMFu⊙(qMFi⊕ei)
(11)
其中⊕表示对应元素相乘.然后我们将该向量投影到输出层:
ui=σ(hTφMF)
(12)
输出层激活函数表示为σ,我们采用sigmoid函数:
σ(x)=11+e-x
(13)
最后通过log损失学习输出边权重h.
3.3.2 深度神经网络推荐
矩阵分解方法虽然简单快捷,但其泛化能力受到维度的约束,同时也难以学习到用户项目之间的非线性交互.因此我们在连接向量上添加隐藏层,使用MLP学习用户和项目潜在要素之间的交互.该部分模型定义如下:
z1=Φ1(pu,qi,ei)=pMLPuqMLPi⊕ei,Φ2(z1)=a2(WT2z1+b2),……ΦL(zL-1)=aL(WTLzL-1+bL),ui=σ(hTφL(ZL-1))
(14)
其中Wx,bx,ax分别表示第x层感知机的权重矩阵、偏置向量和激活函数.在输入阶段,我们同样将项目对应实体嵌入作为辅助信息加入到项目表示中,以此缓解数据稀疏性问题.我们选择ReLU作为激活函数.在网络结构的设计方面,我们采用塔式结构,让底层的尺寸最大,每层大小减半.利用这种结构,隐藏层中的高层能够学习到较为抽象的非线性特征.
3.3.3 神经协同过滤
矩阵分解应用线性核对潜在特征交互进行建模,深度神经网络用一个非线性核学习交互函数,二者都存在自己的优点和不足.因此我们将两个模型进行融合,以更好地建模复杂的用户-项目交互.
图4 KGNCF模型框架图Fig.4 Framework of KGNCF
传统方法是让两个模型共享相同的嵌入层,然后连接其交互函数的输出.但是共享嵌入可能会约束混合模型的表现,因为这意味着两个模型需要使用相同的嵌入尺寸.若在数据集上两个模型的最优嵌入尺寸相差较大,融合后的方法可能无法获得最佳效果.为了给融合后的模型提供更多的灵活性,我们允许两个模型分别学习各自的独立嵌入,并连接两个模型的最后隐藏层,如图4所示.融合后模型的预测结果由公式(15)得到.
ΦMF=puMF⊙(qiMF⊕ei)
ΦMLP=aLWTLaL-1…a2WT2puMLP
qiMLP⊕ei+b2…+bL
ui=σhTΦMF
ΦMLP
(15)
其中pMFu和pMLPu分别表示在MF和MLP部分中的用户嵌入,qMFi和qMLPi分别表示在MF和MLP部分中的项目嵌入,ei表示项目对应实体通过语义特征提取和结构特征提取后获得的实体嵌入.h 表示输出层的边权重.我们将损失函数定义为:
L=-∑(u,i)∈ylogui-∑(u,j)∈y-log(1-uj)+λθ22
=-∑(u,i)∈y∪y-yuilogui+(1-yui)log(1-ui)+λθ22
(16)
最后一项为L2正则化项,用来控制过拟合.使用随机梯度下降SGD来实现目标函数最小化.
实验采用由明尼苏达州大学的GroupLens项目组发布的MovieLens数据集,该数据集已经广泛应用于评价协同过滤技术.其中每个用户至少对20个电影进行评分,还提供了用户职业、电影类别、电影时长等辅助信息.我们采用包含一百万个评分的版本,为转换为隐式数据,将评分大于等于4的项目标记为1,其余为0,表示用户是否对项目进行了评价.为获取所需的辅助信息,我们利用MovieLens项目组提供的映射文件,使用爬虫从TMDB网站(1)https://www.themoviedb.org/爬取电影对应的导演、主演、种类等信息,并将其构建成知识图谱.为简单起见,排除了无实体匹配或多个实体匹配的项目,然后将项目与知识图谱三元组的头尾实体进行匹配,并选取所有匹配良好的三元组构成实验用的子知识图谱.处理完成后的数据统计如表1所示.
表1 处理完成后的数据集统计Table 1 Statistic of dataset
为了确定方法的超参数,我们为每个用户随机抽取一个交互作为验证数据,据此调整超参数.对于每个正例,我们采样四个负例.使用均值为0,标准差为0.01的高斯分布随机初始化模型参数,使用mini-batch Adam对模型进行优化.将batch-size设置为256,学习率设置为0.001,MLP中的隐层设置为3层,首层隐藏单元数设为64,进行2层邻域聚合,每层随机抽取4个邻居节点.
为了验证项目推荐的性能,采用leave-one-out方法进行评估,该方法已在多个工作中得到广泛应用.对每个用户,采用其最新的交互作为测试数据,使用其余的数据进行训练.在评估过程中对每个用户的所有项目都进行排名会耗费太多时间,因此我们随机抽取100个用户没有交互过的项目,在这100个项目中对测试项目进行排名.排序列表的性能由命中率(Hit Ratio,HR)和归一化折损累计增益(NDCG)进行衡量.命中率HR测量推荐的准确性,能够直观地衡量测试项目是否位于列表的前K项中.NDCG能够衡量排序质量,其值越大推荐效果越好.HR与NDCG的定义如公式(17)和公式(18)所示:
HitRatio@K=NumberofHits@KGT
(17)
NDCG@K=DCG@KIDCG@K,
DCG@K=∑Ki=12reli-1log2(i+1),
(18)
IDCG@K=∑RELi=12reli-1log2(i+1)
其中GT表示项目的总个数,reli表示在位置i上的结果的相关性,IDCG为理想情况下最大的DCG值,|REL|表示按照最优方式对结果进行排序.
为验证实验结果的有效性,我们和6种其他算法在相同数据集上进行实验对比.分别介绍如下:
ItemKNN[18]:一个标准的基于项目的协同过滤算法,采用余弦相似度衡量项目的相似程度.
BPR[19]:对MF模型进行了优化,使用一个成对排名损失并针对隐式反馈进行了学习.我们使用固定的学习率以获得最佳表现.
eALS[20]:一种MF项目推荐方法.它优化了平方损失,将所有未观察到的交互视为负面实例,并按照项目的受欢迎程度对其进行不均匀加权.该方法的性能优于平均加权方法WMF.
NeuMF[21]:神经协同过滤模型.以MF为基础,用神经结构代替内积,从数据中使用函数进行学习.
FMG[22]:一种基于路径的方式结合知识图谱进行推荐的方法.它预先定义了各种类型的meta-graph,并对每个meta-graph的相似度矩阵进行因子分解来进行推荐.
CKE[15]:将知识图谱引入协同过滤中,是基于嵌入的方法的代表.该模型将结构知识、文本知识和视觉知识融入到一个统一的推荐框架之中.
表2展示了该方法与baseline在MovieLens数据集上的HR@10和NDCG@10的实验结果.可以看出KGNCF能够取得更好的性能.相对于利用K最近邻算法的基于物品相似度的推荐ItemKNN,基于矩阵分解的方法BPR、eALS能够通过对用户-项目矩阵的重构来捕获用户和项目的潜在向量,其结果表现更好.NeuMF方法设计了基于神经网络的协同过滤框架,能够同时捕获线性特征和非线性特征,因此其效果优于基于矩阵分解的方法.FMG虽然利用了知识图谱,却是基于路径的方法,其效果严重依赖于预先定义的元图模式,在没有经过细致的人工调整的情况下表现反而更糟糕.CKE也利用了知识图谱,其效果优于其他的方法,但仅使用了知识表示学习获取的语义信息.我们的KGNCF方法不仅能够利用线性和非线性特征,还引入了知识图谱中的语义特征与结构特征,并且不需要手工设置元路径或元图.相对于几种比较方法,本方法都能取得更好的准确率和NDCG,具有一定的先进性.
表2 实验结果对比Table 2 Comparison the performance of baseline
图5 融合知识图谱的有效性验证Fig.5 Validation of fuse knowledge graph
为验证我们提出的知识图谱增强的方法的有效性,我们分别将模型的两个推荐部分、融合后的模型去掉知识图谱增强模块进行比较,实验结果如图5所示.可见,结合了知识图谱增强的矩阵分解部分、深度神经网络部分模型均获得了一定的增强,融合后的整体模型效果也更好.证明了将知识图谱结合到推荐领域的有效性.
同时我们还进行了消融实验,结果如表3所示.其中KGNCF-structure表示在模型中去掉了提取结构知识的注意力加权的邻域聚合部分,KGNCF-semantic表示在模型中去掉了提取语义知识的表示学习处理部分.相对于表示学习部分,邻域聚合部分能够得到更高的提高,我们认为这是由于在图结构上进行知识传递能够捕获更多有效信息.实验证明了我们提出的知识表示学习提取文本特征模块和加权邻域聚合提取结构特征模块对提高推荐结果是确实有效的.
表3 消融实验结果对比Table 3 Comparison of ablation experiment results
为探索在MLP上进行处理时,塔式结构的设计对实验结果的影响,我们分别采取固定层数修改隐藏单元数、固定隐藏单元数修改层数的方式进行实验,实验结果如图6所示.将MLP的层数设置为3层后,分别将第一层的隐藏单元数设置为16、32、64、128,随后每层逐层减半.在单元数设置为64时能够充分学习特征,取得最好的结果.随后将隐藏单元数固定位64,分别测试使用1、2、3、4层隐藏层对结果的影响.可见随着隐藏层的增加模型效果有所提升,使用3层与4层隐层的结果类似,但隐藏层数过高会增加模型的复杂度.因此我们认为在MLP中使用3层隐层、隐藏单元数分别为[64,32,16]时能够取得最好的效果.
图6 MLP结构设计对实验结果的影响Fig.6 Influence of the MLP structure design
图7 融合实体表示与原始项目表示的方法对比Fig.7 Comparison of the method to fusion entity representation and original item representation
最后,在融合原始项目表示与实体表示时,我们分别采用了3种方法进行实验:sum方法表示将两者相加,avg方法将其进行平均,concat方法则将两者进行连接.实验结如图7所示,avg方法的效果最好.我们认为原因是该方法更充分的利用两种表示,使其进行互补.
本文提出了一种知识图谱增强的神经协同过滤推荐模型.通过引入知识图谱作为辅助信息的来源,利用表示学习提取实体语义特征,并借助GNN的思想与注意力机制通过邻域传播获取图谱中实体的结构特征.推荐部分将传统矩阵分解与神经网络相结合,得到最终的预测结果.对知识图谱中多方面特征信息的充分利用能够缓解数据稀疏问题,传统推荐与深度推荐方法的功能使用能够同时捕获用户-项目交互的线性和抽象的非线性特征.在MovieLens数据集上进行实验验证,结果表明该方法能够提高推荐的效果.在未来的工作中,考虑到不同用户兴趣之间的区别,将会探究更加细粒度的用户偏好,以进一步优化推荐性能.