基于知识图谱推荐系统

个性化推荐系统作为一种信息过滤的重要手段,是当前解决信息超载问题的最有效的方法之一,是面向用户的互联网产品的核心技术。

推荐系统的任务和难点

 按照预测对象的不同,推荐系统一般可以分成两类:一类是评分预测(rating prediction),例如在电影类应用中,系统需要预测用户对电影的评分,并以此为根据推送其可能喜欢的电影。这种场景下的用户反馈信息表达了用户的喜好程度,因此这种信息也叫显式反馈(explicit feedback);另一类是点击率预测(click-through rateprediction),例如在新闻类应用中,系统需要预测用户点击某新闻的概率来优化推荐方案。这种场景下的用户反馈信息只能表达用户的行为特征(点击/未点击),而不能反映用户的喜爱程度,因此这种信息也叫隐式反馈(implicit feedback)。

传统的推荐系统只使用用户和物品的历史交互信息(显式或隐式反馈)作为输入,这会带来两个问题:一,在实际场景中,用户和物品的交互信息往往是非常稀疏(sparse)的。例如,一个电影类APP可能包含了上万部电影,然而一个用户打过分的电影可能平均只有几十部。使用如此少量的已观测数据来预测大量的未知信息,会极大地增加算法的过拟合(overfitting)风险;二,对于新加入的用户或者物品,由于系统没有其历史交互信息,因此无法进行准确地建模和推荐,这种情况也叫做冷启动问题(cold start problem)。

 

解决稀疏性和冷启动问题的一个常见思路是在推荐算法中额外引入一些辅助信息(side information)作为输入。辅助信息可以丰富对用户和物品的描述、增强推荐算法的挖掘能力,从而有效地弥补交互信息的稀疏或缺失。常见的辅助信息包括:

  • 社交网络(social networks):一个用户对某个物品感兴趣,他的朋友可能也会对该物品感兴趣;

  • 用户/物品属性(attributes):拥有同种属性的用户可能会对同一类物品感兴趣;

  • 图像/视频/音频/文本等多媒体信息(multimedia):例如商品图片、电影预告片、音乐、新闻标题等;

  • 上下文(context):用户-物品交互的时间、地点、当前会话信息等。

  • ……

如何根据具体推荐场景的特点将各种辅助信息有效地融入推荐算法一直是推荐系统研究领域的热点和难点,如何从各种辅助信息中提取有效的特征也是推荐系统工程领域的核心问题。

知识图谱

在各种辅助信息中,知识图谱作为一种新兴类型的辅助信息近几年逐渐引起了研究人员的关注。知识图谱(knowledge graph)是一种语义网络,其结点(node)代表实体(entity)或者概念(concept),(edge)代表实体/概念之间的各种语义关系(relation)。一个知识图谱由若干个三元组(h、r、t)组成,其中h和t代表一条关系的头结点和尾节点,r代表关系。

上图展示的三元组表达了“陈凯歌导演了霸王别姬”这样一条事实,其中h=陈凯歌、t=霸王别姬、r=导演。

知识图谱包含了实体之间丰富的语义关联,为推荐系统提供了潜在的辅助信息来源。知识图谱在诸多推荐场景中都有应用的潜力,例如电影、新闻、景点、餐馆、购物等。和其它种类的辅助信息相比,知识图谱的引入可以让推荐结果更加具有以下特征

  • 精确性(precision)。知识图谱为物品引入了更多的语义关系,可以深层次地发现用户兴趣;

 

 

  • 多样性(diversity)。知识图谱提供了不同的关系连接种类,有利于推荐结果的发散,避免推荐结果局限于单一类型;

  • 可解释性(explainability)。知识图谱可以连接用户的历史记录和推荐结果,从而提高用户对推荐结果的满意度和接受度,增强用户对推荐系统的信任。

这里值得一提的是知识图谱和物品属性的区别物品属性可以看成是在知识图谱中和某物品直接相连的一跳(1-hop)的节点,即一个弱化版本的知识图谱。事实上,一个完整的知识图谱可以提供物品之间更深层次和更长范围内的关联,例如,“《霸王别姬》-张国荣-香港-梁朝伟-《无间道》”。正因为知识图谱的维度更高,语义关系更丰富,它的处理也因此比物品属性要更加复杂和困难。

 

