项目介绍:异构图转换器 (HGT)
Heterogeneous Graph Transformer,简称HGT,是一种图神经网络架构,能够处理大规模异构和动态图。本项目的实现基于Pytorch Geometric API,旨在为研究人员和开发者提供一种强大的工具,用于分析复杂的图结构。
项目概述
本项目的核心在于几个重要的文件:
-
conv.py:实现了类似Transformer的异构图卷积层,这是模型的核心部分。
-
model.py:用于封装不同的模型组件。
-
data.py:负责数据接口和使用。
class Graph
:用于表示异构图的数据结构,节点特征储存在Graph.node_feature
中,邻接矩阵储存在Graph.edge_list
中。def sample_subgraph
:用于异构图的采样算法,每次迭代会根据节点相对度数的平方作为概率,在已采样节点的区域内采样固定数量的节点。
-
train_*.py:针对特定下游任务的训练与验证脚本。
def *_sample
:用于给定任务的采样函数,需注意遮盖图中现有的链接,以避免信息泄露。def prepare_data
:使用多进程并行进行采样,与模型训练无缝协调。
环境设置
项目基于pytorch_geometric,为运行代码,需要如下依赖:
- Pytorch 1.3.0
- pytorch_geometric 1.3.2
- torch-cluster==1.4.5
- torch-scatter==1.3.2
- torch-sparse==0.4.3
- gensim
- sklearn
- tqdm
- dill
- pandas
可以通过运行 pip install -r requirements.txt
来安装所有必要的包。
OAG 数据集
当前的实验主要在Open Academic Graph (OAG) 数据集上进行。为了方便使用,我们将整个数据集预处理并划分为不同的粒度:所有计算机科学论文(8.1G)、所有机器学习论文(1.9G)、所有神经网络论文(0.6G),时间跨度从1900年到2020年。
如果希望从原始数据开始处理,可下载相应数据并运行 preprocess_OAG.py
提取特征并存储到我们的数据结构中。
使用方法
要进行论文-领域(L2)分类任务的训练,可以执行以下脚本:
python3 train_paper_field.py --data_dir 数据集路径 --model_dir 保存模型的路径 --conv_name hgt
运行其他任务的方式类似。脚本中有几个关键选项:
conv_name
:选择用于训练的对应模型,默认使用HGT。--sample_depth
和--sample_width
:定义采样图的深度和宽度。如果模型超出了GPU内存,可以考虑减少这些数量;若希望训练更深的GNN模型,可以增加数量。--n_pool
:并行采样的进程数量。如果拥有大内存的机器,可以增加此值以减少批量准备时间。--repeat
:重复使用采样批次的次数。如果训练时间远小于采样时间,可以增加此值。
其他可选超参数的详细信息可以在train_*.py文件中找到。
引用
在将本代码用于您的应用时,请引用以下论文:
@inproceedings{hgt,
author = {Ziniu Hu and
Yuxiao Dong and
Kuansan Wang and
Yizhou Sun},
title = {Heterogeneous Graph Transformer},
booktitle = {{WWW} '20: The Web Conference 2020, Taipei, Taiwan, April 20-24, 2020},
pages = {2704--2710},
publisher = {{ACM} / {IW3C2}},
year = {2020},
}
通过应用HGT,研究人员和开发者可以更好地在复杂的异构图数据上进行分析和预测。这项技术为大规模图分析提供了新的思路和方法。