DeepWalk论文详解

article/2025/10/21 22:22:33

DeepWalk算法报告

Deepwalk是网络表示学习的经典算法之一,是用来学习网络中顶点的向量表示(学习学习图的结构特征即属性,并且属性个数为向量的维数)。

该算法通过截断随机游走学习出一个网络的社会表示,输入是一张图或者网络,输出为网络中顶点的向量表示。

本文的主要贡献为:

1.深度游走可以学习短随机有洞中存在的结构规律。

2.在标签稀疏性存在情况下,显著提高了分类性能。

        3.通过使用并行实现构建网络规模的图的表示来演示我们算法的可伸缩性。

本文处理网络节点的表示利用了word2vec中词嵌入的思想。该思想的基本处理元素就是单词,对应网络节点的表示即网络节点。而词嵌入就是对一个句子中的单词序列进行分析,而这个序列就是随机游走所产生的。

所谓的随机游走,就是在网络上不断重复地随机选择游走路径,最终形成一条贯穿网络的路径。从某个特定的端点开始,游走的每一步都从与当前节点相连的边中随机选择一条,沿着选定的边移动到下一个顶点,不断重复这个过程。

整个DeepWalk算法包含俩个部分,一部分是随机游走的生成,另一部分是参数的更新

算法为:

算法的输入:

图G(V,E)其中V是顶点集,E是边集合。w为窗口大小,d是嵌入的维度大小。γ是在每个顶点开始随机游动的次数。t是随机游走的长度,即所生成的序列的最大长度。

算法的输出即是网络中顶点的向量表示

算法解析:

第1步是初始化顶点嵌入表示。第2步是构建Hierarchical Softmax即哈夫曼树,第3步开始是对每个节点做γ次随机游走,在循环中,第4步是打乱网络顶点集合中的节点,第5,6步是以每个节点为根节点生成长度为t的随机游走,该函数在后面代码解析中有会提到,第7步是将生成的随机游走序列用skip-gram模型中利用梯度的方法来对参数进行更新。其中参数更新的细节就是算法2,如下图。

‘’

算法2主要是对参数的更新,即对于每个参数进行求导得出梯度,再根据梯度进行更新参数,即所谓的梯度下降。

对于代码的分析:

__main__.py分析

这是运行时候的命令行参数,

其中format允许三种类型输入(adjlist,edgelist,mat),默认是adjlist。

如果数据量小,则直接调用build_deep_corpus,从每个节点开始进行多次随机游走。

num_path:设置了从一个节点开始的次数

path_length:设置了一个随机游走的长度

alpha:以概率1-alpha从当前节点继续走下去,或者以alpha的概率停止。

然后开始训练模型,将随机游走得到的walks放入word2vec模型中进行训练,从而得到对应节点的嵌入。

如果内存不够放随机游走的结果,则该路径会被保存到output.walks.x中

其实和之前的操作一样,也是在调用graph的randwalk,只不过加入了并行化代码和写到磁盘的程序。

Graph.py

在graph类中,该函数是初始化函数,构建2出一个字典来当图,其例子就是如下图所示:

该俩个函数检查生成的随机游走是否为自循环并且删除。

该函数是创建截断的随机游走,其中path_length代表游走的长度Alpha代表重启的概率

Start代表随机游走的开始节点。

该函数对一个图生成一个语料库,即对于图G生成每个节点开始的多次的随机游走列表,

该函数也是生成语料库函数,但是不一样的是该函数采用yield函数进行迭代生成,是用于内存不足以保存路径的情况。

该类后面的函数主要作用就是将列表分成大小均匀的块。

Walks.py

上面俩个函数是计算词频的函数。

其中count_words的参数f中每行都是一个随机游走walk,函数最终返回这个file中每个单词出现的次数。

Count_textfiles使用了多线程的方法,也是返回每个单词出现的次数

