1. 引言
近年来,推荐系统受到国内外研究者的广泛研究,推荐系统能有效解决信息过载和泛滥问题,用户能在海量的产品和服务中做出正确的选择。目前,主流的推荐系统可分为三种 [1]:一是基于协同过滤(collaborative filtering)的推荐算法,协同过滤考虑了用户的历史交互,并根据用户潜在的共同偏好进行推荐 [2];二是基于内容的推荐算法,利用项目的内容特征进行推荐;三是混合推荐算法。基于协同过滤的推荐系统能很好的捕获用户偏好,而且易于实现,但基于协同过滤的推荐算法通常会遇到用户–物品交互稀少和冷启动问题,为解决这些局限性,研究者提出混合推荐系统,将边信息整合到协同过滤中,如项目属性 [3]、项目评论 [4]、用户社交网络 [5] 等。研究者注意到知识图谱通常包含更丰富的事实和实体之间的联系,项目端的知识图谱拓宽了项目的信息,有利于发现项目之间的潜在关联,提高推荐的精度,增加推荐的多样性。知识图谱还可以将用户的历史记录和推荐记录联系起来,从而为推荐系统带来可解释性。
基于知识图谱辅助的推荐算法的一个主要方法是知识图谱特征学习(knowledge graph embedding, KGE) [6]。知识图谱由三元组构成,由于其网络结构特殊性,使用特征学习可以得到实体和关系的低维向量表示,从而与推荐系统进行交互。MKR框架的目的就是利用知识图谱任务和推荐任务之间的交互性,用知识图谱来辅助推荐任务 [7]。通过框架中的交叉压缩单元模块,对项目和实体中有交叉的特征进行建模,优化两个任务之间的交替学习任务,使MKR框架充分挖掘了用户和项目之间的特征交互,从而使得MKR推荐系统的整体性能更优,在图书推荐、新闻推荐等推荐场景中都有良好的表现。本文对基于知识图谱特征学习构建电影推荐系统进行研究探讨,构建了基于多任务学习的知识图谱辅助深度推荐框架(MKR),进行整体框架的训练,提升了电影推荐系统的性能。
2. 电影知识图谱的构建
本文利用知识图谱生成推荐结果、构建电影推荐系统(数据源:豆瓣电影)。首先要构建电影知识图谱,共要经历四个过程,包括电影知识抽取,电影知识表示,以及知识融合和知识推理。构建图谱的数据利用Python网络爬虫,使用requests、bs4等工具进行爬取。数据爬取流程如图1所示,根据对豆瓣电影网页结构的分析,针对其动态网页结构,设计URL循环函数,利用上述爬虫工具爬取数据,并最后得到初始数据,并将爬取到的数据存储到数据库中。
本文共抓取了豆瓣电影中的20个类型共93956条影片数据,每个影片包含电影名称、演员、导演、评分、类型等详细信息。对数据进行预处理后,从数据中抽取所需信息,将数据导出为CSV格式,并批量创建节点和节点之间的关系。本文共创建了4个节点,分别为电影、演员、导演、电影类型,一个节点就相当于一个实体。节点间共生成四种关系,如图2所示。


Figure 2. Node and relational data structure
图2. 节点、关系数据结构
对数据进行初步处理后,将其导入图数据库neo4j中。在neo4j的浏览器窗口执行load CSV命令,将节点、关系批量导入图数据库中。部分结果如图3所示。
3. 基于知识图谱特征学习的电影推荐模型
3.1. 知识图谱特征学习
将知识图谱特征学习辅助推荐系统学习有三种方式:依次学习、联合学习、交替学习。依次学习法学习知识图谱中的实体向量和关系向量。联合学习结合推荐算法和知识图谱特征学习,优化了端到端的训练。交替学习利用知识图谱特征学习任务来辅助推荐任务,因为推荐系统中的项目可能与知识图谱中的实体相关联,因此项目及其对应的实体可能具有相似的邻近结构,在底层和非任务特异性潜在特征空间上可能具有相似的特征 [8]。知识图谱特征学习是为了在保留原有的结构信息的同时,让每个实体和向量都得到低维的特征表示,其中基于翻译的方法广为应用,主要代表有TransE、TransH、TransR模型。

