向AI转型的程序员都关注了这个号????????????
机器学习AI算法工程 公众号:datayx
本文主要包括以下内容:
推荐系统的基础知识
知识图谱辅助的推荐方法介绍
基于embedding的知识图谱推荐方法
混合型知识图谱推荐方法
知识图谱:是结构化的语义知识库,用于迅速描述物理世界中的概念及其相互关系。
知识图谱通过对错综复杂的文档的数据进行有效的加工、处理、整合,转化为简单、清晰的“实体,关系,实体”的三元组,最后聚合大量知识,从而实现知识的快速响应和推理。
知识图谱有自顶向下和自底向上两种构建方式。所谓自顶向下构建是借助百科类网站等结构化数据源,从高质量数据中提取本体和模式信息,加入到知识库中;所谓自底向上构建,则是借助一定的技术手段,从公开采集的数据中提取出资源模式,选择其中置信度较高的新模式,经人工审核之后,加入到知识库中。
看一张简单的知识图谱:
如图所示,你可以看到,如果两个节点之间存在关系,他们就会被一条无向边连接在一起,那么这个节点,我们就称为实体(Entity),它们之间的这条边,我们就称为关系(Relationship)。
知识图谱的基本单位,便是“实体(Entity)-关系(Relationship)-实体(Entity)”构成的三元组,这也是知识图谱的核心。
实体: 指的是具有可区别性且独立存在的某种事物。实体是知识图谱中的最基本元素,不同的实体间存在不同的关系。如图中的“中国”、“北京”、“16410平方公里”等。
关系: 关系是连接不同的实体,指代实体之间的联系。通过关系节点把知识图谱中的节点连接起来,形成一张大图。如图中的“人口”、“首都”、“面积”等
知识图谱的原始数据类型一般来说有三类(也是互联网上的三类原始数据):
结构化数据(Structed Data):如关系数据库
半结构化数据(Semi-Structed Data):如XML、JSON、百科
非结构化数据(UnStructed Data):如图片、音频、视频、文本
如何存储上面这三类数据类型呢?一般有两种选择,一个是通过RDF(资源描述框架)这样的规范存储格式来进行存储,还有一种方法,就是使用图数据库来进行存储,常用的有Neo4j等。
RDF结构:
在知识图谱方面,图数据库比关系数据库灵活的多。
在数据少的时候,关系数据库也没有问题,效率也不低。但是随着知识图谱变的复杂,图数据库的优势会明显增加。当涉及到2,3度的关联查询,基于图数据库的效率会比关系数据库的效率高出几千倍甚至几百万倍。
其实我们的构建知识图谱的过程,就是信息抽取、知识融合、知识加工三个过程,但是这三个过程都有各自的难点,下文通过从这三个模块出发,解析这三个模块说要解决的问题,会遇到的难点。
信息抽取(infromation extraction)是知识图谱构建的第1步,其中的关键问题是:如何从异构数据源中自动抽取信息得到候选指示单元?
信息抽取是一种自动化地从半结构化和无结构数据中抽取实体、关系以及实体属性等结构化信息的技术。
涉及的关键技术包括:实体抽取、关系抽取和属性抽取。
实体抽取又称为命名实体识别(named entity recognition,NER),是指从文本数据集中自动识别出命名实体。实体抽取的质量(准确率和召回率)对后续的知识获取效率和质量影响极大,因此是信息抽取中最为基础和关键的部分。
2012年Ling等人归纳出112种实体类别,并基于条件随机场CRF进行实体边界识别,最后采用自适应感知机算法实现了对实体的自动分类,取得了不错的效果。
但是随着互联网中内容的动态变化,采用人工预定义实体分类体系的方式已经很难适应时代的需求,因此提出了面向开放域的实体识别和分类研究。
在面向开放域的实体识别和分类研究中,不需要(也不可能)为每个领域或者每个实体类别建立单独的语料库作为训练集。因此,该领域面临的主要挑战是如何从给定的少量实体实例中自动发现具有区分力的模型。
一种思路是根据已知的实体实例进行特征建模,利用该模型处理海量数据集得到新的命名实体列表,然后针对新实体建模,迭代地生成实体标注语料库。
另一种思路是利用搜索引擎的服务器日志,事先并不给出实体分类等信息,而是基于实体的语义特征从搜索日志中识别出命名实体,然后采用聚类算法对识别出的实体对象进行聚类。
文本语料经过实体抽取,得到的是一系列离散的命名实体,为了得到语义信息,还需要从相关的语料中提取出实体之间的关联关系,通过关联关系将实体(概念)联系起来,才能够形成网状的知识结构,研究关系抽取技术的目的,就是解决如何从文本语料中抽取实体间的关系这一基本问题。
人工构造语法和语义规则(模式匹配)
统计机器学习方法
基于特征向量或核函数的有监督学习方法
研究重点转向半监督和无监督
开始研究面向开放域的信息抽取方法
将面向开放域的信息抽取方法和面向封闭领域的传统方法结合
属性抽取的目标是从不同信息源中采集特定实体的属性信息。例如针对某个公众人物,可以从网络公开信息中得到其昵称、生日、国籍、教育背景等信息。属性抽取技术能够从多种数据来源中汇集这些信息,实现对实体属性的完整勾画。
将实体的属性视作实体与属性值之间的一种名词性关系,将属性抽取任务转化为关系抽取任务。
基于规则和启发式算法,抽取结构化数据
基于百科类网站的半结构化数据,通过自动抽取生成训练语料,用于训练实体属性标注模型,然后将其应用于对非结构化数据的实体属性抽取。
采用数据挖掘的方法直接从文本中挖掘实体属性和属性值之间的关系模式,据此实现对属性名和属性值在文本中的定位。
通过信息抽取,我们就从原始的非结构化和半结构化数据中获取到了实体、关系以及实体的属性信息。
如果我们将接下来的过程比喻成拼图的话,那么这些信息就是拼图碎片,散乱无章,甚至还有从其他拼图里跑来的碎片、本身就是用来干扰我们拼图的错误碎片。
拼图碎片(信息)之间的关系是扁平化的,缺乏层次性和逻辑性;
拼图(知识)中还存在大量冗杂和错误的拼图碎片(信息)
那么如何解决这一问题,就是在知识融合这一步里我们需要做的了。
知识融合包括2部分内容:实体链接,知识合并
实体链接(entity linking):是指对于从文本中抽取得到的实体对象,将其链接到知识库中对应的正确实体对象的操作。
其基本思想是首先根据给定的实体指称项,从知识库中选出一组候选实体对象,然后通过相似度计算将指称项链接到正确的实体对象。
研究历史:
仅关注如何将从文本中抽取到的实体链接到知识库中,忽视了位于同一文档的实体间存在的语义联系。
开始关注利用实体的共现关系,同时将多个实体链接到知识库中。即集成实体链接(collective entity linking)
实体链接的流程:
从文本中通过实体抽取得到实体指称项。
进行实体消歧和共指消解,判断知识库中的同名实体与之是否代表不同的含义以及知识库中是否存在其他命名实体与之表示相同的含义。
在确认知识库中对应的正确实体对象之后,将该实体指称项链接到知识库中对应实体。
实体消歧:专门用于解决同名实体产生歧义问题的技术,通过实体消歧,就可以根据当前的语境,准确建立实体链接,实体消歧主要采用聚类法。其实也可以看做基于上下文的分类问题,类似于词性消歧和词义消歧。
共指消解:主要用于解决多个指称对应同一实体对象的问题。在一次会话中,多个指称可能指向的是同一实体对象。利用共指消解技术,可以将这些指称项关联(合并)到正确的实体对象,由于该问题在信息检索和自然语言处理等领域具有特殊的重要性,吸引了大量的研究努力。共指消解还有一些其他的名字,比如对象对齐、实体匹配和实体同义。
在构建知识图谱时,可以从第三方知识库产品或已有结构化数据获取知识输入。
常见的知识合并需求有两个,一个是合并外部知识库,另一个是合并关系数据库。
将外部知识库融合到本地知识库需要处理两个层面的问题:
数据层的融合,包括实体的指称、属性、关系以及所属类别等,主要的问题是如何避免实例以及关系的冲突问题,造成不必要的冗余
通过模式层的融合,将新得到的本体融入已有的本体库中
然后是合并关系数据库,在知识图谱构建过程中,一个重要的高质量知识来源是企业或者机构自己的关系数据库。为了将这些结构化的历史数据融入到知识图谱中,可以采用资源描述框架(RDF)作为数据模型。业界和学术界将这一数据转换过程形象地称为RDB2RDF,其实质就是将关系数据库的数据换成RDF的三元组数据。
在前面,我们已经通过信息抽取,从原始语料中提取出了实体、关系与属性等知识要素,并且经过知识融合,消除实体指称项与实体对象之间的歧义,得到一系列基本的事实表达。
然而事实本身并不等于知识。要想最终获得结构化,网络化的知识体系,还需要经历知识加工的过程。
知识加工主要包括3方面内容:本体构建、知识推理和质量评估。
本体(ontology)是指工人的概念集合、概念框架,如“人”、“事”、“物”等。
本体可以采用人工编辑的方式手动构建(借助本体编辑软件),也可以以数据驱动的自动化方式构建本体。因为人工方式工作量巨大,且很难找到符合要求的专家,因此当前主流的全局本体库产品,都是从一些面向特定领域的现有本体库出发,采用自动构建技术逐步扩展得到的。
自动化本体构建过程包含三个阶段:
实体并列关系相似度计算
实体上下位关系抽取
本体的生成
比如对下面这个例子,当知识图谱刚得到“阿里巴巴”、“腾讯”、“手机”这三个实体的时候,可能会认为它们三个之间并没有什么差别,但当它去计算三个实体之间的相似度后,就会发现,阿里巴巴和腾讯之间可能更相似,和手机差别更大一些。
这就是第一步的作用,但这样下来,知识图谱实际上还是没有一个上下层的概念,它还是不知道,阿里巴巴和手机,根本就不隶属于一个类型,无法比较。因此我们在实体上下位关系抽取这一步,就需要去完成这样的工作,从而生成第三步的本体。
当三步结束后,这个知识图谱可能就会明白,“阿里巴巴和腾讯,其实都是公司这样一个实体下的细分实体。它们和手机并不是一类。”
在我们完成了本体构建这一步之后,一个知识图谱的雏形便已经搭建好了。但可能在这个时候,知识图谱之间大多数关系都是残缺的,缺失值非常严重,那么这个时候,我们就可以使用知识推理技术,去完成进一步的知识发现。
我们可以发现:如果A是B的配偶,B是C的主席,C坐落于D,那么我们就可以认为,A生活在D这个城市。
根据这一条规则,我们可以去挖掘一下在图里,是不是还有其他的path满足这个条件,那么我们就可以将AD两个关联起来。除此之外,我们还可以去思考,串联里有一环是B是C的主席,那么B是C的CEO、B是C的COO,是不是也可以作为这个推理策略的一环呢?
当然知识推理的对象也并不局限于实体间的关系,也可以是实体的属性值,本体的概念层次关系等。
推理属性值:已知某实体的生日属性,可以通过推理得到该实体的年龄属性;
推理概念:已知(老虎,科,猫科)和(猫科,目,食肉目)可以推出(老虎,目,食肉目)
这一块的算法主要可以分为3大类,基于逻辑的推理、基于图的推理和基于深度学习的推理。
从逻辑上看,知识库的更新包括概念层的更新和数据层的更新。
概念层的更新是指新增数据后获得了新的概念,需要自动将新的概念添加到知识库的概念层中。
数据层的更新主要是新增或更新实体、关系、属性值,对数据层进行更新需要考虑数据源的可靠性、数据的一致性(是否存在矛盾或冗杂等问题)等可靠数据源,并选择在各数据源中出现频率高的事实和属性加入知识库。
知识图谱的内容更新有两种方式:
全面更新:指以更新后的全部数据为输入,从零开始构建知识图谱。这种方法比较简单,但资源消耗大,而且需要耗费大量人力资源进行系统维护;
增量更新:以当前新增数据为输入,向现有知识图谱中添加新增知识。这种方式资源消耗小,但目前仍需要大量人工干预(定义规则等),因此实施起来十分困难。
什么是推荐系统
在当前互联网时代,推荐系统是所有面向用户的互联网产品的核心技术,只要产品是面向用户的,那么就有推荐系统的需求。
推荐系统是解决信息爆炸问题,给用户推荐一个用户感兴趣的小规模集合。用户在大量商品中,不知道如何选择,推荐系统是替用户做这个选择,猜用户的兴趣,然后给用户推荐一个小规模的商品集合,这样用户就不会迷失在大量商品中。
举几个推荐系统的例子。如下图是imdb系统中的电影推荐,imdb会推荐用户可能更感兴趣的电影。
如下图是亚马逊系统中的图书推荐,给用户推荐和用户更相关,用户更感兴趣的书籍。
如下图是booking.com系统中旅游景点的推荐,给用户推荐更感兴趣景点。
如下图是我们更为熟悉的推荐系统的例子,知乎,抖音,头条等系统,都有推荐功能。
推荐系统的实现方法
推荐系统主要有2个任务,一个是评分预测 ( Rating Prediction )。如下图左边是评分预测的例子,横坐标是物品,纵坐标是用户。表格是用户对物品的打分,这个评分可以显示的反应用户对物品的喜好程度,1表示很不喜欢,5表示很喜欢。推荐系统就是预测表格中问号处的缺失值,这就叫评分,这个评分叫显示反馈 ( Explicit feedback )。
另一个是点击预测 ( CTR Prediction )。右边是点击预测的例子,表格中只有0和1,0表示用户没有点击过,1表示用户点击过,这类数据叫隐式反馈 ( Implicit feedback ),点击预测只能反映用户的非常弱的偏好程度,用户点击了不一定说明用户喜欢,比如逛淘宝,用户只是点击了某个物品就退出了,所以点击物品并不能代表用户的真实感受。
推荐系统有一个非常经典的方法叫协同过滤 ( Collaborative Filtering, CF ),CF的核心是假设相似的用户有相似的偏好。
如下图为4个用户对4个物品的打分情况,来预测用户u4对物品i1的评分。通过这4个用户在其他3个商品 ( i2,i3,i4 ) 的打分,计算出其他3个用户和u4用户的相似度,分别是0.7,0.1,0.2,然后用相似度加权平均其他3个用户在i1物品的打分,这样就得到了u4对i1的评分为2.1。
协同过滤CF是根据历史物品评分记录,计算出用户相似度,从而预测分数。
CF是一种常见的方法,但存在以下2类问题。
第一类是稀疏性问题 ( Sparsity ),一般情况下评分分布是相当稀疏的,比如一个用户一辈子可能只会看几百部电影,但电影总数达百万量级,所以在计算相似度的时候会有困难。
第二类更进一步,冷启动问题 ( Cold start ),当来了一个新的用户,这个新的用户没有历史记录,所以没法计算相似性,就没法做推荐。当注册新的app时,比如读书类的app,系统一开始会问你对哪些主题感兴趣,因为系统没有你的历史记录,刚开始没法给你推荐。
▌知识图谱辅助的推荐方法介绍
针对推荐系统出现的问题,我们的思路是既然用户和物品交互很稀少,甚至没有,那可以引入其他的一些信息,这些引入的信息叫辅助信息 ( Side Information )。如下图是4类非常常见的辅助信息:社交网络;用户或商品属性特征;多媒体信息,比如电影的海报,文本信息,视频音频信息等;上下文信息,假设一个用户购买了一个商品,购买记录的一些信息,比如时间、地点、当前用户购物车的其他物品信息等。
1. 什么是知识图谱
知识图谱 ( Knowledge Graphs, KG ) 也是一种辅助信息。KG是一个有向异构图 ( heterogeneous graph ),图中节点表示实体 ( entity ),边表示关系 ( relation )。
一个KG通常包含很多对三元组triple ( head,relation,tail ),其中head和tail是2个实体 ( entity ),relation就是边。
如下图,推荐系统的item是电影,所以Forrest Gump是推荐系统的item,同时也是KG中的实体,KG中其他的实体并不是推荐系统的item,Forrest Gump这部电影的主演是Tom Hanks,虽然Tom Hanks是KG的实体 ( entity ),但并不是item。把图中左边这些三元组 ( triples ) 组合起来,就变成了右边的一个很大的KG。
2. 为什么要在推荐系统中使用KG
如下图,假设一个用户 ( 最左边 ) 看过3部电影 ( item ),Cast Away,Back to the Future,TheGreen Mile,在KG中,可以将这3部电影连接到其他的一些事情上,比如Cast Away 这部电影的类别 ( genre ) 是冒险形 ( Adventure ),Back to the Future的导演 ( directed ) 是Robert Zemeckis等,可以连接到很多其他non-item实体上,再从这些non-item实体又连接到item电影实体上,比如最右边的Interstellar,Forrest Gump,Raiders of the Lost Ark。
KG建立一个从用户已经看过的电影到没看过的电影的连接,而这些连接不是由用户的观看记录得来的。在CF里,实际上是把中间这块替换成了其他用户,用其他用户历史观看记录得到这些连接。KG提供了另外一种关于物品连接的信息来源的方法。
如上图是一个新闻推荐的例子,假设某个用户看过一条新闻,这个新闻的内容是:
Boris Johnson Has Warned Donald Trump To Stick ToThe Iran Nuclear Deal。
从这条新闻中提取了4个实体,在KG中,可以对这些实体做进一步的扩展,做2次,做3次扩展,又会发现这些实体都指向另外一条新闻:
North Korean EMP Attack Would Cause Mass U.S. Starvation, Says Congressional Report。
这2条新闻在字面上没有任何相似度,新闻的单词都不一样,但他们是很相关的,这个相关性体现在KG上,他们在低层是相关的,但这种相关性没法从字面意义上得到,这也是为什么要用KG,KG提供了一种item相似度的计算方式。
3. KG能给推荐系统带来什么
第1个提高推荐系统的精度 ( Precision ),更准确的发现item之间的相似性,如下图2部电影,能通过Tom Hanks做个连接。
第2个提高推荐系统的多样性 ( Diversity ),可以通过主演扩展,可以通过电影类别扩展,也可以通过导演扩展,总有一款是用户非常喜欢的。
第3个是可解释性 ( Explainability ),可以用KG的path来解释系统为什么会推荐这部电影,如下图某个用户喜欢Cast Away这部电影,系统会推荐The Terminal这部电影,因为他们有相同的主演。
4. 知识图谱处理方法
KG 的处理方法中有一类方法叫Knowledge Graph Embedding,KGE。KGE主要是对KG的每个实体 ( entity ) 和每个关系 ( relation ) 学习一个低维的特征。在KGE中有一个基于翻译的距离模型,Translational distancemodels。
如上公式为TransE算法模型,对KG中的每一个tuple(h,r,t),学习到的entity embedding,relation embedding,使h+r约等于t,这的r相当于翻译作用,把h翻译成t,f函数对每个tuple的真实分值越小越好。
如图(a)是TransE模型,假设head对应的embedding加上relation对应的embedding等于tail对应的embedding。基于TransE有很多扩展模型,比如TransH, TransR。
TransH解决的是一对多的问题,某一个head和relation可能会对应多个tail,如图(b),把head和tail都投影到一个平面上,然后让它们在相对应的平面上做转换。
TransR是把head和tail都投影到另外一个空间中,在新的空间里让h+r=t。
KG-Aware Recommender Systems正式方法大概可以分为3类。
第一类是Embedding-based methods,基于KG embedding的方法,下图列举了5篇论文,今天将会介绍第2篇和第5篇。
第二类是Path-based methods,基于KG计算路径的推荐方法,今天不会涉及这类方法。
第三类是Hybrid methods,结合embedding和path的方法,今天将介绍一下第1、3、4篇,第3、4是比较统一的方法。
5. 知识图谱辅助的推荐系统问题定义
已知一个用户的集合Users,一个物品的集合Items,用户和物品之间的交互 (relations,yuv),一个包括很多non-item实体的KG。图中yuv表示用户u对物品v的一个隐式反馈,即用户有没有点击过这个物品,目标是给定一个新的u-v对,预测点击率yuv。
公式定义如上图。用户集合U={u1,u2,...},物品集合V={v1,v2,...},交互矩阵 ( 隐式反馈 ) Y矩阵Y={yuv ϵ {0,1} | uϵU, vϵV},KG包括实体 ( entity ) 和关系 ( relation ),由很多三元组组成。
每个物品v在KG中可能对应一个或多个实体。物品是实体的一个子集。
目的是学习一个预测函数F,给定一对u,v,可以输出一个预测分值ŷuv,θ是目前的一个参数。
▌基于embedding的知识图谱推荐方法
1. DKN方法
DKN: Deep Knowledge-Aware Network for News Recommendation,属于基于embedding的知识图谱推荐方法,是2018年发表的论文,这篇论文是关于新闻推荐。
如上图,给出一段新闻,提取新闻中的实体,根据这些实体,构建一个知识图谱的子图,对知识图谱做embedding映射,得到每个实体的embedding,最后就得到每个实体的特征向量。
如上图,对于某个实体Fight Club,只有其对应的embedding还不够,在KG中每个实体,连接着好多其他的实体,那这些临近实体就是该实体的上下文,将这些上下文中的每个实体的embedding相加平均,就得到该实体的上下文embedding。如上图公式中ē就是实体ei的上下文embedding。
在NLP中有一个模型叫KimCNN,主要是给定一个sentence,返回一个特征向量。如上图给定一个n个单词的sentence ( 图中n为7 ),对每个单词做embedding映射,embedding的长度为d ( 图中d为5 ),得到一个d*n的word embedding矩阵。用7个卷积核做卷积进行featuremaps,得到7个1维向量,对每个向量做池化 ( Max pooling ),得到该sentence的word embedding。
前面介绍中已有3种特征向量,分别是实体embeddings,上下文embeddings,word embedings,我们的方法是把这3种embeddings做一个累加,卷积,池化,最后得到这个sentence的embeddings,这种方法叫KCNN。
接下来介绍基于KCNN做推荐的方法。如上图假设某个用户已经点击过了3条新闻,来了一个候选新闻,预测该用户对候选新闻的点击率。对这4条新闻做KCNN的embedding映射,得到4个特征向量。因为用户看过的新闻的重要性对候选新闻是不一样的,用Attention Net计算用户看过的每一条新闻和候选新闻的决策分值。用得到的分值加权观看记录,得到User embedding。将user embedding和candidate news embedding拼接,输出一个预测的点击概率,这个就是做预测的DKN模型。
2. MKR方法
MKR:Multi-TaskFeature Learning for Knowledge Graph Enhanced Recommendation,属于基于embedding的知识图谱推荐方法,是2019年发表在WWW的论文,是一个多任务的模型。
如上图为MKR框架,包括3个模块,一个是推荐模块,一个是knowledge graph embedding, KGE模块,还有一个是以上2个模块的桥梁,cross&compress units,交叉压缩单元,下面将分别阐述这3个模块。
推荐系统模块,输入是user, item,输出是用户对物品的点击率。模块分2块,一个是low-level的部分,一个是high-level的部分。在low-lever部分,用了一个MLP ( multi-layer perceptron ) 来处理用户的特征UL,item是cross&compress units做的处理,返回一个物品的特征VL,把UL和VL拼接起来,用一个recommendation system函数fRS,输出一个点击预测值。
KGE模块,也分成low-lever和high-level部分,输入head,用cross&compress unites来做特征处理,relation用MLP做特征处理,把这2个处理结果拼接起来,经过一个K层的MLP,得到一个predictedtail,预测的tail和真实的tail用一个函数fKG算一个分值,这样就可以优化这个score值。
这个多任务之所以能做起来,主要是推荐系统模块的物品 ( item ) 和KGE模块的实体 ( entity ) 是对应的,很多item可以在KGE中找到对应的entity,item和entity是对同一个物品的描述,他们的embedding在某种程度上是相似的,是可以被连接的。中间的cross&compress units就是这个连接结合,这个模块是在每一层都有,在l层,输入是item的embedding vl和entity的embedding el,输出是下一层的embedding。
这个模块计算分2步,第一步是cross,第二步是compress。
cross操作是将vl,el做一个cross,vl是一个d*1的向量,elT是1*d的向量,矩阵相乘后得到一个d*d的矩阵Cl。
compress是将交叉后的矩阵Cl重新压缩回embedding space,这块细节部分可以参考论文。通过参数wl压缩输出vl+1,el+1。
学习算法中loss的计算公式如上图。LRS是推荐系统的loss,预测user-item的分值ŷuv和真实分值yuv的差距。LKG是KG的loss,对于真实tuple(h,r,t),预测分值score越大越好,而对于随机替换tuple(h', r, t') ( 负样本 ),预测的分值越小越好。LREG是正则项。
算法实现第1块是推荐系统的任务,第2块是KGE任务,交替训练2者。在每次循环里面,做t次的RS的任务训练,做1次的KGE任务训练,做t次RS训练是因为更关注RS任务,这个t是可以调整的,这就是MKR模型。
▌混合型知识图谱推荐方法
1. RippleNet方法
RippleNet: Propagating User Preferenceson the Knowledge Graph for Recommender Systems,属于混合型知识图谱推荐方法,是2018发表在CIKM的一篇论文。
Ripple从名字上理解是水波的意思,水波是一层一层的,那这个算法是指在KG中某个实体,和该实体相连的其他实体也有一跳,二跳,三跳的关系,如上图列出了ForrestGump这部电影对应的3跳的临近实体。
如上图是RippleNet框架,输入是一对user-item,输出是用户对物品的点击预测值。
对输入用户u,获取用户的点击记录Vu,在KG中找到对应的Vu,比如图中有2个对应实体,获取这些实体对应的tuple,把实体一跳的集合拿出来。对输入物品v做embedding映射。如上公式,将item embedding v和这些head hi在R空间中做一个softmax,得到v相对于每个head的分值pi。
如上图公式,用pi加权平均对应的tail embedding ti,得到输出ou1,即当前用户u的一跳的特征,对应图中绿色竖条,可以看成该用户对当前物品的一阶响应 ( User's1-order response )。
继续拿ou1特征重复之前的操作,拿ou1和物品二跳的tuple算一个p值,加权对应的tail embedding,得到ou2。
重复做下去,得到很多跳的响应值oui,把这些响应值加起来,得到用户最终的embedding。
用这个用户embedding和物品最初的embedding做内积,再用一个sigmoid函数得出点击预测值。
学习算法如上图,在已知KG和RippleNet系统情况下,学习参数,最大化后验概率。通过贝叶斯定理,可以把该公式拆成3个值。第1项是参数的先验分布,用上面这个公式来刻画这个先验概率分布p(θ),这项对应的是正则项loss。
第2项给定参数θ,KG的概率,这项对应的是KG的embedding部分。当(h,r,t)是正样本,Ih,r,t接近1,反之为0,希望hTRt能接近真实的tuple值。
第3项已知参数θ和KG,用户和物品交互的似然函数。这个似然函数是一个伯努利分布,关于用户和物品内积的伯努力分布。
把这3项用负log做处理,得到loss函数,优化这个模型。
2. KGCN和KGCN-LS方法
KGCN:Knowledge GraphConvolutional Networks for Recommender Systems,是发表在2019年WWW上的一篇论文。
KGNN-LS:Knowledge-awareGraph Neural Networks with Label Smoothness Regularization for RecommenderSystems,是发表在2019年KDD上的一篇论文,这篇是基于第1篇的扩展,这2篇论文一块讲解。
核心思想是基于KG辅助的推荐,但引入了一个新的模型GCN ( 图神经网络 ),方法是基于GCN对KG扩展一个模型。
在KG中的边没有显示权值,只是一个关系类型。引入一个relation scoring function su(r),对每个relation打分,从而把KG转换成weighted graph。函数su(r)的输入是user和relation,输出一个分值。核心思想是识别用户关注的类型,比如有些用户偏好同种类的电影,有些用户偏好某个主演的电影。su(r)用来刻画不同用户对不同relation的偏好程度,将user embeding和relation embedding内积,算出相应的分值。把异构KG转换成weighted graph,这样一个graph对应邻接矩阵Au,下标为u是因为每个用户对应的邻接矩阵是不一样的,su(r)是取决于用户。
把KG中实体信息通过GNN做一个融合,如上图公式是一个标准的GNN的公式,Au是用户对应的邻接矩阵。
Du是Au的三角对称矩阵diagonal degree matrix。
Wl就是训练传输参数矩阵。
Hl,Hl+1是entity对应的embedding矩阵。
σ是一个非线性函数。
这个式子本质是在KG上做了一个多跳的message passing,把实体周围的那些临近点的特征向中间聚集,最后一层学到的特征是融合了多跳的临近点的特征。当得到最后一层embedding Hl后,就可以做点击预测。
上图公式中u对应的是User embedding。
vu是根据前面KGNN计算得出的关于用户的entity embedding。
通过f函数得到预测值,f函数可以取内积,或MLP等。到这是第1篇论文的KGCN模型。
如上公式,在传统GNN模型中,Au是固定的,只需要训练Wl。
但在我们的模型中,Au和Wl都需要训练,Au是通过relation scoring function计算,图的结构需要训练,导致模型参数很多,容易过拟合。
为了防止过拟合的问题,引入一个正则项,给模型一个约束。用label做约束,user engagement labels,指的是用户对物品的打分值,yuv是用户对某个物品的评分,这个评分是一个已知值,所以可以在KG中对这些点打一个标签。用户看过某部电影,对应的标签是1,没看过的电影对应的标签是0,对non-item实体没有标签。
下一步是预测某个点的label,有一类算法叫标签传播算法 ( label propagation algorithm, LPA ),这个算法是优化下面这个函数。
遍历所有的边,Au是边的权值。如果i,j节点有边,说明这2个节点联系比较强,那这2个节点的label会比较相近。这2个节点的边权值越大,那这2个节点的label就越一致。这是算法LPA的一个假设,标签过度是平滑的。
预测一个无标签的节点,将其周围节点的label加权平均,重复该操作直到收敛,这就是label propagation。
利用label propagation做正则项,对于一个节点v,其真实lable是yuv ( 图中为0 )。
利用LPA算法预测这个v的label,得到预测值y_uv,算出预测值和真实值之间的损失J。
在做label propagation时,标签传播是取决于边权值,所以最终预测值是关于边权值的函数,损失J也是一个关于边权值的函数。损失函数R(A)是一个关于A的函数,所以可以把梯度往这个损失函数中传播,起到一个正则项的作用。
如上图,回顾一下整个模型,把原始异构KG转成weighted graph,学习边的权值,得到一个邻接矩阵,用GNN得到entity embedding,用这个entity embedding 和user embedding来做这个预测,得到预测值ŷuv,用ŷ和真实值y得到一个loss,反向传播,将误差梯度向前传播,更新Au和参数W。
下面部分是正则项,邻接矩阵为参数,做一个label propagation,得到预测值y_uv,用y_和y得到一个loss,反向传播,更新Au。
总结一下,本文主要介绍了3个部分的内容,第1部分介绍了知识图谱是推荐系统的一种新的辅助信息。另外2个部分介绍了两类知识图谱推荐方法,一类是基于embedding的知识图谱推荐方法,包括DKN和MKR,一类是混合型知识图谱推荐方法,包括RippleNet、KGCN和KGNN-LS。
阅读过本文的人还看了以下文章:
【全套视频课】最全的目标检测算法系列讲解,通俗易懂!
《美团机器学习实践》_美团算法团队.pdf
《深度学习入门:基于Python的理论与实现》高清中文PDF+源码
python就业班学习视频,从入门到实战项目
2019最新《PyTorch自然语言处理》英、中文版PDF+源码
《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码
《深度学习之pytorch》pdf+附书源码
PyTorch深度学习快速实战入门《pytorch-handbook》
【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》
《Python数据分析与挖掘实战》PDF+完整源码
汽车行业完整知识图谱项目实战视频(全23课)
李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材
笔记、代码清晰易懂!李航《统计学习方法》最新资源全套!
《神经网络与深度学习》最新2018版中英PDF+源码
将机器学习模型部署为REST API
FashionAI服装属性标签图像识别Top1-5方案分享
重要开源!CNN-RNN-CTC 实现手写汉字识别
yolo3 检测出图像中的不规则汉字
同样是机器学习算法工程师,你的面试为什么过不了?
前海征信大数据算法:风险概率预测
【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类
VGG16迁移学习,实现医学图像识别分类工程项目
特征工程(一)
特征工程(二) :文本数据的展开、过滤和分块
特征工程(三):特征缩放,从词袋到 TF-IDF
特征工程(四): 类别特征
特征工程(五): PCA 降维
特征工程(六): 非线性特征提取和模型堆叠
特征工程(七):图像特征提取和深度学习
如何利用全新的决策树集成级联结构gcForest做特征工程并打分?
Machine Learning Yearning 中文翻译稿
蚂蚁金服2018秋招-算法工程师(共四面)通过
全球AI挑战-场景分类的比赛源码(多模型融合)
斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)
python+flask搭建CNN在线识别手写中文网站
中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程
不断更新资源
深度学习、机器学习、数据分析、python
搜索公众号添加: datayx
长按图片,识别二维码,点关注