在之前的推荐系统(二)Graph Embedding之DeepWalk和推荐系统(三)Graph Embedding之LINE分别提到通过DFS和BFS的方法来遍历user behavior图结构,但这两种方法的缺陷也比较明显:
- DeepWalk:DFS,只去关注图的某一条路径上的节点,却不关注某个节点周围的环境组成,
- LINE:BFS,和DeepWalk相反,过多关注节点周围环境,而没有探索图的特征。
为了解决以上两个问题,本篇博客介绍的Node2Vec算法通过改变图遍历的方式来兼容DFS(关注结构相似节点)和BFS(关注同质节点)。
关键字: DFS,BFS,RandomWalk
如下是本篇博客的主要内容:
- RandomWalk的进阶实现
- Embedding向量学习
1. RandomWalk的进阶实现
首先需要声明的是,Node2Vec的建模思路和DeepWalk相同,但是在获取训练样本的算法上有两点不同,对于建模思路这里依然沿用之前介绍DeepWalk的解释图(下图),如下会介绍两个不同点。
Node2Vec与RandomWalk的不同点之一在于生成训练数据的方式不同。DeepWalk的思路是遍历图中每个节点,以某个节点为起点截取指定长度的路径构成一条训练数据,方式比较简单。Node2Vec的思路是兼顾结构性和同质性。对于结构性和同质性,可以通过参考下图来辅助理解。图中的
u
u
u节点和
s
1
s_1
s1具有同质性,因为他们直连;图中
u
u
u和
s
6
s_6
s6周围的环境比较相同,因而他们的结构性比较相似。
下面会详细介绍Node2Vec兼顾结构性和同质性的遍历图的算法思路。按照RandomWalk的固有思路,选定一个节点作为源节点,假设这个节点为
c
0
=
u
c_0=u
c0=u,目标是获取一条长度为
l
l
l的路径,且当前遍历至第
i
−
1
i-1
i−1个节点,且为
v
v
v,需要选定
c
i
c_i
ci,这时选中下一个节点为
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)=\left\{\begin{matrix} \frac{\pi_{vx}}{Z} \ \ \ \ \ if (v,x)\in E\\ 0 \ \ \ \ \ \ \ otherwise \end{matrix}\right.
P(ci=x∣ci−1=v)={Zπvx if(v,x)∈E0 otherwise
这时问题的核心落在如何定义
π
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,其中
t
t
t代表的是遍历过程中的第
i
−
2
i-2
i−2个节点,
w
v
x
w_{vx}
wvx代表的是
v
v
v和
x
x
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)=\left\{\begin{matrix} \frac{1}{p}\ \ \ \ if \ d_{tx}=0\\ 1 \ \ \ \ if \ d_{tx}=1\\ \frac{1}{q} \ \ \ \ if \ d_{tx}=2 \end{matrix}\right.
αpq(t,x)=⎩⎨⎧p1 if dtx=01 if dtx=1q1 if dtx=2
该公式的辅助图示如下,
论文提到可以通过控制
p
p
p和
q
q
q的取值就能兼顾DFS和BFS,假如
q
q
q都很小,则更倾向于DFS,因为沿着一条路径继续深入的概率较大,如果
q
q
q很大且
p
p
p很小,则更倾向于BFS,因为
t
t
t的下一个遍历节点很大概率是
t
t
t的直连节点。
Node2Vec与RandomWalk的不同点之二在于Node2Vec利用alias采样对图中的路径进行快速采样,不熟悉alias采样的小伙伴可以参考这里。经过上述操作,就能将训练数据采样好。至于代码实现,可以参考这里。
2. Embedding向量学习
第1节将训练数据已经准备好,Embedding学习依然采用类似DeepWalk模型学习的方式,通过Word2Vec模型训练得到图中每个节点的Embedding向量。Word2Vec原理可以参考NLP(一)Word2Vec原理,DeepWalk中Word2Vec的应用可以参考推荐系统(二)Graph Embedding之DeepWalk。