Figure 3. Partial display of the movie knowledge graph
图3. 电影知识图谱部分展示
在本文的电影推荐系统构建中,记M个用户
和N个项目集合
,记U和N的交互矩阵为
,用户的隐式反馈数据构成交互矩阵,y=1为有交互记录,例如观看,评论行为,否则y=0。记知识图谱
由三元组
构成,其中h表示头节点、r表示h和t的关系、t表示尾节点,其中
和R表示知识图谱的实体和关系的集合。例如图3所展示,三元组(周润发,主演,卧虎藏龙)的映射即为知识图谱中所示的周润发是电影《卧虎藏龙》的主演。得到集合Y和图谱G后,可以计算出其预测函数为
,得到用户u与未交集的物品v的交互概率。
3.2. MKR电影推荐模型
通过研究基于多任务学习的知识图谱辅助推荐系统框架(MKR推荐系统框架),本文使用交替学习法来交替学习知识图谱特征学习任务和推荐系统任务。利用推荐模型中的交叉压缩单元模块,学习并实现两个任务中的实体之间的高阶交互,并抽取两个任务的低层特征进行融合训练,从而达到更优的结果。
图4指出了MKR模型的3个部分:推荐系统部分、知识图谱嵌入部分、交叉压缩单元部分。左边推荐部分将用户和电影作为输入,提供用户对电影的显式评分,使用多层感知机(Multi-Layer Perception,MLP)和交叉压缩单元从用户和物品中学习特征,模型预测结果为用户对该电影的交互预估值,数值为0~1。右边知识图谱特征学习模块将实体和关系嵌入到低维的连续向量空间里,与此同时保证实体和关系的结构稳定。此模块将2.1中三元组
的头节点h和关系r作为输入,使用多层感知机学习头节点和关系的特征,预测尾节点(目标实体)特征,将其作为输出。
图5指出了模型中的交叉压缩单元模块,其主要利用知识图谱中的实体和推荐系统中的物品的同一性,使物品和实体的表示可以相互补充,不仅提高了泛化能力,并且避免了噪声拟合。
交叉操作是对物品v和与其相关的实体e的任一可能的特征交互进行建模,根据特征构建交互矩阵:
(1)
式(1)中
表示交叉压缩单元的第l层交叉特征矩阵,d表示交互矩阵的特征维度。
和
分别为第l层物品和实体的特征。压缩操作中的权值向量重新使交叉特征矩阵由
的空间指向特征空间
,将特征交叉矩阵投影到下一层的潜在表示空间,输出下一层的项目和实体的特征向量:
(2)
式(2)中w和b分别是训练权重和偏置参数。在本数据集中,根据用户和电影的交互历史数据,按评分对特征向量进行加权处理。评分的范围为1~5分,将评分为4分以下的赋予负值,然后经过加权得到特征向量的权重。交叉压缩单元只存在于模型的低层,通过在低层将推荐模型和知识图谱特征学习模型连接起来,实现两个任务之间知识的传递,从而有效的改善了信息的稀疏性。
3.3. MKR模型训练
MKR模型的训练采用多任务框架交替学习的方法进行特征建模和预测。其完整的损失函数由三部分组成:推荐系统部分、知识图谱特征学习部分、正则化项。
(3)
式(3)中u和v分别遍历用户集和项目集,J为交叉熵函数,此函数收敛。知识图谱部分为三元组的得分函数,选取的计算方式是向量内积,此函数收敛。正则化项是为了防止过拟合,其中
和
为超参数,
可视为两项任务的两个学习率之比,数值为负,从而确保知识图谱模块的特征学习性能。W为式(2)描述的训练权重。
MKR算法训练如算法1所示。获取电影数据集和用户评分数据集作为输入,根据用户物品交互记录,按评分对物品向量进行加权,得到对应的用户特征向量,采用多任务学习框架,交替训练推荐模块和知识图谱嵌入模块。通过交叉压缩单元模块实现推荐系统中物品和知识图谱中实体之间的信息共享,输出为物品潜在特征表示。通过计算内积的方法融合电影特征向量和用户特征向量,得到向量相似度,并以此为依据对用户行为进行预测,向用户推荐偏好电影,实现推荐。
4. 实验结果与分析
4.1. 数据集处理
本文所选数据集包含93956条影片数据,199814个用户,2706200次用户与电影的交互记录评分。将知识图谱和电影数据集作为输入时,需保持数据格式的统一,要对传入的数据进行预处理。对数据的预处理环节中,对电影ID、关系、评分等数据进行提取和转化,处理缺失值,使数据格式电影符合知识图谱中的数据结构标准。图6展示了数据集的整体处理流程。
首先将评分数据集划分为训练集和测试集两类,其中训练集占80%,测试集占20%,再针对训练集构建电影评分矩阵,根据评分公式计算评分S。用户对电影的满意程度随评分(1~5分)的增长而提高。若评分S大于等于4,此时的数据对应正样本,则推荐;若S小于4此时的数据对应负样本,则不推荐。利用测试集分别测试几种推荐模型,对比算法性能并选择性能最佳的算法。
4.2. 评价指标
本文使用准确率(Accuracy, ACC)和ROC曲线线下面积(Area Under Curve, AUC)作为评价推荐的性能指标。在推荐准确度上,将评分推荐分为推荐和不推荐,即评分1到3分为不推荐,4到5分为推荐。
ACC指标在预测用户是否喜欢时,通过预测正确的分类比例,从而描述推荐模型的推荐性能,基于表1的混淆矩阵,计算公式如下:
(4)
AUC用于二分类模型的评估,作为ROC曲线下边的面积,用来评估分类器的分类质量。根据评分数据处理后得到的正样本和负样本,计算正样本的置信度大于负样本置信度的概率,比较置信度以得到最终的AUC值。由于阈值变化影响分类结果,使用AUC则可以考虑到阈值变动,所以评估的效果更好。
4.3. 结果分析
将训练好的用户特征矩阵和电影推荐矩阵计算所有电影的评分,进行电影推荐,图7展示了本数据集在MKR模型下返回的部分推荐结果。
另外,为了验证MKR模型的高效性,将此模型与LibFM [9]、PER [10]、DKN [11]、CKE [12] 和Wide & Deep [13] 推荐算法进行对比,用该数据集分别测试各模型,计算ACC和AUC值,并取10次实验所得数据的平均值作为最终结果,如表2所示。

