DeepWalk#

与词嵌入类似,图嵌入基本理念是基于相邻顶点的关系,将目的顶点映射为稠密向量,以数值化的方式表达图中的信息,以便在下游任务中运用。

Word2Vec根据词与词的共现关系学习向量的表示,DeepWalk受其启发。它通过随机游走的方式提取顶点序列,再用Word2Vec模型根据顶点和顶点的共现关系,学习顶点的向量表示。可以理解为用文字把图的内容表达出来,如下图所示。

DeepWalk训练图表示的整个过程大致可以分为2步:

  1. 随机游走提取顶点序列
  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的扩展,它学习嵌入的过程也可以分两步:

  1. 二阶随机游走(2ndorderrandomwalk2ndorderrandomwalk)
  2. 使用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相关推荐

  1. 【CS224W】(task4/5)图嵌入表示学习(Deepwalk、Node2vec)更新中

    note Node embedding的基本框架:encoder+decoder 最简单encoder是embedding-lookup表:ENC(v)=zv=Z⋅v\mathrm{ENC}(v)=z ...

  2. 从Deepwalk到Node2vec

    上篇谈到了deepwalk,整体流程就是按均匀分布从当前节点走到下一个节点,从而采样到一条条"句子",但是这样采样方式一定是对的吗?边上是否有权重影响呢?走回头路的概率也是等于选择 ...

  3. [图神经网络] 图节点Node表示(DeepWalk与Node2Vec)

    一 前言 在图中,如果能把节点表示成合适的数值,能做很多任务,例如节点分类,关系预测,聚类等等.如何把节点表示成计算机能看懂的数值目前也有很多方法,本文主要为大家介绍基于DeepWalk的节点表示方法 ...

  4. Paddle Graph Learning (PGL)图学习之图游走类deepwalk、node2vec模型[系列四]

    Paddle Graph Learning (PGL)图学习之图游走类模型[系列四] 更多详情参考:Paddle Graph Learning 图学习之图游走类模型[系列四] https://aist ...

  5. graph embedding 论文及源码阅读 deepwalk line node2vec bine

    最近学习了下graph embedding方面的内容,主要看了如下几篇论文及对应开源代码,记录下. DeepWalk: Online Learning of Social Representation ...

  6. GNN综述:从deepwalk到GraphSAGE,GCN,GAT

    作者丨弃之@知乎(已授权) 来源丨https://zhuanlan.zhihu.com/p/288322305 编辑丨极市平台 1.graph embedding(GE) 1.1.图中学习的分类 1. ...

  7. node2vec: Scalable Feature Learning for networks

    Node2vec历史意义: 是目前引用量比较高的文章 与DeepWalk文章一样,属于早期网络表征学习的代表性工作,后期作为经典baseline 启发了大量基于random walk来做网络表征学习的 ...

  8. 使用DeepWalk从图中提取特征

    2019-12-03 15:05:14 目录 数据的图示 不同类型的基于图的特征 节点属性 局部结构特征 节点嵌入 DeepWalk简介 在Python中实施DeepWalk以查找相似的Wikiped ...

  9. 论文|Node2vec算法原理、代码实战和在微信朋友圈的应用

    1 概述 Node2vec是2016年斯坦福教授 Jure Leskovec.Aditya Grover提出的论文,论文的下载链接为:https://arxiv.org/pdf/1607.00653. ...

最新文章

  1. SECTIONS bss段初始化分析
  2. SQL语句的增删改查
  3. 变量命名规范 匈牙利 下划线 骆驼 帕斯卡
  4. 解释型语言与编译型语言的区别
  5. QT实现PhotoSurface
  6. 89. Gray Code - LeetCode
  7. USACO-Section1.3 Name That Number (遍历与字符串比较)
  8. java 管道流的读写操作 用于两个线程之间的通信
  9. QTreeView QTreeWidget改变图标大小
  10. Unity3d学习笔记-Demo实现
  11. LaTeX 页眉设置
  12. 关于EA和ED的区别
  13. php filesize stat failed for,PHP filesize()适用于除一个文件之外的所有文件,给出stat失败错误...
  14. ISO 认证是哪三个?
  15. 跨境电商货源采购平台有哪些?
  16. 华为鸿蒙系统2021年上市,2021年,华为开始规划自有操作系统“鸿蒙”。
  17. 【沐风老师】3DMAX艺术样条线增强螺旋线插件使用教程
  18. SAP MM STO单据的外向交货单创建后新加ITEM?
  19. 《心安即是归处》读书笔记
  20. libjingle开发人员指南

热门文章

  1. python中魔法方法__str__与__repr__的区别
  2. python去除rpm仓库中同名低版本的包
  3. java 命令行 读取文件_java读取txt文件
  4. C++ nlohmann/json 的主要用法
  5. python PyQt5中文教程☞【第十节】PyQt5绘图(绘制文本drawText()、画点drawPoints()、设置颜色、QPen(画笔)绘制线条、QBrush(笔刷)绘制纹理
  6. python 如何将字符串数字列表转换成数字列表,如何将数字列表转换成字符串数字列表?map(eval,list(str))
  7. Python__数据结构与算法——查找与排序
  8. 分布式系统——网络监视系统zabbix3.4.2,以及向zabbix中添加被监视主机(一)
  9. Tomcat部署Maven的JavaWeb项目——这样我们写完程序把程序打包为war包,拿到用户那边启动服务器就可以运行了,简单轻松
  10. Elasticsearch Pipeline Aggregation管道聚合详解