论文笔记:Node2Vec-Scalable Feature Learning for Networks
一、简介
node2vec是2016年提出的Graph Embedding表示方式,其训练速度快,并开放了源码,而且表示效果还不错,所以挺火。本质上来说,node2vec其实是基于DeepWalk的改进,所以要想了解node2vec,就需要先了解DeepWalk。这里对DeepWalk仅做简要介绍,详细内容还需要阅读原论文DeepWalk。
二、DeepWalk
2.1 DeepWalk简介
输入的是一个网络,其中颜色相同的结点表示拓扑关系上更为相近的结点。输出的是每个节点的二维向量,每个节点对应的向量关系如图所示。我们可以从这个图看出,越是网络结构相近的点,其对应的二维向量在二维空间上距离与近。
这其实是一个降维的过程,但不是传统意义上的降维,而是将图结构(一个复杂的结构)降到易于表示的低维度。具体来说,就是将网络中的拓扑结构表示成一个低维向量,这个向量可以反应结点间的连接情况。
2.1 那么,如何得到向量表示呢?
DeepWalk是这么做的:
- 针对网络中的每一个结点进行遍历,然后做随机游走算法,游走过程中得到了一系列有序结点。将这个节点序列类比于传统文本处理中的文章中的句子,而序列中的结点则可以类比句子中的单词。
- 有了上面的类比,我们便可以借助文本处理中的word embedding思想,对其进行训练,得到对应的向量。
不难看出,上面的过程简单来说,可以分为两步:第一步随机游走得到节点序列,第二步SkipGram得到向量表示。注意,这里的随机游走其实是类似深度优先遍历的过程。
2.2 DeepWalk的缺点
理解了DeepWalk的原理之后,我们不难想出它的缺点。
- 从随机游走来说,DeepWalk是简单的深度优先搜索的过程,深度优先往往增加了复杂度,而且没有考虑广度优先带来的周围邻居结构的影响,这里可以进行改进
- 原文章中没有提出一个明确的优化目标函数,成为其他学者认为不严谨的地方