DeepWalk
基础理论
了解过 NLP 的同学对 word2vec 应该不陌生,word2vec 通过句子中词与词之间的共现关系来学习词的向量表示,如果你忘记了,可以看看我之前的博客:
- 【word2vec】篇一:理解词向量、CBOW与Skip-Gram等知识
- 【word2vec】篇二:基于Hierarchical Softmax的 CBOW 模型和 Skip-gram 模型
- 【word2vec】篇三:基于Negative Sampling 的 CBOW 模型和 Skip-gram 模型
DeepWalk 出自论文:DeepWalk: Online Learning of Social Representations,它的思想与 word2vec 类似,从一个初始节点沿着图中的边随机游走一定的步数,将经过的节点序列视为句子。那么,从不同的起点开始的不同游走路线就构成了不同的句子。当获取到足够数量的句子(节点访问序列)后,可以使用 skip-gram 模型对每个节点学习其向量表示。这个过程如下图所示:
以下是对 DeepWalk 的一些思考与个人理解:
DeepWalk 利用类似深度优先遍历的方式将复杂的图结构转换为序列,进而实现节点的Embedding。这个遍历的过程相当于对图中的节点进行采样,捕获局部上下文信息。上图中B与D都是A与E共有的邻居,那么在经过节点B、D的随机游走序列中,节点A或者节点E出现的频率也比较高,说明节点A和E具有相似的上下文语境,那么A和E的Embedding表示也应该相似。
下面再来看个更直观的例子,如下图中的节点1、4是节点2、3共有的邻居:
那么在经过节点1、4的随机游走序列中,节点2或者节点3出现的频率也比较高,例如:
- 0,4,3
- 0,4,2
- 1,2
- 1,3
- 1,4,3
- 1,4,2
- …
那么根据 skip-gram 模型的思想,节点2,3的局部上下文语境比较相似,于是最终学习到的节点2、3的Embedding表示也就比较相似。这也意味着,当两个节点共