一般来说,现有的可以将知识图谱引入推荐系统的工作分为两类:

  • 以LibFM[1]为代表的通用的基于特征的推荐方法(generic feature-based methods)。这类方法统一地把用户和物品的属性作为推荐算法的输入。例如,LibFM将某个用户和某个物品的所有属性记为x,然后令该用户和物品之间的交互强度y(x)依赖于属性中所有的一次项和二次项:

        基于该类方法的通用性,我们可以将知识图谱弱化为物品属性,然后应用该类方法即可。当然,这种做法的缺点也显而易见:它并非专门针对知识图谱设计,因此无法高效地利用知识图谱的全部信息。例如,该类方法难以利用多跳的知识,也难以引入关系(relation)的信息。

  • 以PER [2]、MetaGraph[3]为代表的基于路径的推荐方法(path-based methods)。该类方法将知识图谱视为一个异构信息网络(heterogeneous information network),然后构造物品之间的基于meta-path或meta-graph的特征。简单地说,meta-path是连接两个实体的一条特定的路径,比如“演员->电影->导演->电影->演员”这条meta-path可以连接两个演员,因此可以视为一种挖掘演员之间的潜在关系的方式。这类方法的优点是充分且直观地利用了知识图谱的网络结构,缺点是需要手动设计meta-path或meta-graph,这在实践中难以到达最优;同时,该类方法无法在实体不属于同一个领域的场景(例如新闻推荐)中应用,因为我们无法为这样的场景预定义meta-path或meta-graph。

知识图谱特征学习

知识图谱特征学习(Knowledge Graph Embedding)为知识图谱中的每个实体和关系学习得到一个低维向量,同时保持图中原有的结构或语义信息。事实上,知识图谱特征学习是网络特征学习(network embedding)的一个子领域,因为知识图谱包含特有的语义信息,所以知识图谱特征学习比通用的网络特征学习需要更细心和针对性的模型设计。一般而言,知识图谱特征学习的模型分类两类:

  • 基于距离的翻译模型(distance-based translational models)。这类模型使用基于距离的评分函数评估三元组的概率,将尾节点视为头结点和关系翻译得到的结果。这类方法的代表有TransE、TransH、TransR等;

  • 基于语义的匹配模型(semantic-based matching models)。这类模型使用基于相似度的评分函数评估三元组的概率,将实体和关系映射到隐语义空间中进行相似度度量。这类方法的代表有SME、NTN、MLP、NAM等。

由于知识图谱特征学习为每个实体和特征学习得到了一个低维向量,而且在向量中保持了原图的结构和语义信息,所以一组好的实体向量可以充分且完全地表示实体之间的相互关系,因为绝大部分机器学习算法都可以很方便地处理低维向量输入。因此,利用知识图谱特征学习,我们可以很方便地将知识图谱引入各种推荐系统算法中。概括地说,知识图谱特征学习可以:

 

  • 降低知识图谱的高维性和异构性;

  • 增强知识图谱应用的灵活性;

  • 减轻特征工程的工作量;

  • 减少由于引入知识图谱带来的额外计算负担。

     

在本篇中,我们分别介绍了推荐系统、知识图谱、以及知识图谱在推荐系统中的应用价值。作为推荐算法的辅助信息,知识图谱的引入可以极大地提高推荐系统的精准性、多样性和可解释性。

 

将知识图谱作为辅助信息引入到推荐系统中可以有效地解决传统推荐系统存在的稀疏性和冷启动问题,近几年有很多研究人员在做相关的工作。目前,将知识图谱特征学习应用到推荐系统中主要通过三种方式——依次学习、联合学习、以及交替学习

  • 依次学习(one-by-one learning)。首先使用知识图谱特征学习得到实体向量和关系向量,然后将这些低维向量引入推荐系统,学习得到用户向量和物品向量;

  • 联合学习(joint learning)。将知识图谱特征学习和推荐算法的目标函数结合,使用端到端(end-to-end)的方法进行联合学习;

  • 交替学习(alternate learning)。将知识图谱特征学习和推荐算法视为两个分离但又相关的任务,使用多任务学习(multi-task learning)的框架进行交替学习。

基于知识图谱推荐系统_第1张图片

依次学习

Deep Knowledge-Aware Network (DKN)

我们以新闻推荐[1]为例来介绍依次学习。如下图所示,新闻标题和正文中通常存在大量的实体,实体间的语义关系可以有效地扩展用户兴趣。然而这种语义关系难以被传统方法(话题模型、词向量)发掘。

基于知识图谱推荐系统_第2张图片

为了将知识图谱引入特征学习,遵循依次学习的框架,我们首先需要提取知识图谱特征。该步骤的方法如下:

 

  • 实体连接(entity linking)。即从文本中发现相关词汇,并与知识图谱中的实体进行匹配;

  • 知识图谱构建。根据所有匹配到的实体,在原始的知识图谱中抽取子图。子图的大小会影响后续算法的运行时间和效果:越大的子图通常会学习到更好的特征,但是所需的运行时间越长;

  • 知识图谱特征学习。使用知识图谱特征学习算法(如TransE等)进行学习得到实体和关系向量。

