原始链接:
推荐算法不够精准?让知识图谱来解决
如何将知识图谱特征学习应用到推荐系统?
小王是一名程序员。早上八点,他被闹铃叫醒,拿起手机开始浏览手机上的新闻 APP 推荐的最新消息:
随后,小王想起昨晚放在购物车里的鞋还没有下单。于是,他打开了某购物 APP,查看了一下自己的购物车:
但是他觉得下面推荐的板鞋似乎更适合自己,于是他买了一双。
吃完早饭,小王坐地铁去上班。地铁上无聊的小王打开了某音乐 APP,系统已经为他选好了推荐的歌曲:
到了公司后,小王开始继续写没有完成的代码,但是始终无法把参数调到满意的水平。有些烦躁的小王想歇一歇,于是打开了某资讯 APP,看了几个为他推荐的话题:
就在他认真阅读的时候,经理注意到了他不在干活,很生气,于是严肃地批评了小王。小王感到很委屈,这时手机里的某求职类 APP 给他发来了推送:
小王觉得这几个职位都挺适合自己的,于是心里有了跳槽的打算。到了午饭时间,小王打开了某外卖 APP,查看了一下系统推荐的附近餐厅:
小王一边吃着刚刚送来的外卖,一边浏览着某娱乐类 APP,查看适合晚上和女朋友一起观看的演出推荐:
晚上看完演出,小王和女朋友都非常满意,觉得这个 APP 的系统推荐很棒。
跟小王一样,我们几乎每个人每天都会使用多个 APP 中的推荐功能,这些功能的背后都是个性化推荐系统(personalized recommender systems)。随着互联网技术和产业的迅速发展,接入互联网的服务器数量和网页数量也呈指数级上升。用户面临着海量的信息,传统的搜索算法只能呈现给用户(user)相同的物品(item)排序结果,无法针对不同用户的兴趣爱好提供相应的服务。信息爆炸使得信息的利用率反而降低,这种现象被称为信息超载(information overload)。
推荐问题从本质上说就是代替用户评估其从未看过、接触过和使用过的物品,包括书籍、电影、新闻、音乐、餐馆、旅游景点等。推荐系统作为一种信息过滤的重要手段,是当前解决信息超载问题的最有效的方法之一,是面向用户的互联网产品的核心技术。
按照预测对象的不同,推荐系统一般可以分成两类:
传统的推荐系统只使用用户和物品的历史交互信息(显式或隐式反馈)作为输入,这会带来两个问题:
解决稀疏性和冷启动问题的一个常见思路是在推荐算法中额外引入一些辅助信息(side information)作为输入。辅助信息可以丰富对用户和物品的描述、增强推荐算法的挖掘能力,从而有效地弥补交互信息的稀疏或缺失。常见的辅助信息包括:
社交网络(social networks):一个用户对某个物品感兴趣,他的朋友可能也会对该物品感兴趣;
用户 / 物品属性(attributes):拥有同种属性的用户可能会对同一类物品感兴趣;
图像 / 视频 / 音频 / 文本等多媒体信息(multimedia):例如商品图片、电影预告片、音乐、新闻标题等;
上下文(context):用户 - 物品交互的时间、地点、当前会话信息等。
……
如何根据具体推荐场景的特点将各种辅助信息有效地融入推荐算法一直是推荐系统研究领域的热点和难点,如何从各种辅助信息中提取有效的特征也是推荐系统工程领域的核心问题。
在各种辅助信息中,知识图谱作为一种新兴类型的辅助信息近几年逐渐引起了研究人员的关注。知识图谱(knowledge graph)是一种语义网络,其结点(node)代表实体(entity)或者概念(concept),边(edge)代表实体 / 概念之间的各种语义关系(relation)。一个知识图谱由若干个三元组(h、r、t)组成,其中 h 和 t 代表一条关系的头结点和尾节点,r 代表关系。
知识图谱包含了实体之间丰富的语义关联,为推荐系统提供了潜在的辅助信息来源。知识图谱在诸多推荐场景中都有应用的潜力,例如电影、新闻、景点、餐馆、购物等。和其它种类的辅助信息相比,知识图谱的引入可以让推荐结果更加具有以下特征:
这里值得一提的是知识图谱和物品属性的区别。物品属性可以看成是在知识图谱中和某物品直接相连的一跳(1-hop)的节点,即一个弱化版本的知识图谱。
事实上,一个完整的知识图谱可以提供物品之间更深层次和更长范围内的关联,例如,“《霸王别姬》- 张国荣 - 香港 - 梁朝伟 -《无间道》”。正因为知识图谱的维度更高,语义关系更丰富,它的处理也因此比物品属性要更加复杂和困难。
一般来说,现有的可以将知识图谱引入推荐系统的工作分为两类:
以 LibFM1 为代表的通用的基于特征的推荐方法(generic feature-based methods)。
这类方法统一地把用户和物品的属性作为推荐算法的输入。例如,LibFM 将某个用户和某个物品的所有属性记为 x,然后令该用户和物品之间的交互强度 y(x) 依赖于属性中所有的一次项和二次项:
基于该类方法的通用性,我们可以将知识图谱弱化为物品属性,然后应用该类方法即可。
当然,这种做法的缺点也显而易见:它并非专门针对知识图谱设计,因此无法高效地利用知识图谱的全部信息。例如,该类方法难以利用多跳的知识,也难以引入关系(relation)的信息。
以 PER 2、MetaGraph3 为代表的基于路径的推荐方法(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)4为知识图谱中的每个实体和关系学习得到一个低维向量,同时保持图中原有的结构或语义信息。事实上,知识图谱特征学习是网络特征学习(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)的框架进行交替学习。
我们以新闻推荐 5 为例来介绍依次学习。如下图所示,新闻标题和正文中通常存在大量的实体,实体间的语义关系可以有效地扩展用户兴趣。然而这种语义关系难以被传统方法(话题模型、词向量)发掘。
为了将知识图谱引入特征学习,遵循依次学习的框架,我们首先需要****提取知识图谱特征。该步骤的方法如下:
实体连接(entity linking)。即从文本中发现相关词汇,并与知识图谱中的实体进行匹配;
知识图谱构建。根据所有匹配到的实体,在原始的知识图谱中抽取子图。子图的大小会影响后续算法的运行时间和效果:越大的子图通常会学习到更好的特征,但是所需的运行时间越长;
知识图谱特征学习。使用知识图谱特征学习算法(如 TransE 等)进行学习得到实体和关系向量。
需要注意的是,为了更准确地刻画实体,我们额外地使用一个实体的上下文实体特征(contextual entity embeddings)。一个实体 e 的上下文实体是 e 的所有一跳邻居节点,e 的上下文实体特征为 e 的所有上下文实体特征的平均值:
下图的绿色椭圆框内即为 “Fight Club” 的上下文实体。
得到实体特征后,我们的第二步是构建推荐模型,该模型是一个基于 CNN 和注意力机制的新闻推荐算法:
基于卷积神经网络的文本特征提取:将新闻标题的词向量(word embedding)、实体向量(entity embedding)和实体上下文向量(context embedding)作为多个通道(类似于图像中的红绿蓝三通道),在 CNN 的框架下进行融合;
基于注意力机制的用户历史兴趣融合:在判断用户对当前新闻的兴趣时,使用注意力网络(attention network)给用户历史记录分配不同的权重。
该模型在新闻推荐上取得了很好的效果:DKN 取得了 0.689 的 F1 值和 0.659 的 AUC 值,并在 p=0.1 水平上比其它方法取得了显著的提升。
我们也可以通过注意力权重的可视化结果看出,注意力机制的引入对模型的最后输出产生了积极的影响。由于注意力机制的引入,DKN 可以更好地将同类别的新闻联系起来,从而提高了最终的正确预测的数量:
依次学习的优势在于知识图谱特征学习模块和推荐系统模块相互独立。在真实场景中,特别是知识图谱很大的情况下,进行一次知识图谱特征学习的时间开销会很大,而一般而言,知识图谱远没有推荐模块更新地快。因此我们可以先通过一次训练得到实体和关系向量,以后每次推荐系统模块需要更新时都可以直接使用这些向量作为输入,而无需重新训练。
依次学习的缺点也正在于此:因为两个模块相互独立,所以无法做到端到端的训练。通常来说,知识图谱特征学习得到的向量会更适合于知识图谱内的任务,比如连接预测、实体分类等,并非完全适合特定的推荐任务。在缺乏推荐模块的监督信号的情况下,学习得到的实体向量是否真的对推荐任务有帮助,还需要通过进一步的实验来推断。
联合学习的核心是将推荐算法和知识图谱特征学习的目标融合,并在一个端到端的优化目标中进行训练。我们以 CKE6 和 Ripple Network7 为例介绍联合学习。
在推荐系统中存在着很多与知识图谱相关的信息,以电影推荐为例:
结构化知识(structural knowledge),例如导演、类别等;
图像知识(visual knowledge),例如海报、剧照等;
文本知识(textual knowledge),例如电影描述、影评等。
CKE 是一个基于协同过滤和知识图谱特征学习的推荐系统:
CKE 使用如下方式进行三种知识的学习:
结构化知识学习:TransR。TransR 是一种基于距离的翻译模型,可以学习得到知识实体的向量表示;
文本知识学习:去噪自编码器。去噪自编码器可以学习得到文本的一种泛化能力较强的向量表示;
图像知识学习:卷积 - 反卷积自编码器。卷积 - 反卷积自编码器可以得到图像的一种泛化能力较强的向量表示。
我们将三种知识学习的目标函数与推荐系统中的协同过滤结合,得到如下的联合损失函数:
使用诸如随机梯度下降(SGD)的方法对上述损失函数进行训练,我们最终可以得到用户 / 物品向量,以及实体 / 关系向量。CKE 在电影推荐和图书推荐上取得了很高的 Recall 值和 MAP 值:
Ripple 的中文翻译为 “水波”,顾名思义,Ripple Network 模拟了用户兴趣在知识图谱上的传播过程,整个过程类似于水波的传播:
一个用户的兴趣以其历史记录中的实体为中心,在知识图谱上向外逐层扩散;
一个用户的兴趣在知识图谱上的扩散过程中逐渐衰减。
下图展示了用户兴趣在知识图谱上扩散的过程。以一个用户看过的 “Forrest Gump” 为中心,用户的兴趣沿着关系边可以逐跳向外扩展,并在扩展过程中兴趣强度逐渐衰减。
下图展示了 Ripple Network 的模型。对于给定的用户 u 和物品 v,我们将历史相关实体集合 V 中的所有实体进行相似度计算,并利用计算得到的权重值对 V 中实体在知识图谱中对应的尾节点进行加权求和。求和得到的结果可以视为 v 在 u 的一跳相关实体中的一个响应。该过程可以重复在 u 的二跳、三跳相关实体中进行,如此,v 在知识图谱上便以 V 为中心逐层向外扩散。
最终得到的推荐算法和知识图谱特征学习的联合损失函数如下:
类似于 CKE,我们在该损失函数上训练即可得到物品向量和实体向量。需要注意的是,Ripple Network 中没有对用户直接使用向量进行刻画,而是用用户点击过的物品的向量集合作为其特征。Ripple Network 在电影、图书和新闻的点击率预测上取得了非常好的效果:
我们将 Ripple Network 的计算结果可视化如下。可以看出,知识图谱连接了用户的历史兴趣和推荐结果,其中的若干条高分值的路径可以视为对推荐结果的解释:
联合学习的优劣势正好与依次学习相反。联合学习是一种端到端的训练方式,推荐系统模块的监督信号可以反馈到知识图谱特征学习中,这对于提高最终的性能是有利的。但是需要注意的是,两个模块在最终的目标函数中结合方式以及权重的分配都需要精细的实验才能确定。联合学习潜在的问题是训练开销较大,特别是一些使用到图算法的模型。
推荐系统和知识图谱特征学习的交替学习类似于多任务学习的框架。该方法的出发点是推荐系统中的物品和知识图谱中的实体存在重合,因此两个任务之间存在相关性。将推荐系统和知识图谱特征学习视为两个分离但是相关的任务,采用多任务学习的框架,可以有如下优势:
两者的可用信息可以互补;
知识图谱特征学习任务可以帮助推荐系统摆脱局部极小值;
知识图谱特征学习任务可以防止推荐系统过拟合;
知识图谱特征学习任务可以提高推荐系统的泛化能力。
MKR8的模型框架如下,其中左侧是推荐任务,右侧是知识图谱特征学习任务。推荐部分使用用户和物品的特征表示作为输入,预测的点击概率作为输出。知识图谱特征学习部分使用一个三元组的头结点和关系表示作为输入,预测的尾节点表示作为输出。
由于推荐系统中的物品和知识图谱中的实体存在重合,所以两个任务并非相互独立。我们在两个任务中设计了交叉特征共享单元(cross-feature-sharing units)作为两者的连接纽带。
交叉特征共享单元是一个可以让两个任务交换信息的模块。由于物品向量和实体向量实际上是对同一个对象的两种描述,他们之间的信息交叉共享可以让两者都获得来自对方的额外信息,从而弥补了自身的信息稀疏性的不足。
MKR 的整体损失函数如下:
在实际操作中,我们采用交替训练的方式:固定推荐系统模块的参数,训练知识图谱特征学习模块的参数;然后固定知识图谱特征学习模块的参数,训练推荐系统模块的参数:
MKR 在电影、图书和新闻推荐上也取得了不错的效果,其 F1@K 指标在绝大多数情况下都超过了 baseline 方法:
交替学习是一种较为创新和前沿的思路,其中如何设计两个相关的任务以及两个任务如何关联起来都是值得研究的方向。从实际运用和时间开销上来说,交替学习是介于依次学习和联合学习中间的:训练好的知识图谱特征学习模块可以在下一次训练的时候继续使用(不像联合学习需要从零开始),但是依然要参与到训练过程中来(不像依次学习中可以直接使用实体向量)。
知识图谱作为推荐系统的一种新兴的辅助信息,近年来得到了研究人员的广泛关注。未来,知识图谱和时序模型的结合、知识图谱和基于强化学习的推荐系统的结合、以及知识图谱和其它辅助信息在推荐系统中的结合等相关问题仍然值得更多的研究。欢迎感兴趣的同学通过留言与我们互动沟通。
王鸿伟,本科毕业于上海交通大学计算机科学与技术专业 ACM 试点班,目前为上海交通大学在读四年级博士,在微软亚洲研究院社会计算组实习。研究兴趣为网络特征学习、推荐系统、文本和社交数据挖掘,并在 WWW、AAAI、WSDM、CIKM、TPDS 上发表了十余篇论文。
张富峥,微软亚洲研究院研究员,从事人工智能和数据挖掘方面的研究。研究兴趣包括推荐系统、用户画像、自然语言处理等领域,在这些领域的顶级会议和期刊上发表了近 30 余篇论文,如 KDD、WWW、Ubicomp、TIST 等,曾获 ICDM 2013 最佳论文大奖。
谢幸,微软亚洲研究院资深研究员,中国科技大学兼职博士生导师。他的团队在数据挖掘、社会计算和普适计算等领域展开创新性的研究。他在国际会议和学术期刊上发表了 200 余篇学术论文,共被引用 18000 余次,多次在 KDD、ICDM 等顶级会议上获最佳论文奖。他是 ACM、IEEE 高级会员和计算机学会杰出会员,曾担任 ACM UbiComp 2011、PCC 2012、IEEE UIC 2015、以及 SMP 2017 等大会程序委员会共同主席。
Factorization machines with libfm ↩︎
Personalized entity recommendation: A heterogeneous information network approach ↩︎
Meta-graph based recommendation fusion over heterogeneous information networks ↩︎
Knowledge graph embedding: A survey of approaches and applications ↩︎
DKN: Deep Knowledge-Aware Network for News Recommendation. ↩︎
Collaborative knowledge base embedding for recommender systems. ↩︎
Ripple Network: Propagating User Preferences on the Knowledge Graph for Recommender Systems. ↩︎
MKR: A Multi-Task Learning Approach for Knowledge Graph Enhanced Recommendation. ↩︎