Table 2. Comparison of the recommendation effect of each recommendation algorithm on the movie dataset
表2. 各推荐算法在电影数据集上推荐效果对比
从表2结果可知,相比其他几种模型,MKR模型在本数据集中取得了最佳的表现,ACC和AUC的计算结果都超越了对比算法,由此可知MKR模型使推荐效果有了显著提升。

Figure 8. The results of the top-K movie recommendation comparison experiment
图8. top-K电影推荐比较实验结果
为进一步验证模型的性能,本文进行了top-K场景实验,使用训练好的模型在测试集中为用户推荐电影,设置推荐电影数目为K值,使用F1@K值作为top-K推荐中的性能指标。分别在不同K值场景下计算F1@K值,并取10次计算结果的平均值作为最终结果,如图8所示。
从图8中总体来看,随着K值的增加,各模型的F1@K值呈先增大后减小的趋势,当K = 20时,MKR、LibFM、DKN模型的F1@K值达到峰值;并且MKR模型在不同K值的场景下比其他几种模型的表现结果都更好一些,证明该模型中的交叉压缩单元能有效学习用户和实体之间的知识交互,从而有效提升了推荐的整体性能。
5. 结语
本文通过构建电影知识图谱,将其作为辅助信息,构建了MKR推荐模型,并将其应用到电影推荐系统。采用预测用户满意度评分的方法优化了推荐性能,通过评分结果来判定用户对电影的喜好程度,并将合适的电影类型推荐给用户。通过大量实验对比了MKR模型与几种常见推荐模型,采用AUC和ACC两种评价指标来预测分值,并且在top-K场景中比较了不同K值下各个模型的推荐性能。从实验结果来看,MKR模型的准确率和推荐效果明显优于其他几种模型,并且有效提升了推荐的性能。后续将考虑使用注意力机制融合知识图谱,重新设计交叉压缩单元,挖掘更多的电影信息;另外本文是在单机上进行的测试,如果数据量过大势必会影响推荐性能,因此下一步考虑采用多GPU并行的方式来实现该模型的并行计算,从而进一步提高推荐性能。