我一直在阅读关于node2vec嵌入算法的信息,我有点困惑它的工作方式。
作为参考,node2vec由p和q参数化,并通过模拟来自节点的一堆随机游走而工作,并且仅在这些游走上运行word2vec嵌入作为“句子”。通过以不同的方式设置p和q,可以在模拟阶段获得更多的BFS或更多的DFS类型的随机游动,从而在嵌入中捕获不同的网络结构。
设置q> 1会给我们带来更多的BFS行为,因为步行样本由一个小范围内的节点组成。我感到困惑的是,该论文说这等同于嵌入彼此具有相似结构特性的节点。
我不太了解它是如何工作的。如果我的网络中有两个单独的星形/集线结构节点,它们为什么相距遥远,为什么要根据来自这两个节点的随机游动进行嵌入,以使这两个节点靠得很近?
答案 0 :(得分:0)
在阅读了这篇文章之后,这个问题也引起了我的注意,从经验来看,确实如此。
我假设您参考了显示下图的论文部分,指出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
出现在周围环境相同的散步中。由于它们的周围环境相似,这意味着它们的上下文类似,并且如上所述,上下文==相似的嵌入。
一个人可能还会问订单如何?好顺序并不重要,因为跳过语法模型使用窗口大小从每个句子中生成配对,因此在我提供的链接中您可以进一步理解该概念。
因此,最重要的是,如果您可以创建行走,从而为两个节点创建相似的上下文,则它们的嵌入将相似。