# 图深度学习工具包 CogDL v0.1:一行即训练

项目链接: https://github.com/THUDM/cogdl

# 前言

结构化数据的表示学习在近年备受关注和热捧,图神经网络成为处理这一应用场景下的有力工具,基于随机游走、矩阵分解的方法也依旧保持着生命力。这些方法在搜索推荐、分子和药物生成领域获得了很大的成功。

但随之而来的问题是,许多论文的代码未开源或者开源代码的风格多种多样,让使用者在使用时碰到各种各样的问题,比如实验复现,以及如何在自己的数据集上运行模型等。那么,如何能够快速便捷地使用这些已有的图表示学习等模型,来复现baseline(基线模型)和将这些模型使用到自定义的数据集或模型上呢?

CogDL 整合和复现了当下流行的图表示学习算法,并且包含了“数据处理-模型搭建-模型训练和验证”全过程的实现,让研究者和使用者能够非常方便地复现已有的benchmark。

有多方便呢?: )

一行命令就可以实现"一条龙"运行实验!

# GCN和GAT在Cora和Citeseer上的实验
python scripts/train.py --task node_classification --dataset cora citeseer --model gcn gat
1
2

同时,CogDL 也支持使用者自定义模型和数据集并嵌入在CogDL的整体框架下,从而帮助使用者提升开发的效率。(具体使用方法见下文)

CogDL 包含了当前许多数据集上SOTA算法的实现,并且仍然处于不断地更新之中。

从此以后,复现图神经网络实验成了最方便和最开心的事情——"一键运行"

# CogDL:面向任务,扩展算法

图表示学习算法可以分成两类:一类是基于图神经网络的算法,包括GCN,GAT,GraphSAGE,DiffPool等,以及适用于异构图的RGCN,GATNE等;另一类是基于Skip-gram或矩阵分解的算法,包括Deepwalk,Node2Vec,HOPE,NetMF等,以及用于图分类的DGK,graph2vec等算法。

CogDL 最特别的一点在于以任务(task)为导向来集成所有的算法,将每一个算法分配在一个或多个任务下,从而构建了“数据处理-模型搭建-模型训练和验证”一条龙的实现。CogDL 将已有的图表示学习算法主要划分为以下任务:

  • 有监督节点分类任务(node classification): 包括GCN,GAT,GraphSAGE,MixHop,GRAND等。
  • 无监督节点分类任务(unsupervised node classification):包括DGI,GraphSAGE(无监督实现),以及 Deepwalk,Node2vec,ProNE等。
  • 有监督图分类任务(graph classification):包括 GIN,DiffPool, SortPool等
  • 无监督图分类任务(unsupervised graph classification):包括InfoGraph, DGK,Graph2Vec等。
  • 链接预测任务(link prediction):包括RGCN,CompGCN,GATNE等。
  • 异构节点分类(multiplex node classification):包括GTN,HAN,Metapath2vec等

CogDL 中还包括了图上的预训练模型GCC。GCC主要利用图的结构信息来预训练图神经网络,从而使得该网络能够迁移到其他数据集上,来取得较好的节点分类和图分类的效果。

# Cogdl 能用来做什么?

  • 跟进SOTA。CogDL跟进最新发布的算法,包含不同任务下SOTA的实现,同时建立了不同任务下所有模型的leaderboard(排行榜),研究人员和开发人员可以通过leaderboard比较不同算法的效果。
  • 复现实验。(这不是一行命令就能解决的事情吗?[手动狗头])论文模型的可复现性是非常重要的。CogDL 通过实现不同论文的模型也是对模型可复现性的一个检验。
  • 自定义模型和数据。“数据-模型-训练”三部分在CogDL中独立的,使用者可以自定义其中任何一部分,并复用其他部分,从而提高开发效率。

# CogDL 怎么用?

  1. 命令行直接运行。通过命令行可以直接指定"task"、"model"、"dataset"以及对应的超参数,并且支持同时指定多个模型和多个数据集,更方便。
# 监督GraphSAGE
python scripts/train.py --task node_classification --dataset pubmed --model graphsage -seed 0 1 2 3 4 5
# 无监督GraphSAGE
python scripts/train.py --task unsupervised_node_classification --dataset pubmed --model unsup_graphsage
# DeepWalk + Node2Vec算法 + BlogCatalog + Wikipedia数据集
python script/train.py --task unsupervised_node_classificatoin --dataset blogcatalog wikipedia --model deepwalk node2vec
1
2
3
4
5
6
  1. 通过API调用。在代码中调用CogDL的数据、模型、任务构建API,方便使用自定义数据集和模型,更灵活。
# 获取模型/数据/训练的参数
args = get_default_args()
args.task = 'node_classification'
args.dataset = 'cora'
args.model = 'gcn'
# 建立数据集
dataset = build_dataset(args)
args.num_features = dataset.num_features
args.num_classes = dataset.num_classes
args.num_layers = 2
# 建立模型
model = build_model(args)
# 训练+验证
task = build_task(args, dataset=dataset, model=model)
ret = task.train()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

完整代码见 https://github.com/THUDM/cogdl/blob/master/examples/gcn.py

CogDL 支持自定义数据集和模型,并且提供了自动调参的例子,具体见:

https://github.com/THUDM/cogdl/tree/master/examples ​ CogDL 项目传送门

https://github.com/THUDM/cogdl ​

# CogDL 0.1.1 Release

  • 监督节点分类任务上,增加了GRAND和DisenGCN。GRAND在 Cora, PubMed, Citeseer上取得了SOTA或者接近SOTA的效果。
  • 无监督节点分类任务上,增加了DGI, MVGRL, GraphSAGE(unsupervised)。
  • 在链接预测任务上,增加了知识图谱上的链接预测GNN模型RGCN和CompGCN。
  • 增加了图上的预训练模型GCC。

另外CogDL 提供了使用optuna进行超参数搜索的example,通过指定"模型,数据集,参数"即可自动实现超参数的搜索。

CogDL 0.1.1 release 具体信息见 https://github.com/THUDM/cogdl/releases/tag/0.1.1