其他分享
首页 > 其他分享> > Graph Embedding-DeepWalk

Graph Embedding-DeepWalk

作者:互联网

一言以蔽之,DeepWalk是在graph上,通过随机游走来产生一段定长的结点序列,并将其通过word2vec的方式获得各个结点的embedding的算法。
DeepWalk一共涉及以下几个内容:

DeepWalk 使用图中节点与节点的共现关系来学习节点的向量表示。在描述节点与节点的共现关系的过程中,DeepWalk 给出的方法是使用随机游走 (RandomWalk) 的方式在图中进行节点采样。

随机游走

随机游走(Random Walk)是一种数学统计模型,它是一连串的轨迹所组成,其中每一次都是随机的。它能用来表示不规则的变动形式,如同一个人酒后乱步,所形成的随机过程记录.通常,随机游走一个简单的随机游走的例子是在整数在数轴上的随机游走,它从0开始,然后每一步以相同的概率移动+1或−1, 那么在图上的随机游走也按等概率的原则,随机的选取当前结点的邻居结点作为下一次访问的结点:所以理论上,RandomWalk 是一种可重复访问已访问节点的深度优先遍历算法。给定当前访问起始节点,从其邻居中随机采样节点作为下一个访问节点,重复此过程,直到访问序列长度满足预设条件。

DeepWalk的随机游走

这里贴一张DeepWalk的算法
uploading-image-790981.png
算法包含几个重要的参数:

具体实现层面:

我们可以把\(\gamma\)并行化处理,其次,算法中的shuffle(V)的话其实就是把所有的node都全部打乱,然后挨个的遍历一遍并做随机游走。在随机游走的时候,我们可能并不能保证每次都能拿到规定的长度,这时候可以不用管,直接break掉,有多少算多少,因为这些后面可以交给Word2Vec进行处理。
模拟一下随机游走:

def deepwalk_walk(walk_length, start_node):
        walk_seq = [start_node]

        while len(walk_seq) < walk_length:
            curr_node = walk[-1]
            cur_node_nbrs = list(G.neighbors(curr_node))
            if len(cur_node_nbrs) > 0:
                walk.append(random.choice(curr_node_nbrs))
            else:
                break
        return walk_seq

Word2Vec的训练方式

拿到结点序列之后,我们将其看作是一段自然语言序列,这样就可以顺其自然的送到W2V里面train。

标签:node,结点,DeepWalk,Graph,walk,随机,Embedding,游走
来源: https://www.cnblogs.com/zhouyc/p/14074831.html