推荐系统(四)Graph Embedding之Node2Vec

在之前的推荐系统(二)Graph Embedding之DeepWalk推荐系统(三)Graph Embedding之LINE分别提到通过DFS和BFS的方法来遍历user behavior图结构,但这两种方法的缺陷也比较明显:

  1. DeepWalk:DFS,只去关注图的某一条路径上的节点,却不关注某个节点周围的环境组成,
  2. 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 i1个节点,且为 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=xci1=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 i2个节点, 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

参考

  1. Node2Vec代码实现
  2. Node2vec - Scalable Feature Learning for Networks
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值