基于知识图谱推荐系统_第3张图片

需要注意的是,为了更准确地刻画实体,我们额外地使用一个实体的上下文实体特征(contextual entity embeddings)。一个实体e的上下文实体是e的所有一跳邻居节点,e的上下文实体特征为e的所有上下文实体特征的平均值:

下图的绿色椭圆框内即为“Fight Club”的上下文实体。

 基于知识图谱推荐系统_第4张图片

得到实体特征后,我们的第二步是构建推荐模型,该模型是一个基于CNN和注意力机制的新闻推荐算法:

 

  • 基于卷积神经网络的文本特征提取:将新闻标题的词向量(word embedding)、实体向量(entity embedding)和实体上下文向量(context embedding)作为多个通道(类似于图像中的红绿蓝三通道),在CNN的框架下进行融合;

  • 基于注意力机制的用户历史兴趣融合:在判断用户对当前新闻的兴趣时,使用注意力网络(attention network)给用户历史记录分配不同的权重。

基于知识图谱推荐系统_第5张图片

该模型在新闻推荐上取得了很好的效果:DKN取得了0.689的F1值和0.659的AUC值,并在p=0.1水平上比其它方法取得了显著的提升。

基于知识图谱推荐系统_第6张图片

我们也可以通过注意力权重的可视化结果看出,注意力机制的引入对模型的最后输出产生了积极的影响。由于注意力机制的引入,DKN可以更好地将同类别的新闻联系起来,从而提高了最终的正确预测的数量:

基于知识图谱推荐系统_第7张图片

依次学习的优势在于知识图谱特征学习模块和推荐系统模块相互独立。在真实场景中,特别是知识图谱很大的情况下,进行一次知识图谱特征学习的时间开销会很大,而一般而言,知识图谱远没有推荐模块更新地快。因此我们可以先通过一次训练得到实体和关系向量,以后每次推荐系统模块需要更新时都可以直接使用这些向量作为输入,而无需重新训练。

 

依次学习的缺点也正在于此:因为两个模块相互独立,所以无法做到端到端的训练。通常来说,知识图谱特征学习得到的向量会更适合于知识图谱内的任务,比如连接预测、实体分类等,并非完全适合特定的推荐任务。在缺乏推荐模块的监督信号的情况下,学习得到的实体向量是否真的对推荐任务有帮助,还需要通过进一步的实验来推断。

联合学习

联合学习的核心是将推荐算法和知识图谱特征学习的目标融合,并在一个端到端的优化目标中进行训练。我们以CKE[2]和Ripple Network[3]为例介绍联合学习。

Collaborative Knowledge base Embedding (CKE)

在推荐系统中存在着很多与知识图谱相关的信息,以电影推荐为例:

  • 结构化知识(structural knowledge),例如导演、类别等;

  • 图像知识(visual knowledge),例如海报、剧照等;

  • 文本知识(textual knowledge),例如电影描述、影评等。 

CKE是一个基于协同过滤和知识图谱特征学习的推荐系统:

基于知识图谱推荐系统_第8张图片

CKE使用如下方式进行三种知识的学习:

  • 结构化知识学习:TransR。TransR是一种基于距离的翻译模型,可以学习得到知识实体的向量表示;

基于知识图谱推荐系统_第9张图片

  • 文本知识学习:去噪自编码器。去噪自编码器可以学习得到文本的一种泛化能力较强的向量表示;

  基于知识图谱推荐系统_第10张图片

  • 图像知识学习:卷积-反卷积自编码器。卷积-反卷积自编码器可以得到图像的一种泛化能力较强的向量表示。

基于知识图谱推荐系统_第11张图片

我们将三种知识学习的目标函数与推荐系统中的协同过滤结合,得到如下的联合损失函数:

基于知识图谱推荐系统_第12张图片

使用诸如随机梯度下降(SGD)的方法对上述损失函数进行训练,我们最终可以得到用户/物品向量,以及实体/关系向量。CKE在电影推荐和图书推荐上取得了很高的Recall值和MAP值:

基于知识图谱推荐系统_第13张图片

基于知识图谱推荐系统_第14张图片

Ripple Network

 

Ripple的中文翻译为“水波”,顾名思义,Ripple Network模拟了用户兴趣在知识图谱上的传播过程,整个过程类似于水波的传播

  • 一个用户的兴趣以其历史记录中的实体为中心,在知识图谱上向外逐层扩散

  • 一个用户的兴趣在知识图谱上的扩散过程中逐渐衰减

下图展示了用户兴趣在知识图谱上扩散的过程。以一个用户看过的“Forrest Gump”为中心,用户的兴趣沿着关系边可以逐跳向外扩展,并在扩展过程中兴趣强度逐渐衰减。

