目录
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