NODE2VEC理论到复现

简介: NODE2VEC
参考知乎: node2vec
原文链接: node2vec: Scalable Feature Learning for Networks
复现代码见: Colab

Introduction

复杂网络主要有两种任务,一网络节点的分类,通俗点说就是将网络中的节点进行聚类,我们关心的是哪些节点具有类似的属性,就将其分到同一个类别中。二是链接预测,就是预测网络中哪些顶点有潜在的关联。
前面的DeepWalk借鉴了词嵌入模型skip-gram的思想,node2vec也是如此,最重要的不同就是在游走的方式上有了改进,在得到序列后的处理方式和DeepWalk是一致的。下面主要探讨的就是这样的序列是怎样得到的,又是怎么有利于网络嵌入的。

模型

目标函数

原文中介绍了对于优化目标函数的推导,和skipgram中的思想是类似的,首先要尽可能使得节点与周围邻居节点同时出现的概率尽可能大,也就是最大化下函数(其中表示从节点映射到嵌入向量,表示的邻居节点):

同时假设观察一个邻居节点的概率独立于观察其他邻居节点的概率,这样就有:

综合起来所有节点后,优化的目标函数就为:

这和skipgram中介绍的有很大的相似性,且的计算量太大,故也是采用负采样的方法,这也是为什么说这篇论文也借鉴了skipgram的思想。其创新点主要在下面要讲的游走方式上。这样创新的游走方式能够捕捉到网络连接的多样性。

游走方式

在学习了前面的LINE模型后,会有这样一种感觉,图中的节点信息主要蕴含两种,一种是同质性信息,一种是结构相似性的信息。第一种很好理解,就是聚集在一个社群之中的节点之间有着相似的特征,因此在向量表示中也就更加贴近,而第二种就好像下图中的u节点和s6节点,都是各自社群的中心,理应具有某种程度上的相似的向量表示信息。
image.png
图的游走方式有两种,深度优先DFS广度优先BFS,学习得到的向量表示也就更能蕴含节点的同质性结构相似性特征,这其实也和LINE中的一阶二阶相似性有异曲同工的感觉。BFS倾向于在初始节点的周围游走,可以反映出一个节点的邻居的微观特性;而DFS一般会跑的离初始节点越来越远,可以反映出一个节点邻居的宏观特性。具体为什么这样两种游走方式可以得到这样的效果可以参考
node2vec添加了p和q两个参数,来控制游走的方式。
image.pngimage.png
具体来说,如图所示,当前节点是v,是由t节点走来,并在每条与v直接相连的边上定义了往四个方向的跳转概率(也即右边的公式)。
对于参数p

  • 如果 也即 ,那么采样会尽量不往回走,对应上图的情况,就是下一个节点不太可能是上一个访问的节点t,而应当是其他的x123节点。
  • 如果 也即 ,那么采样会更倾向于返回上一个节点,这样就会一直在起始点周围某些节点来回转来转去。

对于参数q

  • 如果 也即 ,也就是说在x1和x23之间选择更倾向于选择x1,x1所代表的时节点t周围的节点,也就是说游走会倾向于在起始点周围的节点之间跑,可以反映出一个节点的BFS特性。
  • 如果 也即 ,也就是说在x1和x23之间选择更倾向于选择x23,那么游走会倾向于往远处跑,反映出DFS特性

当p=1,q=1时,游走方式就等同于DeepWalk中的随机游走。

代码复现

