dgl-01 deepwalk
目录
- Deepwalk原理
- DGL训练
- 数据示例
- 代码分析
- 评估
Deepwalk原理
在word2vec基础上,利用随机游走采样邻居节点再训练节点向量
1. 随机游走采样节点序列
2. 使用skip-gram model学习节点向量
随机游走需要注意:
- 每次以当前节点为起始点,利用深度优先遍历采样
- 采用多进程并行对节点进行采样
- 需要指定采样深度
word2vec的输入是一个seq一个seq输入,
deepwalk只是把seq改成了随机游走采样出来的序列,
根据应用场景来选用模型。
- 比如开会的场景, 要训练用户向量表示,业务希望看到的是一个会议里面的用户相似度。那么把一个会议的uid作为一个序列,用word2vec训练即可,这种场景更多是1度邻居关系,不是特别关注2度邻居
- 如果是用户点击序列来构图来训练用户向量,可能关注的信息并不是当前用户点击的序列,希望能够通过点击商品,去关联出其它同样点击商品的用户信息,类似于协同过滤,这时候就要考虑图结构1,2度甚至更深的关系,就用deepwalk来训练更好。
DGL训练
- 有写好的随机游走采样接口
- 有写好的skip-gram模型, 直接使用即可
- 有graph数据结构
- 支持多GPU训练
- dgl源代码: deepwalk
整体来说就是开箱即用,既可以简单处理数据后直接使用, 也可以看源码学习。重点是了解数据处理和加载,后续慢慢学习模型源码。
数据示例
dgl提供了各种图结构相关数据,这里用youtube文件, 一共有3个文件
-rw-r--r-- 1 root root 457K Jun 10 2020 youtube-label.txt
-rw-r--r-- 1 root root 86M Jun 10 2020 youtube-net.txt
-rw-r--r-- 1 root root 236K Jun 10 2020 youtube-vocab.txt# youtube-label.txt, 表示每个node节点对应的类别
1 1
3 1
5 1
72 1
165 1# youtube-net.txt, 表示两两节点连接关系以及权重
1 2 1
1 3 1
1 4 1
1 5 1
1 6 1# youtube-vocab.txt, 所有节点
1
3
5
72
165
- 在net文件中,一共出现了 1138499 个节点,5980886条边
- 在label文件中,只有50691个节点标记了label
代码分析
数据处理: reading_data.py
# 读取数据并构建成graph
# ReadTxtNet()
node2id = {} # 保存原始node和编码后id的关系, dgl里面graph的节点要从0开始
id2node = {} # id和node的关系
cid = 0src = [] # 开始节点集合
dst = [] # 目标节点集合
weight = [] # 权重集合
net = {} # 边集合
- 主要是读取net文件, 将边的关系梳理出来, 并构建成dgl的graph结构, 代码很清晰很容易看
- 如果无向图,如果n1和n2相连, 要算两条边
if undirected:# 无向图, 则a和b以及b和a都要算一条边if n2 not in net:net[n2] = {n1: w}src.append(n2)dst.append(n1)weight.append(w)elif n1 not in net[n2]:net[n2][n1] = wsrc.append(n2)dst.append(n1)weight.append(w)
随机游走, reading_data.py
# 1. 需要确定采样的起始点, 然后进行随机游走, 起始点的确定如下:
nodes = G.out_degrees().nonzero().squeeze(-1) # 获取所有有出度的节点# 2. 确定要采多少序列, 乘以参数 num_walks 即可
# 即每个节点,都会采样一个 num_walks 个序列, 拉平成一个list
seeds = torch.cat([torch.LongTensor(self.valid_seeds)] * num_walks)# 3. 确定每个GPU采样节点集合,后续的sampler类可自行看源码了解具体采样逻辑
self.seeds = torch.split(tensor=shuffle_walks(seeds),split_size_or_sections=int(np.ceil(len(self.valid_seeds) * self.num_walks / self.num_procs)),dim=0)
模型训练:deepwalk.py
整体训练逻辑比较简单, 主要是dataloader构建的时候注意单GPU和多GPU区别
# 数据处理完后,构建dataloader
# 构建sampler时, 单GPU训练直接传入0, 多GPU要传入对应的进程rank
sampler = self.dataset.create_sampler(0)
dataloader = DataLoader(dataset=sampler.seeds,batch_size=self.args.batch_size,collate_fn=sampler.sample,shuffle=False,drop_last=False,num_workers=self.args.num_sampler_threads,
)
- 整体代码主要是了解数据如何处理, 后面直接调用模型训练即可。
- 重点是在随机游走的采样
- skip-gram模型是比较经典模型, 实现上可以关注负样本构建和softmax的快速实现
评估
- 利用开源的Evaluate-Embedding进行embedding的多分类评估。
- 在上一步训练完模型后,有如下结果,注意要保存成Evaluate-Embedding指定的txt格式
- 评估有2步
- 归一化得到.bin文件,
- 运行测试代码
- 结果如下,和dgl上贴出的结果一致
Learning vocab...Done! Reading vectors...Done! Reading labels...Done! Vocab size: 31704 Vector size: 128 Macro-F1: 0.3674929 Micro-F1: 0.4604832
dgl-01 deepwalk相关推荐
- 一文直击Graph Embedding图表示学习的原理及应用
导读:我们都知道在数据结构中,图是一种基础且常用的结构.现实世界中许多场景可以抽象为一种图结构,如社交网络,交通网络,电商网站中用户与物品的关系等. 目前提到图算法一般指: 经典数据结构与算法层面的: ...
- dgl源码阅读笔记(3)——DeepWalk
dgl源码阅读笔记(3)--DeepWalk 图神经网络开源库dgl阅读笔记 文章目录 dgl源码阅读笔记(3)--DeepWalk 图神经网络开源库dgl阅读笔记 @[TOC](文章目录) 前言 一 ...
- Paddle Graph Learning (PGL)图学习之图游走类deepwalk、node2vec模型[系列四]
Paddle Graph Learning (PGL)图学习之图游走类模型[系列四] 更多详情参考:Paddle Graph Learning 图学习之图游走类模型[系列四] https://aist ...
- DGL教程【四】使用GNN进行链路预测
在之前的介绍中,我们已经学习了使用GNN进行节点分类,比如预测一个图中的节点所属的类别.这一节中我们将教你如何进行链路预测,比如预测任意两个节点之间是不是存在边. 本节你将学到: 构建一个GNN的链路 ...
- DGL教程【三】构建自己的GNN模块
有时,利用现有的GNN模型进行堆叠无法满足我们的需求,例如我们希望通过考虑节点重要性或边权值来发明一种聚合邻居信息的新方法. 本节将介绍: DGL的消息传递API 自己实现一个GraphSage卷积模 ...
- DGL教程【一】使用Cora数据集进行分类
本教程将演示如何构建一个基于半监督的节点分类任务的GNN网络,任务基于一个小数据集Cora,这是一个将论文作为节点,引用关系作为边的网络结构. 任务就是预测一个论文的所属分类.每一个论文包含一个词频信 ...
- dgl edges_浏览器趋势2016年10月:Microsoft Edges下降
dgl edges In September, we discussed whether the browser wars are over. October's StatCounter browse ...
- 化合物分子 ogb、dgl生成图网络及GNN模型训练;pgl图框架
参考:https://towardsdatascience.com/learn-to-smell-molecules-with-graph-convolutional-neural-networks- ...
- 图神经网络框架DGL实现Graph Attention Network (GAT)笔记
参考列表: [1]深入理解图注意力机制 [2]DGL官方学习教程一 --基础操作&消息传递 [3]Cora数据集介绍+python读取 一.DGL实现GAT分类机器学习论文 程序摘自[1],该 ...
- GNN Algorithms (1): DeepWalk
目录 DeepWalk Concept Random Walk word2vec~CBOW model word2vec~skip-gram model skip-gram steps loss fu ...
最新文章
- 超经典超好玩的光枪游戏,强烈推荐!
- django-pure-pagination 组件使用
- python提高办公效率-用Python的这3个优点,让工作效率提升一倍
- 鼠标滚轮控制panel滚动条
- C语言 动态开辟内存管理
- java map 内存可见性_JMM(一):初识Java内存模型
- 如何用css显示一个图片中多个小图标
- mysql上传到阿里云服务器地址_从0部署Web项目到阿里云服务器上
- ubuntu下Tomcat更改端口号
- Python学习 Task01 :变量,运算符,与数据类型
- [译]关于Android图形系统一些事实真相
- 合格的攻击性白帽黑客应该具备的基本素质(1)
- 【GoCN酷Go推荐】protobuf生成Go代码插件gogo/protobuf
- 北斗在线app服务器,北斗卫星导航app,北斗卫星导航app官网手机版预约 v1.0 - 浏览器家园...
- 李沐动手学深度学习V2-注意力评分函数
- Bulldog靶机渗透
- 文字转语音在线转换方法
- 2021 ICPC Asia Taipei Regional
- Button设置elevation阴影
- 计算机与信息科学学士,计算机与信息科学理科学士
热门文章
- C#多线程加载控件界面卡死的解决
- python逐步回归筛选变量_Python实现逐步回归(stepwise regression)
- Hive开发人员如何提升?
- 南京邮电大学计算机考研经验
- 云客网解析网站内容采集的注意要点
- python——Socket网络编程(详细讲解)(一)
- 一文搞懂CPU运算原理
- 提高心性,做最好的自己——《活法》读后感
- 系统即将关机请保存关机是由nt_出现“系统关机对话框”,内容如下:系统即将关机,请保存所有正在运行的工作然后注销。关机是由NT AUTHORITY\SYSTEM初始的。...
- Bootstrap(3)__Bootstrap基础导航,轮播,下拉表