上面俩个函数是将walks写入文件,一个是直接写入,另一个是采用多线程方式。

Grouper函数的大致含义

grouper(3, 'abcdefg', 'x') --> ('a','b','c'), ('d','e','f'), ('g','x','x')

第一个参数是整数int,第二个参数是可迭代对象,例如range(1,7+1) (返回1,2,3,4,5,6,7的迭代对象)如果第三个参数不写,则default为None,这样

grouper(3, range(1,7+1))-->(1,2,3),(4,5,6),(7,None,None)

图的数据:

邻接矩阵为:

运行结果为:

2.总结:

Deepwalk算法我觉得是最经典的图嵌入算法之一。它采用了word2vec的方法思想,通过将一组组随机截断游走所生成的顶点序列当做一个个句子,然后去用word2vec进行训练,即用图中节点与节点的共现关系来学习节点的向量表示。

总的来说,这篇论文我认为是network embedding的开山之作,通过将NLP中word2vec的词向量的思想借鉴过来,来实现社交网络中的节点表示,因此提供了一种新的思路。因为社交网络中的节点分布太过于稀疏,所以deepwalk算法非常适用于标签稀疏的情况。其中随机截断游走的思想就是一种可重复访问已访问节点的深度优先遍历算法:

给定当前访问起始节点,从该起始节点中的所有邻居节点中随机采样作为下一个访问节点,并且有一定的概率返回原节点,重复此过程,直到序列长度等于给定的长度。在分析代码的过程中,依旧有些函数没怎么看懂,如多线程运行、评估那一块,但是关键的函数,包括生成随机截断游走、运用word2vec模型进行训练等这些已经领会

个人的看法:

算法优点:

1、在信息较少的稀疏网络表现优越

2、在线学习:DeepWalk是可扩展的

3、容易实现并行性。几个随机游走者(不同的线程,进程或机器)可以同时探索同一网络的不同部分。

4、适应性。当图变化后,不需要全局重新计算,可以迭代地更新学习模型。

算法缺点:

我觉得deepwalk只适用于无向图即无权边,因为它是概率性地选择自己的邻居顶点进行访问,而没有考虑到边的权重大小,但是在社交网络中边的权重是非常重要的。就比如说在一个学校的社交网络中,可能一个班级的同学他们的节点是相邻的,但是同寝室的他们的关系会更密切一点,也就是边的权重会更大一点,而deepwalk没有考虑到这些,这是我的看法。

DeepWalk算法报告

Deepwalk是网络表示学习的经典算法之一,是用来学习网络中顶点的向量表示(学习学习图的结构特征即属性,并且属性个数为向量的维数)。

该算法通过截断随机游走学习出一个网络的社会表示,输入是一张图或者网络,输出为网络中顶点的向量表示。

本文的主要贡献为:

1.深度游走可以学习短随机有洞中存在的结构规律。

2.在标签稀疏性存在情况下,显著提高了分类性能。

        3.通过使用并行实现构建网络规模的图的表示来演示我们算法的可伸缩性。

本文处理网络节点的表示利用了word2vec中词嵌入的思想。该思想的基本处理元素就是单词,对应网络节点的表示即网络节点。而词嵌入就是对一个句子中的单词序列进行分析,而这个序列就是随机游走所产生的。

所谓的随机游走,就是在网络上不断重复地随机选择游走路径,最终形成一条贯穿网络的路径。从某个特定的端点开始,游走的每一步都从与当前节点相连的边中随机选择一条,沿着选定的边移动到下一个顶点,不断重复这个过程。

整个DeepWalk算法包含俩个部分,一部分是随机游走的生成,另一部分是参数的更新

算法为:

算法的输入:

图G(V,E)其中V是顶点集,E是边集合。w为窗口大小,d是嵌入的维度大小。γ是在每个顶点开始随机游动的次数。t是随机游走的长度,即所生成的序列的最大长度。

算法的输出即是网络中顶点的向量表示

