大家好,欢迎来到IT知识分享网。
不同于基于DFS邻域的DeepWalk和基于BFS邻域的LINE。node2vec是一种综合考虑DFS邻域和BFS邻域的graph embedding方法,可以看作是deepwalk的一种扩展,是结合了DFS和BFS随机游走的deepwalk。
node2vec的同质性和同构性
(1)网络的同构性是指距离近的节点的Embedding的结果应相似,如下图的 u 和 s 1 u和s_1 u和s1;
如何使Graph Embedding的结果能够表达网络的“结构性”?让随机游走的过程更倾向于BFS(广度优先遍历)。因为在执行BFS的过程中,相当于对周边节点进行扫描,当前节点是“局部中心节点”还是边缘节点,其生成的序列包含的节点的数量和顺序必然是不同的。从而让最终的Embedding抓取到更多结构性信息。
(2)网络的“同质性”指结构上相近的节点Embedding的结果应该相似,如下图中的 u 和 s 6 u和s_6 u和s6。
如何使Graph Embedding的结果能够表达网络的“同质性“?需要让随机游走的过程更倾向于DFS,因为DFS更有可能通过多次跳转,游走到远方的节点上,但无论怎样,DFS的游走更大概率会在一个大的集团内部进行,这就使得一个集团或者社区内部的节点的Embedding更为相似,从而更多地表达网络的“同质性”。
在DeepWalk中,使用DFS随机游走在图中进行节点采样,使用Word2Vec在采样的序列学习图中节点的向量表示,无法灵活地捕捉这两种关系。
node2vec的改进的基本想法就是,通过节点间的跳转概率让Embedding 的结果兼顾同质性和结构性(上图中的蓝色箭头和红色箭头)。
node2vec在推荐系统中的思考
同质性相同的物品很可能是同品类、同属性,或者经常被一同购买的商品,而结构性相同的物品则是各品类的爆款、各品类的最佳凑单商品等拥有类似趋势或者结构性属性的商品。毫无疑问,二者在推荐系统中都是非常重要的特征表达。由于node2vec的这种灵活性,以及发掘不同图特征的能力,甚至可以把不同node2vec生成的偏向“结构性”的Embedding结果和偏向“同质性”的Embedding结果共同输入后续的深度学习网络,以保留物品的不同图特征信息。
node2vec的基本思想
模型
给定网络图 G ( V , E ) G(V,E) G(V,E),node2vec
的目标是学习映射 f : V → R d f: \mathbf V \rightarrow \mathbb R^d f:V→Rd ,该映射将每个顶点 v v v映射到低维空间表达 w u ⃗ \vec{\mathbf w_u} wu,该低维空间表达用于下游任务。这里图 G G G可以是有向图也可以是无向图,可以是无权图也可以是带权图。
对于每个节点 u ∈ V u \in V u∈V, 定义 N S ( u ) ⊂ V N_{S}(u)\subset V NS(u)⊂V作为通过邻域采样策略 S S S生成节点 u u u的网络邻域。类似 SkipGram
,node2vec的优化目标是:给定顶点 u u u ,在低维空间中最大化其邻居 N S ( u ) ⊂ V N_{S}(u)\subset V NS(u)⊂V 的对数似然函数。即:
max f ∑ u ∈ V l o g P r ( N S ( u ) ∣ f ( u ) ) . (1) \max_{f} \, \, \, \, \, \, \, \sum_{u \in V}logPr(N_S(u) | f(u)). \tag{1} fmaxu∈V∑logPr(NS(u)∣f(u)).(1)
为了使优化问题易于处理,论文做了两个标准假设:
(1)条件独立性假设。给定源顶点,邻域节点出现的概率相互独立:
P r ( N S ( u ) ∣ f ( u ) ) = ∏ n i ∈ N S ( u ) P r ( n i ∣ f ( u ) ) Pr(N_S(u) | f(u)) = \prod_{n_i \in N_S(u)}Pr(n_i|f(u)) Pr(NS(u)∣f(u))=ni∈NS(u)∏Pr(ni∣f(u))
(2)特征空间对称性假设。在特征空间中,源节点与邻节点之间存在对称效应。也就是说作为源节点和作为邻节点时候共享同样的embedding向量(回想LINE定义的二阶相似度,一个顶点作为源节点和邻节点时是用不同的embedding向量表示)因此,node2vec将每个源邻节点对的条件似然建模为一个softmax单元,并由它们的特征点积进行参数化:
P r ( n i ∣ f ( u ) ) = e x p ( f ( n i ) . f ( u ) ) ∑ v ∈ V e x p ( f ( v ) . f ( u ) ) . Pr(n_i|f(u)) = \frac{exp(f(n_i).f(u))} {\sum_{v \in V}exp(f(v).f(u))}. Pr(ni∣f(u))=∑v∈Vexp(f(v).f(u))exp(f(ni).f(u)).
根据假设(1)(2),式(1)中的目标简化为:
max f ∑ u ∈ V [ − l o g Z u + ∑ n i ∈ N S ( u ) f ( n i ) . f ( u ) ] . (2) \max_{f} \, \, \, \, \, \, \, \sum_{u \in V}[-log Z_u + \sum_{n_i \in N_{S}(u)}f(n_i).f(u)]. \tag{2} fmaxu∈V∑[−logZu+ni∈NS(u)∑f(ni).f(u)].(2)
其中, Z u = ∑ v ∈ V e x p ( f ( u ) . f ( v ) ) Z_u = \sum_{v \in V}exp(f(u).f(v)) Zu=∑v∈Vexp(f(u).f(v))是归一化因子,计算代价高,所以采用负采样技术优化。
采样策略
采样策略的目标是:让Embedding 的结果兼顾同质性和结构性。node2vec
设计了一种灵活的邻居采样策略,该策略使得我们能够平滑的在 BFS
和 DFS
之间采样。
如下图所示为node2vec算法从节点 t t t跳转到节点 v v v,在从节点 v v v跳转到周围各点的跳转概率。
假设从某顶点出发开始随机游走,第 i − 1 i-1 i−1步走到当前顶点 v v v,要探索第 i i i步的顶点 x x x,其跳转概率为:
P ( c i = x ∣ c i − 1 = v ) = { π v x Z i f ( v , x ) ∈ E 0 o t h e r w i s e P(c_i = x | c_{i-1} = v) = \begin{cases} \frac{\pi_{v x}}{Z} & if (v, x) \in E \\ 0 & otherwise \end{cases} P(ci=x∣ci−1=v)={
Zπvx0if(v,x)∈Eotherwise
其中, E E E是图中边的集合, ( v , x ) (v,x) (v,x)表示顶点和 v , x v,x v,x之间的边, π v x \pi_{vx} πvx 表示从节点 v v v跳转到下一个节点 x x x的概率, Z Z Z是归一化常数。
随机游走的最简单的一个方式是,令 π v x = w v x \pi_{vx} = w_{vx} πvx=wvx, Z Z Z 是权重之和。按照这个转移概率进行随机游走,但是无法控制BFS和DFS的倾向性。
node2vec用两个参数 p 和 q p和q p和q定义了一个二阶随机游走,以控制随机游走的策略。
所谓的二阶随机游走,意思是说下一步去哪,不仅跟当前顶点的转移概率有关,还跟上一步顶点相关。
假设当前随机游走经过边 ( t , x ) (t,x) (t,x)到达顶点 v v v,现在要决定从节点 v v v跳转到下一个节点 x x x,需要依据边 ( v , x ) (v,x) (v,x)上的跳转概率 π v x \pi_{vx} πvx 。即:
π v x = α p q ( t , x ) ⋅ w v x \pi_{vx} = \alpha_{pq}(t,x) \cdot w_{vx} πvx=αpq(t,x)⋅wvx
其中, w v x w_{vx} wvx是顶点 v 和 x v和x v和x之间的边权; α p q ( t , x ) \alpha_{pq}(t,x) αpq(t,x)是修正系数,修正系数定义如下:
α p q ( t , x ) = { 1 p i f d t x = 0 1 i f d t x = 1 1 q i f d t x = 2 \alpha_{pq}(t, x) = \begin {cases} \frac{1}{p} & if \,\,d_{tx} = 0 \\ 1 & if \,\,d_{tx} = 1 \\ \frac{1}{q} & if \,\,d_{tx} = 2 \\ \end {cases} αpq(t,x)=⎩⎪⎨⎪⎧p11q1ifdtx=0ifdtx=1ifdtx=2
d t x d_{tx} dtx表示节点 t t t与 x x x之间的最短路径距离。注意, d t x d_{tx} dtx必须是{0, 1, 2}中的一个。当 d t x = 0 d_{tx}=0 dtx=0表示又回到顶点 t t t;当 d t x = 1 d_{tx}=1 dtx=1,表示 x 和 t x和t x和t直接相连;其他情况 d t x = 2 d_{tx}=2 dtx=2。参数 p 和 q p和q p和q共同控制着随机游走的倾向性。
(1)返回参数(return parameter):p,控制了重新访问上一步已访问顶点的概率
- 一个较大的值 p > m a x ( q , 1 ) p>max(q,1) p>max(q,1)使得接下来访问的顶点 x x x 不大可能是上一步已访问的顶点 t t t (除非顶点 v v v 除了 t t t之外再也没有其它邻居)。
- 一个较小的值 p < m a x ( q , 1 ) p<max(q,1) p<max(q,1) 将使得接下来访问的顶点 x x x很可能是上一步已访问的顶点 t t t。这种策略使得随机游走序列尽可能地留在源点 u u u的局部区域。node2vec就更注重表达网络的结构性。
(2)内外参数(In-out parameter):q,控制了探索的方向是向内搜索还是向外搜索。
- 如果 q > 1 q>1 q>1则 x x x倾向于向 t t t靠拢,这种策略将采样局限在一个很小的范围,从而获得网络的一个局部视图,类似于
BFS
的行为。 - 如果 q < 1 q<1 q<1则 x x x倾向于远离 t t t,这种策略将鼓励采样向外拓展,从而获得网络的一个宏观视图,类似于
DFS
的行为,node2vec就更加注重表达网络的同质性。
但是这种策略和BFS、DFS
本质上是不同的:我们的策略采样的结点与源点的距离并不是严格相等的(BFS
)、也不是严格递增的 (DFS
)。另外我们的策略易于预处理,且采样效率很高。
在论文中试验部分,作者对 p 和 q p和q p和q的设置一般是2的指数,比如 1 2 , 1 2 , 1 , 2 , 4 {\frac{1}{2},\frac{1}{2},1,2,4} 21,21,1,2,4。
学习算法
node2vec经过采样得到序列,剩下的步骤于deepwalk基本一样。用word2vec去学习顶点的embedding向量
Node2Vec
算法主要包含两个过程:Learn Feature
过程、node2vecWalk
过程。细节如下:
应用
代码来源:GraphEmbedding
使用教程:
将项目clone到本地,依次执行:
python setup.py install cd examples python deepwalk_wiki.py
接口:
G=nx.read_edgelist('../data/wiki/Wiki_edgelist.txt', create_using = nx.DiGraph(), nodetype = None, data = [('weight', int)])#read graph model = Node2Vec(G, walk_length = 10, num_walks = 80,p = 0.25, q = 4, workers = 1)#init model model.train(window_size = 5, iter = 3)# train model embeddings = model.get_embeddings()# get embedding vectors
参考:
node2vec: Scalable feature learning for
深度学习推荐系统中各类流行的Embedding方法(下)
Node2Vec
【Graph Embedding】node2vec:算法原理,实现和应用
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/148834.html