Node2Vec 算法
先决条件:Word2Vec
词嵌入:它是一种语言建模技术,用于将词映射到实数向量。它表示具有多个维度的向量空间中的单词或短语。词嵌入可以使用各种方法生成,如神经网络、共生矩阵、概率模型等。
Word2Vec:它由生成词嵌入的模型组成。
Node2Vec:一种节点嵌入算法,它根据图中的随机游走计算节点的向量表示。图的邻域节点也通过深度随机游走进行采样。该算法执行有偏差的随机游走过程,以便有效地探索不同的邻域。
它基于与 Word2Vec 类似的原理,但我们在这里创建节点嵌入而不是词嵌入。
直觉:
Node2Vec 框架基于学习图中节点的连续特征表示并保留从相邻 100 个节点获得的知识的原理。让我们了解算法的工作原理。假设我们有一个图,其中有几个相互连接的节点创建了一个网络。因此,Node2Vec 算法学习网络中每个节点的密集表示(比如 100 个维度/特征)。
该算法建议,如果我们通过应用 PCA 在二维图中绘制每个节点的这 100 个维度,那么该低维图中两个节点的距离将与它们在给定网络中的实际距离相同。
通过这种方式,即使您在低维空间中表示它们,该框架也可以最大限度地保留相邻节点的可能性。 (如图1所示)
现实生活中的例子:
让我们以提供给我们的文本数据为例,详细了解其工作原理。 Node2Vec 框架建议随机游走图中的一系列节点可以视为句子。该图中的每个节点都被视为一个独特的单词,并且网络中的每次随机游走都被视为一个句子。
通过创建和使用Node2Vec 框架学习的“连续词袋模型” ,它可以通过搜索给定词的邻居来预测下一组可能的词。这就是 Node2Vec 算法的强大之处。
Node2Vec 算法:
node2vecWalk (Graph G' = (V, E, π), Start node u, Length l):
Inititalize walk to [u]
for (walk_iter = 1 to l):
curr = walk[−1]
Vcurr = GetNeighbors(curr, G')
s = AliasSample(Vcurr, π)
Append s to walk
return walk
Learn_Features (Graph G = (V, E, W)):
Dimensions -> d
Walks per node -> r
Walk length -> l
Context size -> k
Return -> p
In-out -> q
π = PreprocessModifiedWeights (G, p, q)
G' = (V, E, π)
Initialize walks = 0
for (iter = 1 to r):
for (all nodes u ∈ V):
walk = node2vecWalk(G', u, l)
Append walk to walks
f = StochasticGradientDescent(k, d, walks)
return f
应用:
- 社交媒体网络:让我们将网络中的每个节点视为“用户”,将相邻节点视为该用户的“朋友”。每个节点都有一组涉及他们喜欢和不喜欢的特征。因此,通过使用 Node2Vec 框架,我们可以轻松识别用户最亲密的朋友。
- 推荐系统网络:推荐系统根据两个“用户”(节点)的特征集的相似性为他们提供相同的产品推荐。通过这种方式,这些推荐系统向一组类似的节点提供类似的推荐,从而使其高效。