算法解析:

第1步是初始化顶点嵌入表示。第2步是构建Hierarchical Softmax即哈夫曼树,第3步开始是对每个节点做γ次随机游走,在循环中,第4步是打乱网络顶点集合中的节点,第5,6步是以每个节点为根节点生成长度为t的随机游走,该函数在后面代码解析中有会提到,第7步是将生成的随机游走序列用skip-gram模型中利用梯度的方法来对参数进行更新。其中参数更新的细节就是算法2,如下图。

‘’

算法2主要是对参数的更新,即对于每个参数进行求导得出梯度,再根据梯度进行更新参数,即所谓的梯度下降。

对于代码的分析:

__main__.py分析

这是运行时候的命令行参数,

其中format允许三种类型输入(adjlist,edgelist,mat),默认是adjlist。

如果数据量小,则直接调用build_deep_corpus,从每个节点开始进行多次随机游走。

num_path:设置了从一个节点开始的次数

path_length:设置了一个随机游走的长度

alpha:以概率1-alpha从当前节点继续走下去,或者以alpha的概率停止。

然后开始训练模型,将随机游走得到的walks放入word2vec模型中进行训练,从而得到对应节点的嵌入。

如果内存不够放随机游走的结果,则该路径会被保存到output.walks.x中

其实和之前的操作一样,也是在调用graph的randwalk,只不过加入了并行化代码和写到磁盘的程序。

Graph.py

在graph类中,该函数是初始化函数,构建2出一个字典来当图,其例子就是如下图所示:

该俩个函数检查生成的随机游走是否为自循环并且删除。

该函数是创建截断的随机游走,其中path_length代表游走的长度Alpha代表重启的概率

Start代表随机游走的开始节点。

该函数对一个图生成一个语料库,即对于图G生成每个节点开始的多次的随机游走列表,

该函数也是生成语料库函数,但是不一样的是该函数采用yield函数进行迭代生成,是用于内存不足以保存路径的情况。

该类后面的函数主要作用就是将列表分成大小均匀的块。

Walks.py

上面俩个函数是计算词频的函数。

其中count_words的参数f中每行都是一个随机游走walk,函数最终返回这个file中每个单词出现的次数。

Count_textfiles使用了多线程的方法,也是返回每个单词出现的次数

上面俩个函数是将walks写入文件,一个是直接写入,另一个是采用多线程方式。

Grouper函数的大致含义

grouper(3, 'abcdefg', 'x') --> ('a','b','c'), ('d','e','f'), ('g','x','x')

第一个参数是整数int,第二个参数是可迭代对象,例如range(1,7+1) (返回1,2,3,4,5,6,7的迭代对象)如果第三个参数不写,则default为None,这样

grouper(3, range(1,7+1))-->(1,2,3),(4,5,6),(7,None,None)

图的数据:

邻接矩阵为:

运行结果为:

2.总结:

Deepwalk算法我觉得是最经典的图嵌入算法之一。它采用了word2vec的方法思想,通过将一组组随机截断游走所生成的顶点序列当做一个个句子,然后去用word2vec进行训练,即用图中节点与节点的共现关系来学习节点的向量表示。

总的来说,这篇论文我认为是network embedding的开山之作,通过将NLP中word2vec的词向量的思想借鉴过来,来实现社交网络中的节点表示,因此提供了一种新的思路。因为社交网络中的节点分布太过于稀疏,所以deepwalk算法非常适用于标签稀疏的情况。其中随机截断游走的思想就是一种可重复访问已访问节点的深度优先遍历算法:

给定当前访问起始节点,从该起始节点中的所有邻居节点中随机采样作为下一个访问节点,并且有一定的概率返回原节点,重复此过程,直到序列长度等于给定的长度。在分析代码的过程中,依旧有些函数没怎么看懂,如多线程运行、评估那一块,但是关键的函数,包括生成随机截断游走、运用word2vec模型进行训练等这些已经领会

