从Deepwalk到Node2vec

本文探讨了Deepwalk算法的局限性,并介绍了Node2vec的游走框架,它结合BFS和DFS策略以捕捉图中的同质关系和拓扑关系。Node2vec通过调整参数p和q控制游走策略,当p=q=1时退化为Deepwalk。实验表明,参数选择对模型性能(如F1-score)影响显著,但能取得优于Deepwalk的性能。文章还简要提及了Node2vec的实现代码。
摘要由CSDN通过智能技术生成

上篇谈到了deepwalk,整体流程就是按均匀分布从当前节点走到下一个节点,从而采样到一条条“句子”,但是这样采样方式一定是对的吗?边上是否有权重影响呢?走回头路的概率也是等于选择其他邻居节点的.为了使得walk的更合理,node2vec这篇论文给了一个通用的“游走”框架.同样是通过游走产生句子,然后通过w2v产出向量.

DOTA:大有可为的GNN:DeepWalk

Node2vec

v2-e083fa890b4d6e29e2afff6c477eac9c_b.jpg

BFS和DFS大家再熟悉不过,node2vec就是结合了这两种方式进行采样.为什么要结合这两种方式呢?因为对于图而言,我们希望每个节点最终学到的向量既表达了同质关系也表达了拓扑关系.比如上图中u和S1是相似的,因为他们之间空间上相近.又比如u和S6是相似的,虽然u和S6之间距离较远,但是因为u和S6周围都围绕了4个节点,所以他们从拓扑上看是类似的.所以如何才能让学到的向量能表达这种信息呢?node2vec就提出了一种随机游走的框架,如下图:

v2-1d9823dee2126c08bb82b9880196849f_b.jpg

每个边都有权重,当前节点的所有边权重归一化后就是当前节点到其他节点的概率.从上图中我们可以看到,一共有3种类型的边权重,第一种是<v,t>表示当前节点v和上一个节点之间的边权重为1/p,第二种是<v,x1>表示当前节点和临接上一个节点t的边权重为1,第三种就是<v, other>表示与其他节点的边权重为1/q.聪明的炼丹师已经发现,只要p=q=1,就是deepwalk.通过这种框架,如果p在0~1表示算法偏向于走回头路,如果p>1则算法偏向于远离上一个节点.同理如果q在0~1之间,则算法偏向于选择远离t,否则倾向于接近t.整个算法表示如下所示:

v2-02c6cf868c177da796a8bc6f2db167e7_b.jpg

虽然有了一个通用框架是好事,但是我们需要调的参数也多了,我们看看实验中调了哪些参数,如下所示:

v2-abfdee20c709f3da5df9dec549c4002d_b.jpg

我们可以发现,参数对F1-score的影响较大,因此要用的炼丹师们要耐心去调.从实验结果来看,node2vec也表现较优.

v2-c0aec60d79a7d3e5a98f35fdf7ee54c4_b.jpg

代码

这里代码相较于deepwalk要稍微复杂一些,图用networkx进行构建,构建过程不再赘述.

# 核心代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值