节点分类任务中的引文网络benchmark
参考:
- 《A Comprehensive Survey on Graph Neural Networks》
- 《Graph Representation Learning》
引文网络及其数据集
引文网络由论文、作者及其引用关系组成。在引文网络中,论文(节点)通过引用关系(边)相互链接,这些论文需要被分为不同的组/类别。这种连接关系也反映了图数据的一个特点——节点之间是不符合 i . i . d . i.i.d. i.i.d.的,它们通过边和其他节点相关联。
尽管引文网络是有向图,但在评估模型在节点分类、链接预测和节点聚类任务方面的性能时,通常将其视为无向图。区别于多关系图(知识图谱),引文网络是只包含单一引用关系的简单图,一般来说没有边特征(edge feature)。
目前有三个流行的引文网络数据集:Cora、Citeseer和Pubmed。这些benchmark由Kipf和Welling在GCN模型的paper中推出。
Kipf T N, Welling M. Semi-supervised classification with graph convolutional networks[J]. arXiv preprint arXiv:1609.02907, 2016.
Cora数据集包含2708种机器学习出版物,分为7类。Citeseer数据集包含3327篇科学论文,分为6类。Cora和Citeseer中的每一篇论文都用一个one-hot向量来表示字典中是否有某一个单词。Pubmed数据集包含19717份糖尿病相关出版物。Pubmed中的每篇论文都由一个术语频率逆文档频率(TF-IDF)向量表示。
Cora、Citeseer和Pubmed数据集中都给出了以下内容(经过预处理的第二版数据集,所有的节点都有标签):
- x:训练节点的特征向量(子图)
- tx:测试节点的特征向量(子图)
- allx:训练+验证节点的特征向量(子图)
- allx + tx = 全图的节点特征矩阵
- y:训练节点的one-hot标签(子图)
- ty:测试节点的one-hot标签(子图)
- ally:训练+验证(allx中)节点的one-hot标签(子图)
- ally + ty = 全图的节点one-hot标签
- graph:字典{ 节点索引id:[邻居节点的索引id] }(全图)
- graph和allx、ally的节点顺序一致
- test_index:测试节点在graph中的索引/指示
当然,PyG中已经把细节都屏蔽掉了,我们可以直接调用封装好的函数载入数据集。
详细可参考我的这篇博客:PyG下载、处理、探索Cora、Citeseer、Pubmed数据集【PyTorch geometric】。
这样,我们需要关注的东西就是这几个了:边表edge_index、节点特征矩阵x、节点的标签y、训练/验证/测试集的划分。
Data(edge_index=[2, 10556], test_mask=[2708], train_mask=[2708], val_mask=[2708], x=[2708, 1433], y=[2708])
此外,DBLP是一个庞大的引文数据集,从计算机科学文献中收集了数以百万计的论文。
节点分类任务中的引文网络
节点分类,顾名思义,是对节点所属的类别进行预测,它也是评估GNN性能的常用任务。
上面提到的4中引文网络数据集中,由于DBLP并没有给出节点的标签(所属的类别),所以在节点分类任务使用的引文网络数据集一般是Cora、Citeseer和Pubmed。这3个数据集中的每一篇论文或出版物,都给出了所属类别和特征信息,因此,节点分类任务一般使用半监督的学习方法,也可以称为归纳学习。一般只用一小部分被标记的节点进行模型的训练,测试节点在训练过程中不可见(unseen),以达到归纳学习的目的。
在节点分类中,大多数方法都遵循对引文网络benchmark(Cora、Citeseer、Pubmed等)的train/valid/test的标准划分:https://github.com/kimiyoung/planetoid (Zhilin Yang, William W. Cohen, Ruslan Salakhutdinov, Revisiting Semi-Supervised Learning with Graph Embeddings, ICML 2016)
Yang Z, Cohen W, Salakhudinov R. Revisiting semi-supervised learning with graph embeddings[C]//International conference on machine learning. PMLR, 2016: 40-48.
数据集划分(数量) | 训练集 | 验证集 | 测试集 |
---|---|---|---|
Cora | 140 | 500 | 1000 |
Citeseer | 120 | 500 | 1000 |
Pubmed | 60 | 500 | 1000 |
在节点分类任务中,模型的隐藏层一般会堆叠多个Gconv层来提取高级的节点表示,最后使用softmax或MLP作为输出层,这些输出的节点表示一般会被用来进行节点的多分类任务。
不同方法进行节点分类任务的实验结果总结。
至于模型好坏的衡量标准:对于Cora、Citeseer、Pubmed,一般使用平均准确度;对于PPI、Reddit,一般使用F1分数(在sklearn库中有现成的方法、其实和准确率相差不大)。
应该注意的是,这些结果不一定代表严格的比较。Shchur等人在评估GNNs节点分类性能时发现了两个缺陷。首先,在所有实验中使用相同的训练/有效/测试分割低估了泛化误差。第二,不同的训练方法采用不同的训练技术,如超参数、参数初始化、学习率等。
为了进行相对公平的比较,可以参考Shchur等人的文献。
Shchur O, Mumme M, Bojchevski A, et al. Pitfalls of graph neural network evaluation[J]. arXiv preprint arXiv:1811.05868, 2018.