个人的看法:

算法优点:

1、在信息较少的稀疏网络表现优越

2、在线学习:DeepWalk是可扩展的

3、容易实现并行性。几个随机游走者(不同的线程,进程或机器)可以同时探索同一网络的不同部分。

4、适应性。当图变化后,不需要全局重新计算,可以迭代地更新学习模型。

算法缺点:

我觉得deepwalk只适用于无向图即无权边,因为它是概率性地选择自己的邻居顶点进行访问,而没有考虑到边的权重大小,但是在社交网络中边的权重是非常重要的。就比如说在一个学校的社交网络中,可能一个班级的同学他们的节点是相邻的,但是同寝室的他们的关系会更密切一点,也就是边的权重会更大一点,而deepwalk没有考虑到这些,这是我的看法。


http://chatgpt.dhexx.cn/article/PCYUfDHH.shtml

相关文章

DeepWalk原理理解:DeepWalk: online learning of social representations

文献:DeepWalk: online learning of social representations 对比阅读了几篇关于网络表示学习的文献,其中一篇包括DeepWalk的提出,下面将自己对于论文的理解和论文的笔记组织好记录下来。 deep walk 的提出是针对网络表示学习的稀疏性提出来…

DeepWalk模型的简介与优缺点

1、DeepWalk [DeepWalk] DeepWalk- Online Learning of Social Representations (SBU 2014) word2vec是基于序列进行embedding;但是,实际上实体之间的关系越来越复杂化、网络化。这个时候sequence embedding------>graph embedding。 图的定义&…

[论文阅读] (24) 向量表征:从Word2vec和Doc2vec到Deepwalk和Graph2vec,再到Asm2vec和Log2vec(一)

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学术路上期…

PyG基于DeepWalk实现节点分类及其可视化

文章目录 前言一、导入相关库二、加载Cora数据集三、定义DeepWalk四、可视化完整代码前言 大家好,我是阿光。 本专栏整理了《图神经网络代码实战》,内包含了不同图神经网络的相关代码实现(PyG以及自实现),理论与实践相结合,如GCN、GAT、GraphSAGE等经典图网络,每一个代…

【图嵌入】DeepWalk原理与代码实战

DeepWalk 基础理论 了解过 NLP 的同学对 word2vec 应该不陌生,word2vec 通过句子中词与词之间的共现关系来学习词的向量表示,如果你忘记了,可以看看我之前的博客: 【word2vec】篇一:理解词向量、CBOW与Skip-Gram等知…

DeepWalk算法(个人理解)

