我一直在阅读node2vec嵌入算法,但有点困惑。
作为参考,node2vec由p和q参数化,并通过模拟来自节点的一堆随机游走,并仅在这些游走上运行word2vec嵌入作为“句子”来工作。通过以不同方式设置p和q,您可以在模拟阶段获得更多的BFS或更多的DFS类型的随机游动,从而在嵌入中捕获不同的网络结构。
设置q> 1会给我们带来更多的BFS行为,因为步行样本由一个小范围内的节点组成。我感到困惑的是,该论文说,这等同于嵌入彼此具有相似结构特性的节点。
我不太了解它是如何工作的。如果我的网络中有两个相互独立的星形/集线结构节点,为什么基于来自这两个节点的随机游动进行嵌入将两个节点靠在一起放置?
最佳答案
阅读这篇文章后,这个问题也引起了我的注意,从经验来看,确实如此。
我假设您参考了显示下图的论文部分,指出u
和s6
生成的嵌入在空间中将非常相似:
要了解为什么会这样,首先我们必须了解skip-gram model如何嵌入信息,这是消耗随机游走的机制。
跳过语法模型最终会为可以在相似上下文中出现的令牌生成类似的嵌入-但是从跳过语法模型的角度来看,这实际上意味着什么?
如果我们想嵌入结构上的等效性,我们将倾向于使用类似于DFS的行走(此外,我们还必须对跳跃语法模型使用足够的窗口大小)。
所以随机漫步看起来像
1. s1 > u > s4 > s5 > s6 > s8
2. s8 > s6 > s5 > s4 > u > s1
3. s1 > s3 > u > s2 > s5 > s6
4. s7 > s6 > s5 > s2 > u > s3
.
.
n. .....
将会发生很多步行,其中
u
和s6
出现在周围环境相同的步行中。由于它们的周围环境相似,这意味着它们的上下文相似,并且如上所述,上下文==相似的嵌入。有人可能会进一步问订单呢?好顺序并不重要,因为跳过语法模型使用窗口大小从每个句子中生成配对,因此在我提供的链接中您可以进一步理解该概念。
因此,最重要的是,如果您可以创建将为两个节点创建相似上下文的行走,则它们的嵌入将相似。
关于machine-learning - node2vec如何工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53488264/