node2vec论文源码中主要包含了main.py和node2vec.py,下图是对整个架构的概括:
伪代码
image.png
LearnFeatures需要传入图G,每个节点向量表示的维度d,每个节点要生成r条walk,每条walk长度为l,窗口大小k(类似于word2vec中的上下文窗口大小),参数p和q。
根据图G(节点,边,权重)和参数p,q生成一个Π,Π中存的是图中每个节点以及对应的下一节点概率,将该信息加在原图G上,形成一个新图G'。
接下来,迭代r此,并调用node2vecWalk对每个节点生成一个长度为l的walk(形成walk时要借助G'来决定怎么找到下一个节点),形成的r×|V|个walk整合成一个walks序列,将其输入到类似于w2v中,输出一个矩阵,即我们需要的矩阵。
node2vecWalk,需要输入带有G'信息的图,需要生成walk的节点u,需要生成的walk的长度l。
walk的list第一个是u,接下来迭代l词,每次迭代都先将walk的最后一个元素作为当前节点curr,再得到当前节点curr的周围节点以及对应的概率信息,得到最大的一个概率对应的下一个节点,将节点添加到walk并进行下一次迭代。
具体的复现:
(参考Github

复现效果

micro-F1

image.png(文中图,最上面的是node2vec)
使用0.9的数据集BlogCatalog得到的Micro-F1=0.4009

可视化

使用数据量较小的wiki数据集可视化效果:(代码见:Colab
image.png
已经可以看到部分颜色的点有明显的聚集现象。(可视化以及micro-F1的方法在deepwalk中已经介绍)

其他问题

如果是带权图:
需要采用alias_table的方法,在采样节点的时候,需要采用此方法来既考虑到边权的影响,又不至于耗费太大内存,这部分在前面学习LINE的时候已经有所说明。别名采样。应用到这里的时候,则需要先对所有的边进行一轮别名采样,将采样完成后的图再输入到模型中,此时输入的图应当视为无权无向图。

目录
相关文章
|
10月前
|
人工智能 搜索推荐 API
node-DeepResearch:开源复现版OpenAI Deep Research,支持多步推理和复杂查询的AI智能体
node-DeepResearch 是一个开源 AI 智能体项目,支持多步推理和复杂查询,帮助用户逐步解决问题。
1154 27
node-DeepResearch:开源复现版OpenAI Deep Research,支持多步推理和复杂查询的AI智能体
|
5月前
|
JavaScript Unix Linux
nvm与node.js的安装指南
通过以上步骤,你可以在各种操作系统上成功安装NVM和Node.js,从而在不同的项目中灵活切换Node.js版本。这种灵活性对于管理不同项目的环境依赖而言是非常重要的。
1248 11
|
10月前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
Node.js 是一种高效的 JavaScript 运行环境,基于 Chrome V8 引擎,支持在服务器端运行 JavaScript 代码。本文介绍如何在阿里云上一键部署 Node.js 环境,无需繁琐配置,轻松上手。前提条件包括 ECS 实例运行中且操作系统为 CentOS、Ubuntu 等。功能特点为一键安装和稳定性好,支持常用 LTS 版本。安装步骤简单:登录阿里云控制台,选择扩展程序管理页面,安装 Node.js 扩展,选择实例和版本,等待创建完成并验证安装成功。通过阿里云的公共扩展,初学者和经验丰富的开发者都能快速进入开发状态,开启高效开发之旅。
|
存储 JavaScript 搜索推荐
Node框架的安装和配置方法
安装 Node 框架是进行 Node 开发的第一步,通过正确的安装和配置,可以为后续的开发工作提供良好的基础。在安装过程中,需要仔细阅读相关文档和提示,遇到问题及时解决,以确保安装顺利完成。
906 155
|
9月前
|
资源调度 JavaScript 前端开发
前端开发必备!Node.js 18.x LTS保姆级安装教程(附国内镜像源配置)
本文详细介绍了Node.js的安装与配置流程,涵盖环境准备、版本选择(推荐LTS版v18.x)、安装步骤(路径设置、组件选择)、环境验证(命令测试、镜像加速)及常见问题解决方法。同时推荐开发工具链,如VS Code、Yarn等,并提供常用全局包安装指南,帮助开发者快速搭建高效稳定的JavaScript开发环境。内容基于官方正版软件,确保合规性与安全性。
8402 23
|
10月前
|
JavaScript 前端开发 数据可视化
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
636 2
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
|
10月前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
|
11月前
|
JavaScript
nodejs安装之npm ERR! code CERT_HAS_EXPIREDnpm ERR! errno CERT_HAS_EXPIRED reason: certificate has expired-证书错误通用问题解决方案-优雅草央千澈
nodejs安装之npm ERR! code CERT_HAS_EXPIREDnpm ERR! errno CERT_HAS_EXPIRED reason: certificate has expired-证书错误通用问题解决方案-优雅草央千澈
1970 27
|
9月前
|
数据库
【YashanDB知识库】安装共享集群时报错:YAS-05721 invalid input parameter, reason: node name invalid
【YashanDB知识库】安装共享集群时报错:YAS-05721 invalid input parameter, reason: node name invalid
|
Web App开发 JavaScript 前端开发
2024年5月node.js安装(winmac系统)保姆级教程
本篇博客为2024年5月版Node.js安装教程,适用于Windows和Mac系统。作者是一名熟悉JavaScript与Vue的大一学生,分享了Node.js的基本介绍、下载链接及简单安装步骤。安装完成后,通过终端命令`node -v`验证版本即可确认安装成功。欢迎关注作者,获取更多技术文章。
545 2
2024年5月node.js安装(winmac系统)保姆级教程