几种常见的Graph Embedding方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了几种常见的Graph Embedding方法相关的知识,希望对你有一定的参考价值。
参考技术A在介绍Graph Embedding之前,我们先回顾什么是Embedding? Embedding在数学上是一个函数,将一个空间的点映射到另一个空间,通常是从高维抽象的空间映射到低维的具象空间。Embeding的意义将高维数据转换到低维利于算法的处理;同时解决one-hot向量长度随样本的变化而变化,以及无法表示两个实体之间的相关性这一问题。
最常见的embeding方法是word2vec,根据语料库中单词的共现关系求出每个单词的embedding,常用的word2vec模型有cbow和skip-gram两种,cbow根据上下文预测中心词,skip-gram根据中心词预测上下文(详见word2vec 中的数学原理详解)。因此既然自然语言中的单词可以通过共现关系进行embedding,那么将graph类比成整个语料库,图中的节点类比成单词,我们是否也可以通过共现关系对graph中的node进行embedding?对于word2vec而言,语料库中的每个句子都可以描述单词之间的共现,对于graph,这种共现关系如何描述呢?接下来我们将对多种不同的graph embedding方式进行展开。
Graph Embedding 的中心思想就是找到一种映射函数,该函数将网络中的每个节点转换为低维度的潜在表示。利于计算存储,不用再手动提特征(自适应性),下图是graph embeding的几种常见分类:
DeepWalk 通过将节点视为单词并生成短随机游走作为句子来弥补网络嵌入和单词嵌入之间的差距。然后,可以将诸如 Skip-gram 之类的神经语言模型应用于这些随机游走以获得网络嵌入。其优点是首先其可以按需生成随机游走。由于 Skip-gram 模型也针对每个样本进行了优化,因此随机游走和 Skip-gram 的组合使 DeepWalk 成为在线算法。其次,DeepWalk 是可扩展的,生成随机游走和优化 Skip-gram 模型的过程都是高效且平凡的并行化。最重要的是,DeepWalk 引入了深度学习图形的范例。
用SkipGram的方法进行网络中节点的表示学习。那么,根据SkipGram的思路,最重要的就是定义Context,也就是Neighborhood。NLP中,Neighborhood是当前Word周围的字,本文用随机游走得到Graph或者Network中节点的Neighborhood。
(1)随机游走随机均匀地选取网络节点,并生成固定长度的随机游走序列,将此序列类比为自然语言中的句子(节点序列=句子,序列中的节点=句子中的单词),应用skip-gram模型学习节点的分布式表示。
(2)前提:如果一个网络的节点服从幂律分布,那么节点在随机游走序列中的出现次数也服从幂律分布,并且实证发现NLP中单词的出现频率也服从幂律分布。
预测上下 文节点)--------- output:representation
node2vec在DW的基础上,定义了一个bias random walk的策略生成序列,仍然用skip gram去训练。
论文分析了BFS和DFS两种游走方式,保留的网络结构信息是不一样的。 DeepWalk中根据边的权重进行随机游走,而node2vec加了一个权重调整参数α:t是上一个节点,v是最新节点,x是候选下一个节点。d(t,x)是t到候选节点的最小跳数。 通过不同的p和q参数设置,来达到保留不同信息的目的。当p和q都是1.0的时候,它等价于DeepWalk。
利用SkipGram的方法,来为Networks抽取Representation。那么,自然,根据SkipGram的思路,最重要的就是定义这个Context,或者说是Neighborhood。从文本的角度来说,这个Neighborhood当然就是当前Word周围的字,这个定义非常自然。但是对于Graph或者Network来说就来得没那么容易了。
(1)先区分两个概念:
一阶相似度:直接相连节点间,例如6与7。
定义节点vi和vj间的联合概率为
v代表节点,u代表节点的embedding。上面式子的意思是两节点越相似,内积越大,sigmoid映射后的值越大,也就是这两节点相连的权重越大,也就是这两个节点间出现的概率越大???。
二阶相似度:通过其他中介节点相连的节点间例如5与6。
用的是一个条件概率
(2)目标是让NRL前后节点间相似度不变,也节点表示学习前如果两个节点比较相似,那么embedding后的这两个节点表示向量也要很相似。--此文中用的是KL散度,度量两个概率分布之间的距离。
以保证其一阶相似度为例子:
embedding前:节点vi和vj间的经验联合概率为
所以,最小化:
前面说了很多GE的模型,从古典方法,到只考虑结构的模型,再到考虑节点和变extra info的模型,再到深度模型,大家可能觉眼花缭乱,并不知道实际中应该用哪个模型。
这里我提一句,你选择的模型一定要和你的实际问题相关:
1.比如你的问题更加关注内容相似性(局部邻域相似性)那么你可以选择node2vec,LINE,GraRep等;
2.如果你的问题更加关注结构相似性,你可以选择struc2vec,这里可以简单说以下为什么蚂蚁金服风控模型使用struc2vec相比node2vec有质的提升,这是因为在风控领域,你可信并不能代表你的邻居可信(有些“大 V”节点的邻居众多),但是一个直观的感觉是,如果两个人在图中处于相似的地位(比如两个“大 V”),那么这两个人应该都可信或都不可信,并且一般来说这样两个人(节点)相距较远;
3.再者如果你的模型需要考虑节点和边的额外信息,那么你可选择CANE,CENE,Trans-net等;
4.如果你想处理大规模易变图,你可以采用GraphSAGE,或者先使用其他GE方法,再使用GraphSAGE归纳学习;
如果你想微调你的模型,你可选择GraphGAN;
甚至你可以选择很多GE方法,并将得到的embedding向量进行聚合,比如concat等方式。
Graph Embedding作为知识图谱的经典方法之一,其应用非常广泛。当今国内外互联网搜索引擎公司已经意识到知识图谱的战略意义,纷纷构建知识图谱,如Google知识图谱(Google Knowledge Graph),百度“知心”和搜狗的“知立方”,以此来改进搜索质量,知识图谱对搜索引擎形态日益产生重要的影响。
了解更多关于知识图谱、Graph Embedding干货知识,锁定8月20日(星期四)下午14:00公开课!
Graph Embedding:工业界常用的6种图表示学习方法
导语 | Graph Embedding属于表示学习的一种,目的是通过图的拓扑结构学习得到图中节点的低维稠密表示,从而更方便地应用于下游任务。本文介绍部分工业界常用的Graph Embedding方法,关于Graph Embedding的更全面的介绍可以参考这篇综述文章[1]。
一、DeepWalk
首先介绍2014年提出的deepwalk[2]模型,之前有接触过word2vec方法的同学看这个模型应该会觉得非常简单,算法流程如下所示,首先将所有节点顺序打乱,然后以每个节点为起点,通过随机游走的方式生成一条序列,生成了序列之后,就可以通过word2vec中的skipGram算法来学习节点的embedding表示了。
随机游走的过程非常简单,就是在每个节点处随机选择该节点的邻居节点作为序列的下一个节点,一直走到序列的最大长度后停下来。对于带权重的图或者有向图来说,也可以根据实际情况改变随机游走的策略:比如对于节点i来说,如果他和每个邻居之间的边权重有大有小,可以让节点i走向邻居节点的概率正比于边权重。
由于skipGram算法学习过程是用当前节点的表示来预测邻居节点,因此两个节点如果在图中共有的邻居点越多,则两个节点学到的embedding表示就越相似。
二、Node2Vec
Node2Vec算法[3]在DeepWalk算法上做了一点小改进,主要是改变了随机游走生成序列的过程,使得在学习embedding的过程中会对图节点的同质性(homophily)和结构性(structural equivalence)做权衡,得到序列之后同样使用skipGram算法来学习节点的embedding表示。
同质性和结构性的含义可以从下图进行说明,同质性表示两个相连的节点应该具有相似的embedding表示,如图中节点u和节点S₁直接相连,则他们的embedding应该距离较近。结构性表示两个结构上相似的两个节点应该具有相似的embedding表示,如图中节点u和节点S₆分别处在两个集群的中心位置,则这两个节点的embedding应该比较相似。
为了学习到同质性和结构性,本文探究了两种图的游走的方式:广度优先遍历(BFS)和深度优先遍历(DFS),BFS倾向于在初始节点的周围游走,因此侧重于学习到网络的结构性,DFS倾向于游走到离初始节点较远的节点,因此侧重于学习到网络的同质性。这里我是这么理解的,如上图所示,节点u和节点S₆分别处于两个集群的中心位置,如果使用BFS进行游走,则生成的序列一定都会大量出现中心位置的节点,后续的skipGram算法对于这两个中心位置的节点就有可能学习到相似的embedding表示。相反,如果采用DFS算法,距离较远的两个节点就更有可能出现在生成的同一条序列中,这两个节点会有许多相同的上下文节点,因此后续skipGram算法能够学习到相似的embedding表示。
至于如何控制BFS和DFS的权衡,文中是引入了两个超参数来控制随机游走。
上图表示从节点t出发走到了节点v,接下来从节点v出发跳转到周围节点的概率,Node2Vec随机游走到下个节点的概率可以公式化地表达成:
其中,表示边的权重,Z表示归一化系数。表示节点t就是节点x本身,表示节点t和节点x距离为1(直接相连),表示节点t和节点x距离为2(不直接相连)。
由公式可以看出,通过调节参数p和q,能够对随机游走的方式作调整:
p被称为返回参数(return parameter),p越小,则节点v走回节点t的概率越大,随机游走更倾向于BFS
q被称为进出参数(in-out parameter),q越小,则节点v更有可能走向远处的节点,随机游走更倾向于DFS
因此,Node2Vec是根据来挑选下一个节点的,值得一提的是,在具体实现的时候,作者采用AliasSample算法来优化采样过程的时间复杂度,关于这一算法的介绍可以参考这篇博客,讲得十分清楚:
https://blog.csdn.net/haolexiao/article/details/65157026
三、LINE
LINE(Large-scale Information Network Embedding)[4]在图上定义了两种相似度:一阶相似度和二阶相似度。通过这两种相似度来约束节点embedding的学习。
一阶相似度衡量的是图结构中两个相连节点之间的相似度,如果两个节点不存在连边,则一阶相似度为0(如上图中节点5和节点6),如果两个节点相连且边权很大,则这两个节点一阶相似度较高(如上图中节点6和节点7)。一阶相似度刻画了图的局部结构。
二阶相似度衡量的是图网络中两个节点的邻居的相似程度,如果两个节点有很多相同的邻居节点,则这两个节点的二阶相似度较高,即使这两个节点不存在直连边(如图中节点5和节点6)。二阶相似度刻画了图的全局结构。
因此,LINE的优化目标分为一阶相似度和二阶相似度的优化。
1. 一阶相似度优化目标
两个节点的一阶相似度表示为:
其中W表示所有边权重之和。
两个节点embedding的相似度表示为:
其实就是两个节点的embedding内积通过sigmoid函数的结果。
一阶相似度的优化目标表示为实际一阶相似度和节点embedding相似度的KL散度,去掉常数项可以表示为:
文中提到一阶相似度优化目标只用于无向图。
2. 二阶相似度优化目标
二阶相似度优化目标可用于有向图和无向图。文中以有向图为例子介绍了二阶相似度优化目标(无向图可以看成特殊情况的有向图,即一条无向边可以表示成两条权重相同但方向相反的有向边)。
这里LINE对每个节点定义了两个embedding,一个是节点本身的embedding(记),另一个是节点作为其他节点邻居时的embedding(记为)。
对于有向边(i,j),定义条件概率为:
其中|V|表示节点总数量。
定义经验分布为:
其中是边(i,j)的权重,是节点 i 的出度表示从节点i出发的有向边指向的所有节点的集合)。
二阶相似度的优化目标同样是两个分布的距离:
文中认为不同节点的重要性不同,因此用λi进行加权,为了方便,文中设置。用KL散度来刻画两个分布的距离并去掉常数项,则上述优化目标可以表示成:
前面提到每个节点会学到两个embedding,最终是把用于作为节点的表示。在二阶相似度优化目标的约束下,如果两个节点有许多相同的邻居,且和这些邻居的权重也相似,这两个节点学到的embedding会比较相似。
如果要获得同时包含一阶相似度和二阶相似度的embedding,只需要将两者获得的embedding拼接即可。文中也指出可以通过联合优化的方式直接学到包含一阶相似度和二阶相似度的embedding,但文中没有实现。
四、SDNE
SDNE(Structural deep network embedding)[5]使用深度自编码器架构来学习图节点的embedding表示,通过损失函数约束模型学到的embedding表示能够包含图网络结构的一阶相似性和二阶相似性。其中,一阶相似性表示图网络中直接相连的节点对应该具有相似性,二阶相似性表示两个节点如果有大量共同的邻居节点,则这两个节点的表示应该相似。一阶相似性反映图网络的局部结构,二阶相似性反映图网络的全局结构。
SDNE模型的架构如下所示,模型的输入是图的邻接矩阵的第i行,表示的是节点i和网络中所有节点的连接情况,通过编码器将输入映射到低维向量空间,得到低维向量表示,再通过解码器重构回去。因此具有大量相同邻居的节点通过自编码器网络学到的embedding表示会比较相似,这保持了图网络的二阶相似性。另外,对于有直连边的节点对,SDNE会约束两个节点的embedding表示接近,从而保持了图网络的一阶相似性。
SDNE的损失函数如下所示,由三部分组成:一阶相似度损失、二阶相似度损失和L2正则项。
其中,一阶相似度损失表示为:
表示邻接矩阵S中的一项,大于0表示节点i和节点j之间存在连边。一阶相似度损失用于约束存在连边的两个节点学到的embedding表示接近。
二阶相似度表示为:
可以看到这是一个加权的重构损失,当=0时,=1,否则。之所以要进行加权,是因为图的连边非常稀疏,邻接矩阵S中存在大量零值,自编码器在重构时即使把所有值都输出为0也能取得不错的效果,但这不是我们想要的。SDNE的解决方案是对非零值施加了更高的惩罚系数。
五、EGES
在推荐系统场景中,可以通过user的行为序列构建item的同构图,然后在图中使用随机游走生成序列,再通过skipGram算法获取item的embedding表示,过程如下所示:
然而,实际推荐场景下不可避免会遇到稀疏(item只在很少的user行为序列中出现)和冷启动(新加入的item)的问题,这会导致对这些item学到的embedding效果很差。推荐场景下一般会通过引入side information(如item的种类、店家、价格等等)的方式来解决这些问题。EGES(Enhanced Graph Embedding with Side Information)算法[6]则是将side information引入到graph embedding的学习过程之中,EGES的模型如下所示:
其中,“SI 0”表示item自身,而“SI 1”到“SI n”则表示n个side information。可以看到,和普通的skipGram不同之处在于,EGES是用各个embedding加权求和获得的hidden representation来预测上下文的item的。另外需要注意的是,实际中EGES是用而不是来作为加权和的权重的。
六、Metapath2Vec
前面介绍的都是基于同构图的graph embedding方法,直接用于异构网络效果不好,因此,Metapath2Vec方法[7]被提出并用于学习异构图节点的embedding表示。
metapath2vec算法仍然采用了随机游走+skipGram的方案,只是在随机游走的阶段做了改进。如下图所示,左边是一个异构图(图上有作者、论文、会议、单位等多种类型的节点),Metapath2Vec算法会先定义metapath,然后根据metapath来进行随机游走,如下图右边就定义了三种metapath,metapath是对称的。
定义了metapath之后,就可以根据metapath进行随机游走了。假设当前节点为(表示节点是t类型的节点),则产生下一个节点为的概率为:
公式的三行分别表示:
若两节点存在连边,且下一节点类型和metapath定义的下一节点类型(即类型t+1)相同,则概率为和相连的所有t+1类型的节点数的倒数
若两节点存在连边,但下一节点类型和metapath定义的下一节点类型不同,则概率为0
若两节点不存在连边,概率为0
随机游走获得节点序列之后,就可以通过skipGram算法学习节点embedding了:
如上图所示,文中还提出了metapath2Vec++算法,和metapath2Vec算法唯一不同之处在于:在skipGram过程中负样本只使用和正样本同种类型的节点。
参考文献:
[1] Goyal P, Ferrara E. Graph embedding techniques, applications, and performance: A survey[J]. Knowledge-Based Systems, 2018, 151: 78-94.
[2] Perozzi B, Al-Rfou R, Skiena S. Deepwalk: Online learning of social representations[C]//Proceedings of the 20th ACM SIGKDD international conference on Knowledge discovery and data mining. 2014: 701-710.
[3] Grover A, Leskovec J. node2vec: Scalable feature learning for networks[C]//Proceedings of the 22nd ACM SIGKDD international conference on Knowledge discovery and data mining. 2016: 855-864.
[4] Tang J, Qu M, Wang M, et al. Line: Large-scale information network embedding[C]//Proceedings of the 24th international conference on world wide web. 2015: 1067-1077.
[5] Wang D, Cui P, Zhu W. Structural deep network embedding[C]//Proceedings of the 22nd ACM SIGKDD international conference on Knowledge discovery and data mining. 2016: 1225-1234.
[6] Wang J, Huang P, Zhao H, et al. Billion-scale commodity embedding for e-commerce recommendation in alibaba[C]//Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. 2018: 839-848.
[7] Dong Y, Chawla N V, Swami A. metapath2vec: Scalable representation learning for heterogeneous networks[C]//Proceedings of the 23rd ACM SIGKDD international conference on knowledge discovery and data mining. 2017: 135-144.
作者简介
庄万青,腾讯游戏高级研究员,负责游戏玩家行为序列建模,毕业于华南理工大学计算机学院。
以上是关于几种常见的Graph Embedding方法的主要内容,如果未能解决你的问题,请参考以下文章
Graph Embedding基础 图表示学习 什么是Graph Embedding
Graph Embedding:工业界常用的6种图表示学习方法
graph embedding第一篇——deepwalk and line
论文解读:(TransH)Knowledge Graph Embedding by Translating on Hyperplanes