DeepWalk 什么是网络嵌入 将网络中的点用一个低维的向量表示,并且这些向量要能反应原先网络的某些特性。 一种网络嵌入的方法叫DeepWalk,它的输入是一张图或者网络,输出为网络中顶点的向量表示。DeepWalk通过截断随机游走(truncated rando…

deepwalk详解

目录 1. 算法思想2. 随机游走3. 如何把随机游走中得到的信息用来点表示学习?4.适用场景5. 不足和改进 1. 算法思想 源于word2vec,word2vec通过语料库中的句子序列来描述词与词的共现关系,进而学习到词语的向量表示。deepwalk则使用图中节点与节点的共现…

论文|DeepWalk的算法原理、代码实现和应用说明

万物皆可Embedding系列会结合论文和实践经验进行介绍,前期主要集中在论文中,后期会加入实践经验和案例,目前已更新: 万物皆可Vector之语言模型:从N-Gram到NNLM、RNNLM万物皆可Vector之Word2vec:2个模型、2…

泛运筹理论初探——DeepWalk算法简介

图论-图论算法之DeepWalk Graph-Embedding和DeepWalk算法 在之前的图算法介绍里,我们探讨了部分比较简单和经典的图算法,比如PageRank、最短路径、深度优先搜索等方法。在某些场景,之前介绍的一些算法虽然很经典,逻辑很清晰&…

推荐系统中的常用算法——DeepWalk算法

1. 概述 DeepWalk算法是在KDD2014中提出的算法,最初应用在图表示(Graph Embedding)方向,由于在推荐系统中,用户的行为数据固然的可以表示成图的形式,如下图所示: 通过Graph Embedding得到图中每…

DeepWalk(深度游走)算法

整理自: Deepwalk(深度游走)算法简介_Mr.Cheng1996的博客-CSDN博客 【论文笔记】DeepWalk - 知乎 DeepWalk是一种将随机游走(random walk)和word2vec两种算法相结合的图结构数据挖掘算法。该算法能够学习网络的隐藏信息,能够将图中的节点表示为一个包…

Deepwalk(深度游走)算法简介

深度游走:一种社交表示的在线学习算法 主要思想Deepwalk算法参考文献 主要思想 Deepwalk是一种将随机游走(random walk)和word2vec两种算法相结合的图结构数据挖掘算法。该算法能够学习网络的隐藏信息,能够将图中的节点表示为一个包含潜在信息的向量&…

python中dumps的用法

json.dumps()用于将dict类型的数据转成str,因为如果直接将dict类型的数据写入json文件中会发生报错,因此在将数据写入时需要用到该函数。 若在数据写入json文件时,未先进行转换,报错如下: 转换后再写入,则不报错:

VS自带工具:dumpbin的使用查看Lib,dll等

VS自带工具:dumpbin的使用查看Lib,dll等 参考链接: https://blog.csdn.net/great3779/article/details/7161150 https://blog.csdn.net/ermen2009/article/details/17964813 https://blog.csdn.net/blpluto/article/details/5706757 https://blog.cs…

读懂DUMP文件

目录 一、什么是Dump文件 二、Dump文件的类型 2.1 内核模式Dump 2.2 用户模式Dump 三、Dump文件的生成 3.1 通过调试工具生成 3.2 通过使用任务管理器生成 3.3 通过编程自动生成 四、各种抓取DUMP的工具 一、什么是Dump文件 对于程序崩溃,最快的解决方式是…

Dump文件

1. Dump文件 1. Dump文件介绍 Dump文件(Dump File),也叫转储文件,以.DMP为文件后缀。dump文件是进程在内存中的镜像文件,通过转换然后存储成以.DMP后缀的文件。dump文件根据存储时的选项不同,会生成不同大小的文件,其中…

DUMP文件分析1:DUMP文件简介

1.1 DUMP文件类型 Windows下Dump文件分为两大类,内核模式Dump和用户模式Dump。内核模式Dump是操作系统创建的崩溃转储,最经典的就是系统蓝屏,这时候会自动创建内核模式的Dump。用户模式Dump进一步可以分为完整Dump(Full Dump&…

VS中dumpbin.exe工具的使用

用VS2010生成的.obj文件、.lib库、.dll库、.exe执行文件,如果想查看其中这些文件或库包含了哪些函数以及相关的信息(符号清单),可以通过VS2010自带的dumpbin工具来完成。 dumpbin.exe为Microsoft COFF二进制文件转换器,它显示有关通用对象文…

查看dll或exe文件的依赖项——使用vs自带的dumpbin工具

在使用vs写程序的时候,我们经常会将程序生成为dll或是exe文件,而这些文件通常也会需要依赖其他库的dll才能单独使用。那我们该如何确定某个dll或是exe文件依赖了哪些dll呢?这个问题可以通过使用vs自带的dumpbin工具来解决。下面详细介绍其使用…

用dumpbin.exe工具查看DLL

用dumpbin.exe工具查看DLL,dumpbin.exe是VS自带的工具。我装的是VS2010,所以路径是:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\下就可以看到dumpbin.exe了。 怎么使用dumpbin.exe呢?因为dumpbin.exe有可…