2016 KDD | node2vec:Scalable Feature Learning for Networks
摘要
对网络中的节点和边缘的预测任务需要在学习算法使用的工程功能方面进行仔细的努力。在更广泛的代表性学习领域的最新研究通过学习本身来实现自动化预测的重大进展。但是,当前的特征学习方法不足以捕获网络中观察到的连接模式的多样性。
因此,作者提出了node2vec,一个学习网络中节点连续特征表示的算法框架。通过学习节点到低维特征空间的映射,该映射最大限度地保留节点的网络邻域。定义一个灵活的节点网络邻域概念,设计一个有偏差的随机游走过程,有效地探索不同的邻域。node2vec在多个不同领域的真实网络中,在多标签分类和链接预测方面的有效性。
模型
在Node2vec论文中指出,通过随机游走获取的节点序列不能同时反应图的同质性(homophily)和结构对等性(structural equivalence ),而这两种特性分别是由DFS和BFS体现的。
Node2vec依然延续了Deepwalk采用随机游走的方式获取顶点的近邻序列,Node2vec不同的是采用的是一种有偏的随机游走。
Node2vec引入两个超参数p和 q来控制随机游走的策略。如上图所示,假设当前随机游走顶点t 经过边 ( t , v ) 到达顶点v ,顶点v的下一个访问顶点x 的概率根据下面公式计算得到,公式6中dtx 为下一个访问顶点x 和当前顶点v 的上一个顶点t 之间的距离
p:
p值大:倾向不回溯,降低了2-hop的冗余度
p值小:倾向回溯,采样序列集中在起始点的周围
q:
q>1: BFS-behaviour,local view
q<1:DFS-behaviour
BFS、DFS、搜索策略
"""
BFS算法
数据结构:queue (队列)
FIFO 先进先出
BFS具有结构相似性 (structural equivalence)
"""
from collections import deque
def iter_bfs(G,s,S=None):
S,Q = set(),deque()
Q.append(s)
while Q:
u = Q.popleft()
if u in S: continue
S.add(u)
Q.extend(G[u])
yield u
"""
DFS算法
数据结构: stack(栈)
先进先出
DFS具有同质相似性、社群相似性(homophily)
"""
def iter_dfs(G,s):
S,Q = set(),[]
Q.append(s)
while Q:
u = Q.pop()
if u in S: continue
S.add(u)
Q.extend(G[u])
yield u
采样技巧
采样与LINE模型的方式相同,可以参考:https://blog.csdn.net/weixin_42486623/article/details/124760130
优化目标
设
f
(
u
)
f(u)
f(u)是将顶点
u
u
u映射为embedding向量的映射函数,对于图中每个顶点
u
u
u,定义
N
s
(
u
)
N_s(u)
Ns(u)为通过采样策略
S
S
S采样出的顶点
u
u
u的近邻顶点集合。
node2vec优化的目标是给定每个顶点条件下,令其近邻顶点(如何定义近邻顶点很重要)出现的概率最大。
为了将上述最优化问题可解,文章提出两个假设:
条件独立性假设
假设给定源顶点下,其近邻顶点出现的概率与近邻集合中其余顶点无关。
特征空间对称性假设
一个顶点作为源顶点和作为近邻顶点的时候共享同一套embedding向量。(对比LINE中的2阶相似度,一个顶点作为源点和近邻点的时候是拥有不同的embedding向量的) 在这个假设下,上述条件概率公式可表示为
根据以上两个假设条件,最终的目标函数表示为:
其中:
Z
u
Z_u
Zu是归一化因子,由于计算代价高,所以采用负采样技术优化。
实验
参考
https://zhuanlan.zhihu.com/p/39105752
https://blog.csdn.net/weixin_41362649/article/details/111190249