DeepWalk 和 Node2Vec
DeepWalk#
与词嵌入类似,图嵌入基本理念是基于相邻顶点的关系,将目的顶点映射为稠密向量,以数值化的方式表达图中的信息,以便在下游任务中运用。
Word2Vec根据词与词的共现关系学习向量的表示,DeepWalk受其启发。它通过随机游走的方式提取顶点序列,再用Word2Vec模型根据顶点和顶点的共现关系,学习顶点的向量表示。可以理解为用文字把图的内容表达出来,如下图所示。
DeepWalk训练图表示的整个过程大致可以分为2步:
- 随机游走提取顶点序列
- 使用skip-gram学习顶点嵌入
训练时采用层次Softmax(Hierarchical Softmax)优化算法,避免计算所有词的softmax。
https://www.hankcs.com/nlp/word2vec.html
https://www.cnblogs.com/pinard/p/7243513.html
Node2Vec#
DeepWalk不适用于有权图,它无法学习边上的权重信息。Node2Vec可以看作DeepWalk的扩展,它学习嵌入的过程也可以分两步:
- 二阶随机游走(2ndorderrandomwalk2ndorderrandomwalk)
- 使用skip-gram学习顶点嵌入
可以看到与DeepWalk的区别就在于游走的方式,在二阶随机游走中,转移概率 πvxπvx 受权值 wvxwvx 影响(无权图中wvxwvx为1):
算法通过pp、qq两个超参数来控制游走到不同顶点的概率。以下图为例,图中阐述了从上一顶点 tt 游走到当前顶点 vv,准备估计如何游走到下一个顶点的过程。
- qq:控制“向内”还是“向外”游走。若q>1q>1,倾向于访问与 tt 接近的顶点,若 q<1q<1 则倾向于访问远离 tt 的顶点。
- pp:控制重复访问刚刚访问过的顶点的概率。若设置的值较大,就不大会刚问刚刚访问过的顶点。若设置的值较小,那就可能回路返回一步。
还有一个值得注意的地方,与DeepWalk不同,Node2Vec在提取顶点序列时,不再是简单地随机取邻居顶点,而是采用了Alias算法。
Alias采样是为了加快采样速度,初始化后的采样时间复杂度为O(1)O(1),但需要存储 accept 和 alias 两个数组,空间复杂度为O(2N)O(2N)。这里简单介绍一下。
给定如下离散概率分布,有 NN个 (这里是4)可能发生的事件。每列矩形面积表示该事件发生的概率,柱状图中所有矩形的面积之和为 1。
将每个事件的发生的概率乘以 NN,此时会有部分矩形的面积大于1,部分矩形的面积小于1。切割面积大于1的矩形,填补到面积小于1的矩形上,并且每一列至多由两个事件的矩形构成,最终组成一个面积为 1×N1×N 的矩形。
再根据这个矩形,转换成相应的Accept表和Alias表。
Node2Vec在随机游走之前会进行初始化,获取 alias_nodes 和 alias_edges 。alias_nodes 存储每个顶点决定下一个访问的点所需要的alias表,alias_edges则存储由(t,v)(t,v)边访问到顶点vv的时候决定下一个访问点所需要的alias表。
alias_nodes与alias_edges的差别在于,alias_nodes不考虑当前顶点之前访问的顶点,它用在游走最开始的时候,此时没有“上一个顶点”。
关于 alias 采样算法更详细的内容,可以参考下面两个链接。
https://shomy.top/2017/05/09/alias-method-sampling/
https://blog.csdn.net/manmanxiaowugun/article/details/90170193
后面就跟DeepWalk一样了,但是原作者在训练Word2Vec模型的时候,没有采用层次Softmax。
代码#
Copy
https://gitee.com/dogecheng/python/blob/master/graph/DeepWalk_and_Node2Vec.ipynb
DeepWalk 可视化
Node2Vec 可视化
参考资料#
腾讯安全威胁情报中心“明厨亮灶”工程:基于域名图谱嵌入的恶意域名挖掘
DeepWalk: Online Learning of Social Representations
node2vec: Scalable Feature Learning for Networks
【Graph Embedding】DeepWalk:算法原理,实现和应用
【Graph Embedding】node2vec:算法原理,实现和应用
node2vec随机游走实现思路
Alias Method离散分布随机取样
理解node2vec
node2vec
DeepWalk 和 Node2Vec相关推荐
- 【CS224W】(task4/5)图嵌入表示学习(Deepwalk、Node2vec)更新中
note Node embedding的基本框架:encoder+decoder 最简单encoder是embedding-lookup表:ENC(v)=zv=Z⋅v\mathrm{ENC}(v)=z ...
- 从Deepwalk到Node2vec
上篇谈到了deepwalk,整体流程就是按均匀分布从当前节点走到下一个节点,从而采样到一条条"句子",但是这样采样方式一定是对的吗?边上是否有权重影响呢?走回头路的概率也是等于选择 ...
- [图神经网络] 图节点Node表示(DeepWalk与Node2Vec)
一 前言 在图中,如果能把节点表示成合适的数值,能做很多任务,例如节点分类,关系预测,聚类等等.如何把节点表示成计算机能看懂的数值目前也有很多方法,本文主要为大家介绍基于DeepWalk的节点表示方法 ...
- Paddle Graph Learning (PGL)图学习之图游走类deepwalk、node2vec模型[系列四]
Paddle Graph Learning (PGL)图学习之图游走类模型[系列四] 更多详情参考:Paddle Graph Learning 图学习之图游走类模型[系列四] https://aist ...
- graph embedding 论文及源码阅读 deepwalk line node2vec bine
最近学习了下graph embedding方面的内容,主要看了如下几篇论文及对应开源代码,记录下. DeepWalk: Online Learning of Social Representation ...
- GNN综述:从deepwalk到GraphSAGE,GCN,GAT
作者丨弃之@知乎(已授权) 来源丨https://zhuanlan.zhihu.com/p/288322305 编辑丨极市平台 1.graph embedding(GE) 1.1.图中学习的分类 1. ...
- node2vec: Scalable Feature Learning for networks
Node2vec历史意义: 是目前引用量比较高的文章 与DeepWalk文章一样,属于早期网络表征学习的代表性工作,后期作为经典baseline 启发了大量基于random walk来做网络表征学习的 ...
- 使用DeepWalk从图中提取特征
2019-12-03 15:05:14 目录 数据的图示 不同类型的基于图的特征 节点属性 局部结构特征 节点嵌入 DeepWalk简介 在Python中实施DeepWalk以查找相似的Wikiped ...
- 论文|Node2vec算法原理、代码实战和在微信朋友圈的应用
1 概述 Node2vec是2016年斯坦福教授 Jure Leskovec.Aditya Grover提出的论文,论文的下载链接为:https://arxiv.org/pdf/1607.00653. ...
最新文章
- SECTIONS bss段初始化分析
- SQL语句的增删改查
- 变量命名规范 匈牙利 下划线 骆驼 帕斯卡
- 解释型语言与编译型语言的区别
- QT实现PhotoSurface
- 89. Gray Code - LeetCode
- USACO-Section1.3 Name That Number (遍历与字符串比较)
- java 管道流的读写操作 用于两个线程之间的通信
- QTreeView QTreeWidget改变图标大小
- Unity3d学习笔记-Demo实现
- LaTeX 页眉设置
- 关于EA和ED的区别
- php filesize stat failed for,PHP filesize()适用于除一个文件之外的所有文件,给出stat失败错误...
- ISO 认证是哪三个?
- 跨境电商货源采购平台有哪些?
- 华为鸿蒙系统2021年上市,2021年,华为开始规划自有操作系统“鸿蒙”。
- 【沐风老师】3DMAX艺术样条线增强螺旋线插件使用教程
- SAP MM STO单据的外向交货单创建后新加ITEM?
- 《心安即是归处》读书笔记
- libjingle开发人员指南
热门文章
- python中魔法方法__str__与__repr__的区别
- python去除rpm仓库中同名低版本的包
- java 命令行 读取文件_java读取txt文件
- C++ nlohmann/json 的主要用法
- python PyQt5中文教程☞【第十节】PyQt5绘图(绘制文本drawText()、画点drawPoints()、设置颜色、QPen(画笔)绘制线条、QBrush(笔刷)绘制纹理
- python 如何将字符串数字列表转换成数字列表,如何将数字列表转换成字符串数字列表?map(eval,list(str))
- Python__数据结构与算法——查找与排序
- 分布式系统——网络监视系统zabbix3.4.2,以及向zabbix中添加被监视主机(一)
- Tomcat部署Maven的JavaWeb项目——这样我们写完程序把程序打包为war包,拿到用户那边启动服务器就可以运行了,简单轻松
- Elasticsearch Pipeline Aggregation管道聚合详解