背景
知识图谱系统的建设需要工程和算法的紧密配合,在工程层面,去年蚂蚁集团联合 OpenKG 开放知识图谱社区,共同发布了工业级知识图谱语义标准 OpenSPG 并开源;算法层面,蚂蚁从知识融合,知识推理,图谱应用等维度不断推进。
OpenSPG GitHub,欢迎大家 Star 关注~: https://github.com/OpenSPG/openspg
本文将梳理知识图谱常用的推理算法,并讨论各个算法之间的差异、联系、应用范围和优缺点,为建设知识图谱的图谱计算和推理能力理清思路,为希望了解或者工作中需要用到知识图谱推理算法的同学提供概述和引导。本文为上篇,将主要从 “基于距离的翻译模型”,“基于图传播的模型” 两大板块进行介绍。
知识图谱算法汇总
本章将对常用的图谱推理算法做一个概括的梳理。业界算法很多,一篇文章难以做到全面覆盖,因此我们这里挑选了与图谱推理强相关的算法进行讲解,部分类似的算法挑选了其典型代表进行讨论,算法能力范围尽量覆盖:
- 知识融合,包括:实体对齐、属性融合、关系发掘、相似性属性补全;
- 知识推理,包括:链接预测、属性值预测、事件分析、连通性分析、相似性分析。
首先,通过一张思维导图对这些图推理算法进行汇总:
01:符号推理:基于逻辑规则的推理
- 归纳推理算法,用于规则挖掘
a. 归纳程序: FOIL 规则学习算法,根据增加例子的正、反例数目,计算 Foil_Gain 因子,选其最大的作为新增规则。
b. 关联规则挖掘: AMIE 规则挖掘算法。目标是生成边关系规则,事先依据边类型生成所有可能的规则,再在图谱中找出支持该规则的事实,置信度达到阈值则认为该规则成立。缺点:数据稀疏时很难实用。
c. 路径排序算法: PRA 路径排序算法 (Path Ranking Algorithm)。该算法将每条不同路径的概率作为特征,其中路径概率等于该路径上每步游走的联合概率。然后用逻辑回归分类器做训练和预测,其训练语料为两点之间的各条路径的概率。模型的预测结果包含分类结果以及各条路径的权重,后者可以用作结果解释以及辅助规则挖掘。缺点:这种基于关系的同现统计的方法,都面临数据稀疏时难以实用的问题。PRA 的后续改进算法有带采样策略的 SFE,多任务耦合的 CPRA,效果均有提升。 - 演绎推理算法,用于规则挖掘、事件推理
a. 基于规则的直接推理。只适用于确定性推理,不能进行不确定性推理。比如 marryTo (A,B) -> marryTo (B,A)。
b. 基于贝叶斯网络的概率关系模型(Probabilistic Relational Models),用条件概率表示因果关系,形成图结构。
c. 马尔可夫逻辑网 (Markov Logic Network) 是将概率图模型与一阶谓词逻辑相结合的一种统计关系学习模型,其核心思想是通过为规则绑定权重的方式将一阶谓词逻辑规则中的硬性约束进行软化。即以前的一阶谓词规则是不能违反的,现在采用了概率来描述。其中,权重反映其约束强度。规则的权重越大,其约束能力越强,当规则的权重设置为无穷大时,其退化为硬性规则。该模型的事实的真值取值 0 或者 1,模型可以学习规则(结构学习),学习权重,利用规则和权重推断未知事实成立的概率。
d. 概率软逻辑 (Probabilistic Soft Logic)。是马尔可夫逻辑网的升级版本,最大的不同是事实的真值可以在 [0,1] 区间任意取值。进一步增强了马尔可夫逻辑网的不确定性处理能力,能够同时建模不确定性的规则和事实。并且连续真值的引入使得推理从原本的离散优化问题简化为连续优化问题,大大提升了推理效率。因为是连续值,所以其 “与、或、非” 规则专门定义了一套公式。
02:数值推理:基于图表示学习的推理
图表示学习(Knowledge Graph Embedding)是知识图谱中的实体和关系通过学习得到一个低维向量,同时保持图中原有的结构或语义信息。所以一组好的实体向量可以充分、完全地表示实体之间的相互关系,因为绝大部分机器学习算法都可以很方便地处理低维向量输入,可以应用于链接预测、分类任务、属性值计算、相似度计算等大多数常见任务。
基于距离的翻译模型
这类模型使用基于距离的评分函数评估三元组的概率,将尾节点视为头结点和关系翻译得到的结果。这类方法的代表有 TransE、TransH、TransR 等;
TransE 模型无法很好地建模 “自反 / 多对一 / 一对多” 型关系。解决方案一:允许同一实体在不同关系下有不同的表示比如:TransH、TransR。解决方案二:放松实体和关系间的位移假设,比如 TransM,TransF,ManifoldE。
基于语义的匹配模型
这类模型使用基于相似度的评分函数评估三元组的概率,将实体和关系映射到隐语义空间中进行相似度度量。这类方法分为两种:一类是简单匹配模型:RESCAL 张量分解模型及其变种。二类是深度神经网络 SME、NTN(Neural Tensor Networks)神经张量模型、MLP、NAM 等等。
基于图传播的模型
该类模型将图看做节点以及与节点连接的边。信息在图上进行传播。模型一般分两类:
- 基于随机游走的图传播模型:node2vec、Deepwalk、LINE、metapath2vec 等
- 基于子图汇聚的图传播模型:GCN、Structure2Vec、GAT、GeniePath、KARI、COSNET 等
算法详细梳理
01:基于距离的翻译模型
这类模型使用基于距离的得分函数评估三元组的概率,将尾节点视为头结点和关系翻译得到的结果。
TransE
TransE[6] 是将实体与关系表示为低维向量的简单模型。该模型已经成为了默认的知识图谱向量化表示的 baseline,并衍生出不同的变体。TransE 关注头向量 h 加上关系向量 r 与尾向量 t 之间的距离,并以此为优化目标。最终通过学习得到每个节点和关系的嵌入向量(Embedding)。下面一系列算法的训练过程与此类似就不再重复。
距离得分公式为:
TransE 模型因为太简单,在给定任意两个向量的情况下第三个向量基本就固定了,因此面对 1-N, N-1, N-N 问题会得到 N 个相近的嵌入向量,此外遇到对称关系会得到 r=0,导致对这些问题处理不太理想。因此后续工作在 TransE 的基础上提出了 TransR、TransH 等模型,很好的解决了 1-N, N-1, N-N 问题。
TransR
TransR[7] 中每一种关系 r 都有一个映射矩阵 Mr,这样不同的关系就可以在不同的映射空间计算距离得分。
距离得分公式:
TransH
TransH[8] 继承了 TransR 的思想,但做了简化,用一个映射平面(投影平面)的法向量 wr 来代替映射矩阵 Mr。这样使得参数空间大大减小。
这里解释为什么 TransH 能够解决 1-N, N-1, N-N 问题,TransR 等算法类似。TransE 的问题是三元组中任意两个向量被固定以后,第三个向量就没有了自由度,因此训练得到的嵌入向量在空间上就很接近。而 TransH 就不会有这样的问题。如下图所示,头向量 h 与尾向量 t 都会投影到特定关系对应的投影平面上,那么在投影平面法线(虚线)任意位置处的头向量和尾向量都可能成为潜在的头向量 h 与尾向量 t(蓝色箭头所示)。这里 h、t 就有了一个自由度,该自由度保证了 TransH 不会像 TransE 那样在给定任意两个向量时总是将第三个向量指向同一位置,因此就较好的解决了 1-N, N-1, N-N 问题。在增加额外自由度这一方面 transH、transR、transD 等模型都能办到。
TransH 距离得分公式
TransD
TransD[9] 在 TransH 上做了一点小小的改动,让不同的头向量和尾向量也多了各自的映射空间。
距离得分公式:
TranSparse
TranSparse[10] 是在 TransR 的基础上,将不同的数据稀疏程度信息考虑到了映射矩阵中来了。
距离得分公式:
TransA
前面的那些 trans 方法平等对待向量中的每一维,但实际上各个维度的重要性是不同的,只有一些维度是有效的,而某些维度被认为是噪音,会降低效果。TransA[11] 模型通过引入加权矩阵,赋给每一维度权重。从空间上来看,相当于选择空间从圆变成了椭圆。
TransA’
TransA’[12] 可以通过学习获得自适应的 margin。Trans 系列算法的 loss 如下,其含义是将事实三元组和负采样三元组从距离上尽量分开。
其中是给定常数的 margin,用于将正、负三元组分开。margin 越大将容许越多的错误三元组(即 f(h,r,t) 大于 f(h’,r’,t’) 的三元组)被计入 loss 计算中,这将会导致模型容易过拟合;相反,margin 越小越容易排除掉很多正、负样本距离得分相近的数据(即 f(h,r,t) 与 f(h’,r’,t’) 接近的三元组),容易欠拟合。
之前的 trans 模型的 margin 都是固定不变的,但不同的 margin 是否能够提升模型的效果呢?TransA’[12] 为了证明该效果,将 margin 分为 entity 和 relation 两部分,并利用线性插值进行组合。实体部分的 margin 应保证内层圆包含更多的正例(用圆圈表示),外层圆的外部应尽可能是负例(用方块表示)。对于 relation 部分,TransA’ 利用 relation 的长度,即 L2 范式来衡量相似度关系。具体公式如下图所示:
文章中的实验表明,采用自适应的 margin 以后,效果有明显提升(MR 有明显提升)。
RotatE
1). 原理
距离函数为:
2). 支持复杂关系
文章提供了另外一个角度来验证不同算法的效果,那就是:对称 / 非对称、相反、组合。三类关系定义如下:
- 关系 r 是对称 / 反对称的:if ∀x,y : r (x,y) ⇒ r (y,x) / (r (x,y) ⇒¬r (y,x));
- 关系 r1 是关系 r2 的反:if ∀x,y : r2 (x,y) ⇒ r1 (y,x);
- 关系 r1 是关系 r2 和 r3 的组合:if ∀x,y,z : r2 (x,y)ʌr3 (y,z) ⇒r1 (x,z)。
对于相反关系 hypernym & hyponym 相乘,如下图,对应的正好是整数倍。
对于组合关系 for2-1 & winner & for1,h, r 组合以后再减去 t,自然也是整数倍π。
对于其他普通的情况呢,就分布在各处了。
文章附录中证明了 RotatE 通过简单的旋转操作可以有效地建模上面所有关系模式。文章也列出了几种常见算法使用哪些模式,见下表。
可以看到,在这些算法中,RotatE 是唯一能够满足所有模式的模型。其中 transX 表示一类先将头、尾向量映射,然后再算距离的模型,比如 transH、transR。文章中该表格有错误,因为 transX 也能满足相反关系。以 TransH 举例,因为 TransE 能满足相反、组合关系,又因为 transH 在投影以后和 TransE 是一样的,因此同样也满足。
为什么 RotatE 既能够满足对称关系,也能满足非对称关系?因为旋转具有周期性,对称关系等价于两次旋转操作叠加以后回到原点。当一次旋转操作为半个周期,正好就满足该条件。此外,当一次旋转不等于半周期或者周期的倍数时,那么就对应了非对称关系。
3). 复杂关系对比实验
- 在 FB15k 数据集上,主要的关系模式是对称 / 反对称和反转
- 在 WN18 数据集上,主要关系模式是对称 / 反对称和反转
- 在 FB15k-237 数据集上,主要的关系模式是对称 / 反对称和组合
- 在 WN18RR 上,主要的关系模式是对称 / 反对称和组合
从上表中可以看到,因为不同的模型适用的模式不同,因此在不同的数据集中有不同的表现。TransE 不适用于对称关系,所以在四个数据集中表现都差。而 ComplEx 仅仅不适用于组合关系,因此在上面两个数据集表现好,而在下面两个数据集表现差。RotatE 适用于所有关系,所以在四个数据集中表现都好。
4). 自我对抗负采样
本文提出了一种自我对抗负采样(self-adversarial negative sampling)方式,效果不错。传统负采样损失如下。使用统一的方式对待所有三元组,即 1/k 系数,这种模式会出现问题。因为在训练的过程中,许多样例明显是假的,不能提供任何有意义的信息。
因此对负采样方法进行改进,提出 “自我对抗负采样”,根据当前的嵌入模型的打分来采样负例。具体来说,遵循以下分布采样负三元组:
将该分布概率视作负例的权重,因此最终具有自我对抗训练的负采样损失函数如下
注:权重系数最终需要为负,让难以区分的负样本(得分低的)获得更高的权重。
5). 负采样对比实验
从上表中可以看到,TransE 用上自我对抗负采样以后,提升明显。
从上表中可以看到,该负采样用到其他模型上效果也不错。这样就显得 RotatE 优势不那么明显了。
DTransE
DTransE 算法是我们知识图谱团队自研的算法,详细内容见本文末的系列 ATA 文章。该算法融合了语义匹配模型和距离模型,如下图所示。
图:DtransE 原理示意图
得分函数表达为:
- 融合了经典语义匹配模型 DistMult 和经典距离模型 TransE
- 不引入复数,在实数空间即可同时支持对称 / 非对称、反转、组合关系
- 模型大小显著降低,减少计算复杂度,便于业务落地。
效果方面 DTransE 算法在 FB15K-237、WN18、YAGO3-10 等多个数据集上达到或持平 state-of-art。
Trans 系列算法小节:
transH、transD、transR 这三个算法在几何变换上是等效的,就是对向量 h 和 t 在空间上做了一个变换(包括角度变换和长度伸缩两个操作),不同的关系 r 对应的变换矩阵不同,还有参数数量不同。我们的实验从效果上来看,往往都是 transH>transD>transR。为什么效果会有区别?这是因为参数数量不同。transH 的参数只有一个法向量 wr,transR 的参数是一个变换矩阵 Mr,transD 是对 transR 约化,参数简化为三个向量 wr、wh、wt。从参数数量角度 transH<transD<transR,因此当训练数据不够多时,transH 最容易学到最优模型,transD 其次,最难学的是 transR 容易过拟合(参数更多,更自由,却更难收敛)。tranSparse、transA、transA’ 是各自针对不同的改进点做了升级。RotatE 能够同时满足对称 / 非对称、相反、组合关系,并且该工作附带的自我对抗负采样效果也不错。DTransE 算法支持对称 / 非对称、相反、组合关系,模型大小显著降低,减少了计算复杂度,而且效果也很好。
02: 基于图传播的模型
图嵌入(graph embedding)就是用一个低维、稠密的向量去表示图中的节点,该向量表示能反映图中的结构信息。两个节点其共享的邻近节点越多,两个对应向量距离就越近。优点就是向量表示可以输入到任何的机器学习模型去解决具体面对的问题。
- Why-- 从欧式结构到非欧结构
在图像和视频领域利用 CNN 算法已经取得了巨大成功,但 CNN 要求数据集必须是欧式结构(下图左),图像和视频数据中的像素点是排列整齐的矩阵正好满足了这一点。如果换到图谱场景,CNN 就无能为力了,这是因为图谱是非欧结构(下图右),CNN 在非欧结构的数据上无法保持平移不变性,通俗理解就是在拓扑图中不同顶点的相邻顶点数目不尽相同,那么就无法用一个同样尺寸和结构的卷积核在图上通过平移来进行卷积运算。因此需要一套基于图的深度学习模型。
- How-- 两种求解途径
图谱算法有两种求解途径,在空间域求解(spatial method)、在频谱域求解(spectral method)。
在空间域求解的算法包括:Structure2vec、GNN、GatedGNN、GraphSAGE、GAT、GeniePath 等。
在频谱域求解的算法包括:初代 GCN、ChebNet 等。
本节先从随机游走的算法 node2vec 开始介绍,然后介绍 metapath2vec, COSNET,然后介绍阿尔卑斯平台已经实现的三种有监督算法,它们是 Structure2Vec、GeniePath、GAT,最后介绍我们图谱团队自研的算法 NCLF 和 KARI。
node2vec
- 算法介绍
node2vec[23] 类似于 deepwalk 算法,通过随机游走,将图的结构信息表征在节点的嵌入向量中。node2vec 主要的创新点在于改进了随机游走的策略(deepwalk 完全是随机游走得到两个序列),定义了两个参数 p 和 q,在 BFS(广度优先)和 DFS(深度优先)中达到一个平衡,同时考虑到局部和宏观的信息,并且具有很高的适应性。
- 流程
第一步,随机游走:从每个节点出发随机游走 r 次,于是每个节点得到一个 path。把这个 path 当做一个句子,就可以使用 word2vec 训练了。
第二步,word2vec:将每个词语的 one hot 向量乘以 VxN 的矩阵以后向量得到压缩,然后在窗口 C 范围内计算上下文存在的情况下的条件概率(CBOW),然后通过目标函数训练得到嵌入向量。
优化目标
Node2vec 和 word2vec 是同一套优化目标(loss)。如下图所示,loss 定义为遍历所有的 v 点到 u 点的概率之和最大化。因为第二个方程的分母上那一项需要对所有节点的两两乘积求和,计算量太大,所以采用了随机采样来近似原来的分布。正样本使用前面随机游走的集合就行,负样本就需要通过随机负采样得到。显然,负采样越多越接近原始的分布。
- 实验
可以看到在无监督模型中,node2vec 在随机游走中加入了带有 BFS 或 DFS 倾向性的策略以后,比不带倾向性的 Deepwalk 算法有了明显的提升。
- 应用场景
用于计算节点相似度,可以用于链接预测。因为是无监督学习,不需要打标数据,因此适用范围广。
metapath2vec
- 算法介绍
metapath2vec[24] 是 2017 年发表的,使用基于 meta-path 的随机游走重构节点的异质邻居,并用异质的 skip-gram 模型求解节点的网络表示。DeepWalk 、node2vec 是同质网络中的表示学习方法,并不能直接应用到异质网络。metapath2vec 可以直接在异质图上随机游走,metapath2vec 支持多种节点类型以及多种关系类型的异质图,然后学习得到节点的嵌入向量。该论文提出了两种模型,metapath2vec 和 metapath2vec++。
(1)metapath2vec :基于 meta-path 机制进行随机游走构建节点序列
(2)metapath2vec++:skipgram 模型中负采样上的改进,把同质网络里的针对所有(类型)的节点随机采样改成了仅对当前节点类型的节点进行采样。
metapath:元路径是一种通过一组关系连接多个节点类型的路径,可以用来描述异质网络中不同类型对象之间各种连接不同语义关系。
该论文形式化了异构网络表示学习问题,目标是同时学习出多种节点的低维度隐式的嵌入向量,metapath2vec 的目标是最大化保留给定异构网络的结构和语义的可能性。
其中随机游走的转移概率,需要遵从给定的 metapath,比如说按照 metapath 下一个节点类型是 t, 那么邻居节点中是 t 类型的节点才有可能被选择,其他类型的节点或者非当前节点的邻居节点一概不会被选择到。
- 算法步骤
第一步是按照 metapath 的规则随机游走,获取 path。
(1) 给定 metaPath 后算法按照 metaPath 去游走,直到路径长度达到 Walk Length。
(2) 给定的 metaPath 必须首尾两个结点的 Type 一样,正确的格式例子: “ABCA”,“VDEEV”,“ABA” 等。
(3) 如果给定 metaPath 为 “ABDSA”,walkLength 为 10,则游走得到的结果将是 “ABDSABDSAB”,达到 10 个结点是会截断。
第二步将 metapath 游走获取的 path 作为 “句子”,交给 word2vec,采用 skip-gram 学习出嵌入向量。
- 实验
文章做了节点分类,节点多分类,节点聚类,可视化,参数敏感性分析等实验。metapath2vec 相比较于其他方法(多是典型的同构图上的方法),结果还是具有非常明显的提升的。只不过 metapath2vec++ 在节点多分类上的表现还是明显弱与 metapath2vec 的。
COSNET
- 算法介绍
COSNET[25] 是 2015 年发表的,初衷是将不同的社交网络集成在一起,比如 Twitter、Myspace、LiveJournal、Flickr、Last.fm。这些不同的社交网络是异质图,边的类型是不同的。COSNET 是一个有监督模型,其思想是将全局一致性和局域一致性结合在一起作为目标函数,通过打标数据的学习让模型的预测结果尽量在全局和局域都保持一致。
- 实验
该算法的效果比之前的算法效果有一定的提升,但是提升有限。见下表,一方面 COSNET 比按照最基本的用户名 id 匹配(图中 “name-match” 那一列)只提升十多个百分点;另一方面,“COSNET-” 那一列显示减掉全局一致性效果以后只有 1 个百分点的变化,说明本文重点引入的全局一致性没有起到明显作用。
GCN
- 算法原理
一般来说 GCN[26-28] 分为两大类,一种是在傅里叶域进行卷积变换;另一种是 “空间域卷积 ",是直接在图上进行卷积。谱图卷积有一套统一的理论支持,但是有时候会受到图拉普拉斯算子的限制。下面两幅图分别展示了一度和两度的图卷积,其中红色的点就是卷积范围。
图:一度和两度的 Graph Convolution 示意图
文献 [28] 中的方程 (3)-(5) 很好的描述了如何从空间信息的卷积开始,推导出方便应用落地的卷积核的过程,原文如下:
上面方程 (3) 是把 CNN 的卷积从图像搬到了图谱上。可以与 CNN 进行类比,这里的结构函数 g 就是核函数,这里所有节点的特征构成的矩阵 x 就相当于 CNN 里被卷积的图片。CNN 是对图片做卷积,而 GCN 是对节点特征做卷积,如下图所示。
为了更好的理解 GCN,我们再与 CNN 做更多的类比。第一代的 GCN[26] 的卷积核的尺寸是整个图谱,如上面方程 (3) 所示,相当于对图谱做全局的卷积。这样做的计算量太大,因此后续的 GCN 做了近似,其中最经典的是 Kipf 那篇工作 [28],如上面方程 (4) 所示采用了切比雪夫多项式,并取前 K 项作为卷积核的近似,K 就对应了选取 K 跳的邻居范围(实践中往往 K 取 2、3)。这就相当于把一个全局的卷积核更换为一个局域的卷积核。后面可以看到 K=2、3 时切比雪夫多项式是平方、立方项,这是对原生的 GCN 做了一个比较粗糙的近似,幸亏我们还可以为每一项加上权重用标签来学习来弥补这一误差。
这里解释一下拉普拉斯算子的含义。原生的拉普拉斯算子等于每个节点的度减去其邻居,即 L=D-A,D 就是度矩阵,这是一个对角矩阵,A 是邻接矩阵。L 乘 x 相当于把每个节点的信息传播给了其邻居节点。这里拉普拉斯算子本质是一个二阶差分,物理上就是将其作用的对象以正比于其梯度的力度传播到附近的点。
因为方程 (3) 里面两个本征矩阵 U 相乘的计算量太大 O (N2),因此方程 (4) 采用了切比雪夫多项式展开来近似。那么方程 (3) 就被近似为方程 (5),多项式的阶数对应了传播几跳范围。切比雪夫多项式如下:
GCN 中,一度聚合相当于一层卷积层,K 度聚合相当于 K 层卷积层。同 CNN 一样,因为所有卷积层(aggregator)具有共享参数这个优点,所以才能通过喂打标数据的方式来学习这些参数。共享参数的方式也极大的降低了参数空间,让模型具有 scalable 的优点。上图中多层 GCN 卷积层结合 ReLu 激活函数,让节点可以接收到更远邻居的信息。
GCN 卷积层的具体表达式如下,从 t 到 t+1 层的传播可以表示为:
- 应用场景
适用的场景包括:节点属性预测(属性分类 / 回归)等,但有限制,只适用于双向图。
trick:当数据分布不均匀时(即绝大部分边集中于少数节点之间),一个技巧就是,在采样取 K 度邻居的过程中,采取限制最大邻居数量等类似手段,可以对节点(特别是头部节点)采样的邻居数量进行限制。
- 实验
可以看到 GNN 的实验效果明显好于基于随机游走的 Deepwalk 等基础算法。
Structure2Vec
- 算法发展脉络
kernel methods 在 2002 年代是处理结构化数据的代表方法,包括两类:基于 bag of structures 和基于 probabilistic graphical models (GM)。但是 kernel methods 特别依赖于核函数(即特征空间)的设计。缺点是不能处理大规模图。
为了能够处理大规模图,宋乐老师团队开发了 Structure2Vec[29,30]。因为不需要存储核矩阵(kernal Matrix)所以占用内存小了很多,应用了随机梯度下降后也具有处理大规模图的能力。Structure2Vec 包含了两种传播方式 Mean Field 和 Loopy Belief Propagation(后来扩展到了更多种传播方式)。
- 算法原理
Structure2Vec[29,30] 是什么:
是一个基于知识图谱的深度学习和推理算法,是一种 graph embedding 算法。不仅仅考虑节点的特征,还考虑了节点和边之间的相互作用以及传播。
- 聚合算子
讲解原理之前首先介绍聚合算子的概念。图谱可以看作由多个中心节点和对应的邻居节点组成。下一步需要考虑的就是如何将信息从邻居节点汇聚到各个中心节点。下图给出了 2 跳聚合算子的示例,中心节点 A 的表示是由其邻居节点 B、C、D 的信息聚合而来,而节点 B、C、D 的信息是由它们各自的邻居信息聚合而来。最终得到了聚合算子 (aggregator),其作用是对邻居节点的信息进行聚合。为了方便理解,我们类比 CNN,聚合算子就相当于卷积层,因为他们都起到了将周围点的信息汇聚起来的作用。
图:两跳聚合算子示例
-
- 解决痛点:
解决了以前的深度学习技术难以用于诸如图形、网络和动态网络等组合结构数据的表示和特征学习。
-
- 基本原理:
图: Structure2Vec 的基本原理 [30]
说明:这里介绍的是 Mean Field 方法,另外作者在文章中还介绍了一种方法 Loopy Belief Propagation。这两种方法的区别是:前者的信息传播过程是,在一个超步内,通过对每一个相关节点上的信息进行收集得到的。后者的信息传播过程包含两步,在一个超步内,第一步对每条边上传播的信息进行汇总,第二步再对每条经过节点 i 的边上面的汇总后的信息进行收集。
-
- 算法能力
Structure2Vec 提供了一种能够同时整合节点特征、边特征、网络结构以及网络动态演化特征的深度学习和推理嵌入技术。它可以对网络中的节点和边进行推理,能够挖掘出节点之间的二度、三度甚至更深层次的关系。Structure2Vec 平台支持十亿节点、百亿边规模的图模型训练,并且对于实际小于百万节点的小规模业务场景,其也支持使用单机模式迅速训练,用户可以根据自己的需要进行随意切换或让系统自动切换。Structure2Vec 平台提供了一整套流式解决方案,从用户原始数据检查、到模型训练和导出模型和预测结果给业务,都可以通过简单配置设置例行运行。
-
- 加速机制
1). 矩阵乘法采用 GPU 加速;
2). T 度传播,当 T 较小的时候,可以只加载局部图;
3). 利用 Parameter Server 进行分布式计算。
- 应用场景
Structure2Vec 需要与有监督学习相结合。其应用分为两类,一类是应用于静态图,一类是应用于动态图。
静态图应用中,Structure2Vec 可以分别对节点、边、子图的结构进行分类或回归。应用举例:
-
垃圾账号识别,这属于节点分类问题。账号和设备之间的登录情况构成图谱,并且账号和设备也各自具有特征。然后利用带有标签的账号数据对经过 T 次信息传播后的模型进行训练,得到传播权重 W1、W2 和分类参数 V 以及每个节点(账号)的嵌入向量 。有了这些参数和嵌入向量就能对未打标签的节点进行预测了。
-
基于分子结构预测光伏作用大小的问题,如下图所示,这就属于子图结构预测问题(预测的是连续值所以这是回归问题)。首先经过 T 次传播,然后通过训练得到了传播权重 W1、W2 和分类参数 V 以及每个节点的嵌入向量。训练的目标函数是通过对这些嵌入向量的加权求和来表示光伏作用的大小,然后与打标的 target 之间的平方差定义为 loss。训练好了模型以后,就可以预测新的分子结构的光伏作用大小了。
-
通过药物分子结构预测药物效果,就属于利用结构信息进行分类的问题,原理和过程与 2) 类似只是由回归问题变成了分类问题。
图:利用 Structure2Vec 基于分子结构预测光伏作用大小的问题
- 实验
FC_RES 数据集描述的是 RNA 将基因片段定向到 DNA。SCOP 数据集是蛋白质结构分类,这两个都是子图分类问题。前面四种算法都是 kernal method,后面两种是 Structure2vec 的两种实现方式。可以看到 Structure2vec 的效果明显好于 kernal method。
这个实验是基于分子结构预测光伏作用大小的问题,WL 是 kernal method,后面两种是 Structure2vec 的两种实现方式。MAE 是平均误差,RMSE 是均方根误差。可以看到 Structure2vec 的效果明显好于 kernal method。另外,一个重要的区别是 kernal method 是 not scalable 的,而 Structure2vec 是 scalable 的,实验中 WL lv-6 对于百万大小的数据集其参数数量比后两者多了 1 万倍,速度却只慢了两倍。
动态图应用中,多了一个时间轴,Structure2Vec 可以对节点之间是否会发生交互以及交互的概率进行预测。应用举例:
1). 推荐系统。User 和 iterm 随着时间的交互展开成一个单一方向的图结构,如图所示,通过强化学习得到嵌入向量,对某个时刻的 user 和 item 的嵌入向量做内积,就能判断二者在该时刻的交互发生的概率。
2). 对事件的预测,与 1) 同理。
图:利用 Structure2Vec 基于时间动态演化进行商品推荐
应用情况:目前 Structure2Vec 在信用评估、推荐系统、行为预估、垃圾账号识别、保险反欺诈以及芝麻信用团队的反套现模型中都取得了非常好的效果。
GraphSAGE
- 背景介绍
GraphSAGE[31] 和 Structure2vec 比较类似,都是由聚合算子构建起来的图计算模型,都是共享参数的模型。GraphSAGE 是比较早期的经典 GNN 算法,来自斯坦福发表于 2017 年。很多文献都会和 GraphSAGE 进行比较。这篇文章明确提出了图算法中的 transductive learning 和 inductive learning 的区别。
直推式 (transductive) 学习:从特殊到特殊,仅考虑当前数据。在图中学习目标是学习目标是直接生成当前节点的 embedding,例如 DeepWalk、LINE,把每个节点 embedding 作为参数进行学习,就不能对新节点进行 infer。
归纳 (inductive) 学习:也就是平时所说的一般的机器学习任务,以共享参数方式进行学习。从特殊到一般:目标是在未知数据上也有区分性。
- 算法原理
GraphSAGE 同样采用聚合算子,其信息聚合的过程如上图所示,可以描述为以下三个步骤:
-
- 先对邻居随机采样,降低计算复杂度(图中一跳邻居采样数为 3,二跳邻居采样数为 5)
- 生成目标节点嵌入向量:先聚合 2 跳邻居特征,生成一跳邻居嵌入向量,再聚合一跳邻居嵌入向量,生成目标节点嵌入向量,从而获得二跳邻居信息。
- 将嵌入向量作为全连接层的输入,预测目标节点的标签。
算法伪代码如下:
其中 4、5 行的 for 循环描述了汇聚算子的工作过程。第 4 行描述了信息由 k-1 层汇聚到第 k 层。第 5 行描述了中心节点信息由中心节点的 k-1 层信息与中心节点的邻居信息进行拼接,并通过一个全连接层转换,最终得到中心节点在第 k 层的嵌入向量。
GraphSAGE 提出了四种不同的聚合方式:平均聚合、GCN 归纳聚合、LSTM 聚合、pooling 聚合。
a. 平均聚合:先对邻居 embedding 中每个维度取平均,然后与目标节点 embedding 拼接后进行非线性转换。
b. GCN 归纳聚合:直接对目标节点和所有邻居 emebdding 中每个维度取平均(替换伪代码中第 5、6 行),后再非线性转换:
c. LSTM 函数不符合 “排序不变量” 的性质,需要先对邻居随机排序,然后将随机的邻居序列嵌入向量作为 LSTM 输入。
d. 先对每个邻居节点上一层嵌入向量进行非线性转换(等价单个全连接层,每一维度代表在某方面的表示),再按维度应用 max 或者 mean pooling,捕获邻居集上在某方面的突出的或者综合的表现 以此表示目标节点嵌入向量。
- 实验结果
从实验结果上可以看到 GraphSAGE 的四种聚合方式比传统算法均有所提升。
GAT
- 算法描述
Graph Attention Networks (GAT)[32] 算法的主要思想是利用 attention 机制来代替 GCN 中的卷积层,得到 node embedding。同时该算法可以适用于 transductive 和 inductive 两种任务。transductive 任务是指测试集的节点和节点特征在训练过程中出现过;inductive 任务是指测试集中的节点不会在训练过程中出现。下面介绍其核心结构 Graph Attention layer.
- 基本原理
对于每一层,输入为每一个节点的 feature, h={h1,h2,⋯,hN}, hi∈RF,N 为节点个数,F 为输入特征维数。输出亦为每一个节点的 feature, h’={h′1,h′2,⋯,h′N}, h′i∈RF′,F′为输出特征的维数。则 attention 机制就是在对输入特征做线性变换 W∈RF′×F 后计算对于节点 i 其周围节点(包括自身)的权重,最后加权求和通过激活函数即得到节点 i 的输出特征。则节点 j 对节点 i 的权重(可以看做节点 j 对于节点 i 的重要性)为:
上面这一步 softmax 为对权重的正则化。
上面这一步就是一个加权求和。注意到这个模型只用到了节点特征,没有用到边的信息。
文中给出的 attention 机制有两类:一类是单层网络,如下:
另外一类是多头注意力网络(multi-head attention)的两个例子,第一个例子是将不同的 head 得到的嵌入向量做拼接,第二个例子是做平均,如下:
图: Graph Attention Networks (GAT) 算法的 Graph Attention layer 图示
因为 Attention 计算相互独立,方便并行计算,所以比传统的 GCN 高效。
- 实验结果
可以看到实验结果都还不错,尤其是 PPI 的结果,比 GCN 的结果高太多了。文章发表在 ICLR 2017[32] 上。
- 算法特点:
GAT 算法和下面将要介绍的 GeniePath 算法比较相似,都是建立在 GNN 基础之上,只是 GAT 只添加了对邻居节点信息进行筛选的 attention 机制,而 GeniePath 除此之外,还采用了 LSTM 机制来过滤经过多层传播的信息。从效果来讲,这两种算法的表现也比较接近,并且二者的表现都明显好于之前的 GNN 算法。
- 应用场景:
因为算法特性一致,GNN 能够使用的场景(比如前面 Structure2Vec 的应用场景),GAT 理论上应该都适用。
GeniePath
- 算法发展脉络:
图: GeniePath 算法的发展脉络
GraphML 团队开发的 GeniePath 算法 [33,34] 可以在聚合算子上结合节点的属性信息来判断到底有多少信息需要传播,有多少信息可以过滤掉。简单来讲就是,和 structure2vec 相比,GeniePath 的聚合算子不仅仅采用了结构信息而且还结合了节点属性信息,就具有了更强大的表达能力。
- 算法原理:
下图揭示了 GeniePath 的算法结构,其结构是在基本的聚合算子上做了扩展。虚线左边表示在广度上采用了 attention 机制来筛选邻居节点;虚线右边表示在深度上采用了 LSTM 机制来过滤经过多层传播的信息。
下面的方程就描述了 GeniePath 在深度上的 attention 机制以及广度上的 LSTM 机制。
-
- LSTM 机制:
Attention 机制:
GeniePath 沿用 GNN 的计算框架,其特点在于会根据优化目标自动选择有用的邻居信息,来生成节点特征(embedding)。GeniePath 通过定义两个 parametric 函数:自适应广度函数、和自适应深度函数,共同对子图进行广度、深度搜索。其中自适应广度函数限定朝哪个方向搜索重要节点,自适应深度函数限定搜索的深度。实现中如上图所示,GeniePath 使用一个 attention 网络表达自适应广度函数来来筛选邻居节点,使用一个 LSTM-style 网络表达自适应深度函数来过滤经过多层传播的信息。GeniePath 后来进行了升级,不仅能考虑节点特征,还能考虑边的特征。
目前所有的图神经网络方法都基于如下框架,做 T 次迭代,相当于每个节点拿自己走 T 跳可达的 “邻居” 节点,来做传播和变换,最后的被用来直接参与到损失函数的计算,并通过反向传播优化参数。在 GeniePath 之前的算法:Structure2Vec、GCN、GraphSAGE,他们的共同特点是对 T 步内所有邻居做聚合(aggregate),且以固定的权重做聚合。这些经典的 GNN 方法只会根据拓扑信息选择邻居并聚合生成特征,不会过滤和筛选有价值的邻居。而我们不但要看拓扑信息还要看节点的行为特征。GeniePath 关心在聚合的时候到底应该选取哪些重要的邻居信息、过滤那些不重要的节点信息。
图:自适应的感知域示例
- 优点
1). 相比其他 GNN 算法,在大数据上可能有更好的性能,效率更高!
2). 可解释性更强。注意力权重可以区分出重要的边和次要的边,增加了可解释性。
- 实验
Alipay 的数据集有 1M 节点,2M 边,4k 特征。可以看到数据集越大,效率越高,效果越好。
对蛋白质相互作用推理,F1 值提升明显。
- 应用场景:
因为 GeniePath 是其他 GNN 算法的升级版,因此其他 GNN 算法的应用场景(比如前面讲到的 Structure2Vec 的应用场景)GeniePath 应该都能实现,并且一般都可以期待更好的性能。GeniePath 作为一个通用图神经网络算法已经在蚂蚁金服的风控场景实际使用,并得到较理想的效果,很好地提高了支付宝保护用户账户安全的能力 [35]。其论文中还实现了的 GeniePath 应用场景包括:引用网络、BlogCatalog 社交网络、蛋白质相互作用网络。
HeGNN
- 算法原理
GraphML 团队开发的 HeGNN[36] 算法在 GNN 算法的基础上引入了多层次注意力机制。该算法支持异质图,即支持不同类型的节点和不同类型的边。过程可以简单理解为将不同类型的关系做成多个同质图,然后合并在一起。具体如下:
HeGNN 算法使用了 MetaPath(元路径)。每一条元路径携带着不同的语义,可以帮助我们利用异质信息网络中丰富的结构信息。比如消费图谱中的 “User - (fund transfer) - User” (UU) 记录了用户与用户之间的转账信息,“User-(transaction) -Merchant-(transaction)-User” (UMU) 记录了两个用户同时在一个商家交易的信息。有效地融合这些元路径信息,可以使得模型充分利用不同类型的边的差异信息。下一个问题是如何有效地聚合异质的邻居信息。
层次注意力机制
直觉而言,不同的邻居、特征以及元路径会对节点的表示产生不同的影响。因此,下面介绍如何建模节点对这些方面信息的偏好。
邻居注意力
参照 GAT 算法的思想计算节点对每个邻居的注意力值,代表着每个邻居的贡献。可以按照如下的计算公式实现:
针对具体的场景,作者也给出了两种可替代的实现如下:
(1) avg-pool : 针对大规模的业务场景,可以直接对元路径下的邻居的特征做加权平均。这样可以大大降低计算量,而且一般可以得到一个不错的结果。
(2) geniepath-pool : 对于每一条元路径下的邻居,可以复用 geniepath 来实现单一元路径下的特征表示。
特征注意力
不同的特征可能对节点的表示存在不同的贡献。因此,参照文献,作者设计了如下的特征注意力层对每个特征点计算特征贡献值:
路径注意力
元路径抽取了节点在异质信息网络中的不同方面的信息,比如元路径 “UU” 抽取了用户的转账信息,元路径 “UMU” 抽取了用户的交易信息。所以需要设计路径的注意力层来捕获节点对不同元路径的偏好。具体地,按如下方式为每个节点计算它对元路径集合中每条元路径的注意力值 :
NCLF
NCLF [37](Neural Conditional Logic Field)是一种融合逻辑规则的推理算法。
我们知道神经网络的优点是学习能力强,但是需要的标注样本较多。而逻辑规则推理正好相反,它所需的标注样本少,但学习能力有限。NCLF 的出发点是把这两者的优点融合,填补各自的缺点。
把专家经验引入到学习中来提高学习效率最近很火,专家经验可以转述为一阶逻辑,经典的解法是马尔可夫逻辑网络(MLN),并采用变分推断(VI)来加速求解,NCLF 进一步引入 GCN 来近似后验。在实现的过程中我们使用 Hinge-Loss Markov Random Fields(HL-MRF)进一步简化计算,将全举过程近似为一次性计算,使其更适用于工业大数据。为了减少 GCN 消息传播的衰减,引入了 Loopy belief propagation。另外在构图上将二部图变为一般图。而引入规则之后,可以基于统计或学习得到规则权重,去掉坏规则可以进一步提高学习效果。在工程计算上,因为一阶逻辑的计算需要进行实例化(Grounding),计算量大,实际使用中需要进行分布式样本生成。
我们在公开数据集和业务规则数据上分别进行了效果对比。
KARI
KARI 算法是我们基于 ALPS 的 KGNN[38] 框架延伸开发的算法框架。这里简要介绍其原理,详细内容可以查看 KARI ATA 文章 [39]。本文前面介绍的传统的链接预测算法比如基于向量之间距离的 Trans 系列算法、基于语义匹配模型 RESCAL 系列算法、基于随机游走的 node2vec 系列算法,这些算法把嵌入向量作为参数通过学习来获得,在小规模图上能够取得不错的效果,但对于大规模图来讲,参数空间暴涨,难以落地。GraphML 团队的 KGNN 框架提出将传统算法和 GNN 类算法相结合,就具有了共享参数这个优点。采用共享参数的聚合算子会极大降低参数空间,就能适用于大规模图推理。因此,为了充分挖掘大规模图谱中的结构信息以及充分学习图谱中丰富的异质信息导致的一对多、多对一、对称、非对称、相反、组合等关系,我们在 Encoder-Decoder 的思想下,Encoder 选用 GeniePath,Decoder 选用 DtransE,再结合自对抗负采样等能力结合而成了 KARI 算法。
Encoder-Decoder 框架
KARI 默认选取 GeniePath 为 Encoder,默认选取 DTransE 为 Decoder。KARI 通过自监督学习生成节点和边的表达(Embeddings),可输出给下游模型使用,补充图结构特征。这里自监督学习是指标签数据不需要人工打标生成,利用边表中已知的三元组可以构成正样本,然后随机生成负样本,就构成了训练集。
图:KARI 的 Encoder-Decoder 框架示例
KARI 目前支持的 Encoder 和 Decoder 如下:
- Encoder:GeniePath, GAT, GCN, Graphsage, Structure2Vec, Gin
- Decoder: DTransE, TransH, TransE, TransR, RESCAL, DistMult, Complex
下图中 Encoder 部分,中心节点 A 的嵌入向量是由其邻居节点 B、C、D 的信息聚合而来,而节点 B、C、D 的信息是由它们各自的邻居信息聚合而来,每一层汇聚就是一次迭代。这样我们通过 Encoder 中的 T 次迭代就获得了中心节点 A 的嵌入向量,重复这一过程还可以获得中心节点 B 的嵌入向量。关系 r 的嵌入向量最初由随机过程生成。然后将节点 A、节点 B 和关系 r 的嵌入向量带入 Decoder 计算得分,再利用得分来计算 loss。
图:KARI 的 Encoder 和 Decoder 示意图
Decoder 的作用是将嵌入向量中的节点特征和图结构信息直观的表达为三元组的打分,该打分可以理解为三元组成立的 “概率”。KARI 的 Decoder 默认选择我们团队自研的 DTransE 算法。
KARI 算法的特性总结如下:
- 能够充分融合图谱中点和边的属性信息以及图的结构信息
- 支持异质图谱,即多种类型的节点和边
- 支持 1-N,N-1,N-N 的复杂关系
- 支持对称 / 非对称、反转、组合关系
- 支持自我对抗负采样
- 模型共享参数能够支持大规模图推理
- 支持常见推理任务(实体相似度计算、链接预测、节点分类、社区发现等)
- 可自监督学习进行预训练,提取图谱的特征信息,生成节点和边的通用向量表达,输出给下游模型使用
KARI 目前支持的业务包括:最终受益人 UBO 关系预测、可信关系降打扰、支付推荐、支付搜索、财富内容带货等等,并取得了较好的效果。
GraphSAINT
- 背景介绍
当数据有热点时,限制随机采样邻居个数这类做法可能导致采样到的邻居中有不重要的邻居,并且丢失了重要邻居的信息。特别是当我们需要计算多层邻居时,子图大小指数暴涨,难以计算。GraphSAINT[40] 旨在解决稠密点的问题,它从根本上改变了采样方式。它不再在原图上采样邻居,而是从原图上采样一个子图下来,在这个子图上做局部的、完全展开的 GCN。优点:
-
- 图变小了,计算效率高
- 效果好
- 前置采样,无需修改 GCN 模型
-
采样策略
采样策略倾向于影响大的节点被保留下来。采样概率只和链接信息有关,和节点特征无关。很适合提前预采样,下游 GCN 模型不用做改造。
上表给出了四种采样策略:
-
- Node sampler:第一步先采样节点得到一个节点子集,节点的采样概率正比于该节点的入度;第二步在该节点子集中补充好边。
- Edge sampler:第一步先采样边得到一个边的子集,边的采样概率反比于边的度(即反比于头节点和尾节点的度),然后将这些边涉及到的头、尾节点作为节点子集。
- Random walk sampler:第一步随机选择 r 个根节点开始随机游走 h 步;第二步将随机游走路径上的节点作为点的子集,边的子集就是这些点之间的边。
- Multi-dimensional random walk sampler:和方法 c 类似,区别是每步随机游走的概率正比于对应点的度。
- 消除分布偏差
- 实验结果
可以看到效果提升明显,特别是 PPI 数据集。而且效果比 Cluster-GCN 略有提升。GraphSAINT 效果好的可能原因:
-
消除了噪音信息
-
朴素采样的 GCN 的 mini-batch 的方差较大,收敛性不好。
-
小图计算量小,可以训练更多个 epoch
Cluster-GCN
- 算法介绍
Google 开发的 Cluster-GCN[41] 算法,通过聚类形成一个个簇,并将链接尽量限制在簇内,起到了前置采样的效果。论文中介绍了两个算法方案,朴素版本的 Vanilla cluster-GCN,和升级版本的 Multiple cluster-GCN。下面分别介绍。
Vanilla cluster-GCN
该算法先做一次聚类,每个聚类的子图用来进行训练。聚类的目的是使簇内连接远大于簇间连接。图变小了,算法效果也不错。从热点角度来看相当于从多个热点中选出了少量几个热点作为簇,并隔离了不同的簇。该算法最大的优点是减小了 batch 之间的 variance(偏差),效果提升,以及多层计算量呈线性而非指数增长。
只保留对角处的矩阵,近似忽略非对角处的矩阵。其含义是保留簇内的连接,忽略簇间的连接。对于 Vanilla cluster-GCN,每个簇对应一个 batch。这样导致计算效率增加,计算精度提高。效率增加是因为随着层数增加,节点数量呈线性增长,而其他 GCN 呈指数增长;精度增加其解释是减小了 batch 间的 Variance(偏差),以及增加了计算层数。
Multiple cluster-GCN
尽管朴素 Cluster-GCN 实现了良好的时间和空间复杂度,但仍然存在两个潜在问题:
- 图被分割后,一些连接被删除。因此性能可能会受到影响。
- 图聚类算法往往将相似的节点聚集在一起,因此聚类的分布可能不同于原始数据集,从而导致在执行 SGD 更新时对 full gradient 的估计有偏差。
为了解决上述问题,文中提出了一种随机多聚类方法,在簇接之间进行合并,并进一步减少 batch 间的偏差(variance)。作者首先用一个较大的 p 把图分割成 p 个簇 V1,…,Vp,然后对于 SGD 的更新重新构建一个 batch B,也就是一个 batch 中有多个簇。随机地选择 q 个簇,定义为 t1,…,tq , 并把它们的节点包含到这个 batch B 中。此外,在选择的簇之间的连接也被添加回去。作者在 Reddit 数据集上进行了一个实验,证明了该方法的有效性。
- 实验结果
实验中在两个公开数据集上达到了 State-of-art 的效果。
讨论
从算法分类角度
- 有监督、无监督
无监督:Deepwalk、Node2Vec、Metapath2vec、LINE、Louvain
有监督:GCN (半监督)、GraphSAGE、SDNE (半监督)、GeniePath、GAT、Structure2Vec、HeGNN
- 异质图、同质图
支持异质图:HeGNN、metaPath2vec、KGNN
支持同质图:Deepwalk、Node2Vec、LINE、SDNE、GCN、GraphSAGE、GeniePath、GAT、Structure2Vec
从应用角度
- 链接预测
所有的 embedding 算法都支持链接预测。有一个区别是同质图模型支持一种关系预测,而异质图模型支持多种关系预测。(另外加上 ALPS 平台尚未包括的 trans 系列也可以做链接预测)。
- 实体归一(相似度计算)
所有的 embedding 算法都支持相似度计算。相似度是由具体的任务目标来定义并体现在 loss 中,一般的任务目标有距离相似性(两个节点有几度相连)、结构相似性、节点类型相似性(label 预测)。
- 属性值预测(label 预测)
GCN、GraphSAGE、GeniePath、GAT、Structure2Vec、HeGNN 等。
持续分享 SPG 及 SPG + LLM 双驱架构相关干货及进展
官网:https://spg.openkg.cn/
Github:https://github.com/OpenSPG/open