Graph2vec

Graph2vec

出自MLGWorkshop 2017的《graph2vec: Learning Distributed Representations of Graphs

问题

现如今的很多研究集中在如何表示图谱中子结构的分布式表示,如节点、子图等。但是在对图的分类和聚类这些知识图谱的分析任务中,如果采用现有的手段,我们就需要得到整个图谱的表示。因此在处理这些分析任务时,图核(Graph Kernel)方法更加有效。

Graph Kernel 方法将机器学习中的核方法(Kernel Methods)拓展到了图结构数据上,是一类计算图与图之间相似度的方法。再利用图核方法比较两个图的相似度时,需要将两个图用一定方法(如最小路径,随机游走,小图等)分解成更小的子结构,再通过定义一个核函数来的到两个图的相似度(如计算两个图中相似的子结构个数)

为什么是Graph Kernels而不是用Graph Embedding?

因为后者将结构化数据降维到向量空间时,损失了大量结构化信息。而前者直接面向图结构的数据,保留了核函数高效计算的优点,又包含了结构化的信息。

文章提出,这种方式有两种存在的问题:

1.不能得到显式的图嵌入,不利于计算和学习。

2.“人为”定义的特征(路径,步伐)不具有概括性。

这些“人为”的特征应用在大型数据集上时,会产生高维的,稀疏的,不光滑的表示。

解决手段

为了解决上述的问题,文章提出了将word2vec中的Skipgram模型引入到了图谱中。再word2vec中,Skipgram的核心思想是出现在相似上下文中的单词往往具有相似的含义,因此应具有相似的矢量表示

之前讲过的Doc2vec的也实在此基础上提出的。

根据文章中graph2vec的思想,我们可以把一个图谱看作是一个文件(document),把图谱中的所有节点(node)周围的有根子图(rooted subgraph)看作是词(words)。换句话说,有根子图构成图谱的方式和词构成句子或段落的方式相同。具体形式如下:

为什么选用有根子图(rooted subgraph)

1.与节点相比,子图是一种更有序的结构;

2.与步长和路径相比,有根子图能够更好的捕获图谱中的非线性特征。因其具有图核的特性。(作者引用了一些实验结果来证明核方法能够更好的捕捉非线性特征)

算法

graph2vec

其主要算法流程如下:

如何提取有根子图?

上面算法中的第8行用到了一个提取子图的函数GetWLSubgraph(n,Gi,d)。

文章中对这个函数给出了比较详细的解释,一个简单的例子。

如何进行负采样?

我们很容易能够看出来,算法一中的学习过程是非常昂贵的,因为整个子图词汇表会非常大。因此文章中采用了负采样的方法提高效率。即在训练图 Gi时,引入不属于Gi 的子图集 

c=sg1,sg2,...,当然 c\in SGvocab

如何进行优化?

使用随机梯度下降算法(SGD)来优化算法一9、10两行的参数;

使用方向传播算法来估算导数;

学习率\alpha 按照经验调整。

总结

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容