基于知识图谱推荐系统_第15张图片

下图展示了Ripple Network的模型。对于给定的用户u和物品v,我们将历史相关实体集合V中的所有实体进行相似度计算,并利用计算得到的权重值对V中实体在知识图谱中对应的尾节点进行加权求和。求和得到的结果可以视为v在u的一跳相关实体中的一个响应。该过程可以重复在u的二跳、三跳相关实体中进行,如此,v在知识图谱上便以V为中心逐层向外扩散。

基于知识图谱推荐系统_第16张图片

最终得到的推荐算法和知识图谱特征学习的联合损失函数如下:

 基于知识图谱推荐系统_第17张图片

类似于CKE,我们在该损失函数上训练即可得到物品向量和实体向量。需要注意的是,Ripple Network中没有对用户直接使用向量进行刻画,而是用用户点击过的物品的向量集合作为其特征。Ripple Network在电影、图书和新闻的点击率预测上取得了非常好的效果:

 基于知识图谱推荐系统_第18张图片

我们将Ripple Network的计算结果可视化如下。可以看出,知识图谱连接了用户的历史兴趣和推荐结果,其中的若干条高分值的路径可以视为对推荐结果的解释:

基于知识图谱推荐系统_第19张图片

联合学习的优劣势正好与依次学习相反。联合学习是一种端到端的训练方式,推荐系统模块的监督信号可以反馈到知识图谱特征学习中,这对于提高最终的性能是有利的。但是需要注意的是,两个模块在最终的目标函数中结合方式以及权重的分配都需要精细的实验才能确定。联合学习潜在的问题是训练开销较大,特别是一些使用到图算法的模型

交替学习

Multi-task Learning for KG enhanced Recommendation (MKR)

 

推荐系统和知识图谱特征学习的交替学习类似于多任务学习的框架。该方法的出发点是推荐系统中的物品和知识图谱中的实体存在重合,因此两个任务之间存在相关性。将推荐系统和知识图谱特征学习视为两个分离但是相关的任务,采用多任务学习的框架,可以有如下优势:

  • 两者的可用信息可以互补;

  • 知识图谱特征学习任务可以帮助推荐系统摆脱局部极小值;

  • 知识图谱特征学习任务可以防止推荐系统过拟合;

  • 知识图谱特征学习任务可以提高推荐系统的泛化能力。

MKR[4]的模型框架如下,其中左侧是推荐任务,右侧是知识图谱特征学习任务。推荐部分使用用户和物品的特征表示作为输入,预测的点击概率作为输出。知识图谱特征学习部分使用一个三元组的头结点和关系表示作为输入,预测的尾节点表示作为输出。

基于知识图谱推荐系统_第20张图片

由于推荐系统中的物品和知识图谱中的实体存在重合,所以两个任务并非相互独立。我们在两个任务中设计了交叉特征共享单元(cross-feature-sharing units)作为两者的连接纽带。

 

交叉特征共享单元是一个可以让两个任务交换信息的模块。由于物品向量和实体向量实际上是对同一个对象的两种描述,他们之间的信息交叉共享可以让两者都获得来自对方的额外信息,从而弥补了自身的信息稀疏性的不足。

基于知识图谱推荐系统_第21张图片

MKR的整体损失函数如下:

基于知识图谱推荐系统_第22张图片

在实际操作中,我们采用交替训练的方式:固定推荐系统模块的参数,训练知识图谱特征学习模块的参数;然后固定知识图谱特征学习模块的参数,训练推荐系统模块的参数:

基于知识图谱推荐系统_第23张图片

MKR在电影、图书和新闻推荐上也取得了不错的效果,其F1@K指标在绝大多数情况下都超过了baseline方法:

 基于知识图谱推荐系统_第24张图片

交替学习是一种较为创新和前沿的思路,其中如何设计两个相关的任务以及两个任务如何关联起来都是值得研究的方向。从实际运用和时间开销上来说,交替学习是介于依次学习和联合学习中间的:训练好的知识图谱特征学习模块可以在下一次训练的时候继续使用(不像联合学习需要从零开始),但是依然要参与到训练过程中来(不像依次学习中可以直接使用实体向量)。

 

知识图谱作为推荐系统的一种新兴的辅助信息,近年来得到了研究人员的广泛关注。未来,知识图谱和时序模型的结合知识图谱和基于强化学习的推荐系统的结合、以及知识图谱和其它辅助信息在推荐系统中的结合等相关问题仍然值得更多的研究。欢迎感兴趣的同学通过留言与我们互动沟通。

你可能感兴趣的:(知识图谱)