图嵌入的几种方法

  • Post author:
  • Post category:其他


目前的图算法一般指:

1.数据结构中的,最小生成树(Prim算法),最短路径(迪杰斯特拉,佛洛依德),拓扑排序,关键路径

2.概率图模型,涉及图的表示

3.图神经网络,包括图嵌入(graph embedding(基于随机游走))和GCN(基于邻居汇聚)两部分

图嵌入:

将图中的节点以低维稠密的形式表达,要求在原始图中相似的节点在地位表达空间也接近。得到的表达向量可以用于下游任务

主要有:deepWalk



deepWalk算法

在这里插入图片描述

首先从顶点矩阵选取一个样本,假设n个顶点

构造一个二叉树,应该是类似w2v里的哈夫曼树,为了快速寻找到最终的结果。

循环num_walks次:

遍历每个节点,进行深度随机游走,每个节点获得walk_length作为序列。

这里的深度随机游走,是可重复访问已访问节点。

获得所有节点num_walks次的深度随机游走的序列共num_walks*n个序列

将这些序列作为语料放入w2v中使用skim_gram训练。

deepWalk只适用于无权图,因为它是随机选取领域进行DFS.



LINE:

LINE也是基于领域相似假设的方法,可以看作是使用BFS构造领域的算法,还可以使用在带权图。

在这里插入图片描述

对于这样一个图,如何衡量两个点的相似度?

一:两个点直接相连

二:有一些共同的相连的节点

对于第一个两个直接相连,我们可以用一阶相似来度量。



一阶相似度

首先需要了解一下

散度

的概念

一阶相似度:

在这里插入图片描述

使用权重的分布来去拟合两个点之间的联合概率分布,使用散度来度量两者概率分布之间的相似情况。

注:一阶相似度只能用于无向图。



二阶相似度:

在这里插入图片描述

NODE2VC:

其实和deepwalk算法非常相似,是deepwalk算法的一种扩展。NODE2VEC是将DFS和BFS结合起来的随机游走,通过两个超参数,p和q进行控制游走。

算法流程:

在这里插入图片描述

这里面其实主要的还是如何进行有偏采样,即根据顶点邻居节点不同的权重,进行采样。


首先

,遍历所有顶点,对当前顶点的邻居节点构建对应的采样accept和alias表,此时accept表里全是1,alias表全为0,生成alias_node字典存放aceept和alias表.


然后

,遍历所有的边,(node1,node2),找到node2的所有邻居顶点,按照邻居顶点与node1的关系,给以不同的权重,如果与node1相连,给1,如果邻居顶点是node2,给1/p,如果邻居顶点与node1无关,与node2有边,则给1/q;这样就获得了顶点node2与邻居顶点的权重列表,依据权重列表创建采样表accept和alias表,生成alias_edges字典;


Alias算法采样


总共迭代num_walks次:


接着

,遍历每个顶点进行随机游走:当当前的游走序列只有一个顶点时,对当前顶点找到它的所有邻居顶点,对邻接顶点依照alias_node表进行有偏采样

当当前游走序列超过1个顶点,则将序列中最近访问的点对应的边,依照alias_edges字典进行采样

最后生成当前node的随机游走序列


最后

:将迭代了num_walks次,生成的num_walks*num(v)个随机游走序列,放入w2v进行训练,生成各个顶点的向量表示。

(未完待续~)

参考链接:


https://zhuanlan.zhihu.com/weichennote



版权声明:本文为Rudy95原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。