OpenNE-Pytorch:开源网络嵌入工具包
2020-07-14

OpenNE-Pytorch是对网络嵌入开源工具包OpenNE的一次整体升级,本次升级将之前的工具包从TensorFlow版本全面迁移至PyTorch,而且从代码、使用、结构和效率等方面进行了全面优化,让工具包更加易于使用、定制、阅读和进一步开发,同时使运行速度和模型效果得到大幅提升。新的工具包被命名为OpenNE-Pytorch。

本次升级后,OpenNE-Pytorch主要包含了三个新特性,包括了提供统一代码框架、实现代码模块化以及运行结果高效准确。如需参考工具包中提供的各种方法的相关论文,可参考网络表示学习论文列表NRLPapers以及图神经网络论文列表GNNPapers。

工具包地址:https://github.com/thunlp/OpenNE/tree/pytorch

Pytorch工具包.png

NRLPapers:https://github.com/thunlp/NRLPapers

NRLPapers.png

GNNPapers:https://github.com/thunlp/GNNPapers

GNNPapers.png

总体介绍

OpenNE-Pytorch主要关注无监督/自监督图表示学习方法,并提供了统一的代码框架。工具包整合了目前流行的节点分类算法,包括无监督的网络表示学习(Network Embedding)方法:LINE[1]、GraphFactorization[2]、DeepWalk[3]、Node2Vec[4]、HOPE[5]、GraRep[6]、SDNE[7]、LLE[8]、Lap[9]、TADW[10],以及最近基于图神经网络(Graph Neural Network)的自监督表示学习方法:GAE/VGAE[11]。

项目将上述模型在多个数据集上的节点分类任务进行了评测,旨在为研究和开发人员提供便利有效的算法实现。

实现细节

新版OpenNE将模型实现代码模块化,并将训练过程中的代码划分为三个部分,并由三个类来具体控制,分别是图数据集、模型和任务。
派生自torch.utils.data.Dataset的图数据集类负责加载并处理图,支持从网络资源下载数据集(派生自NetResources)或直接从本地加载(派生自LocalFile)。基类Graph通过read()函数读取本地文件,提供了邻接表、边列表、节点标签、节点特征向量文件的读取方式。Graph用networkx对象存储图,同时提供了邻接矩阵和特征向量矩阵的接口。

Graph派生关系.png

Graph派生关系
派生自torch.nn.Module的模型类负责实现具体的模型和训练过程。调用模型类的forward()时,该类通过build()导入图和训练参数建立模型,用train_model()进行训练。

节点分类任务根据监督和无监督分为两个任务类,它们通过check()检查用户输入的训练参数是否合法,通过train()结合训练参数、模型、图进行训练,并通过evaluate()进行评估。

总体流程图.png

总体流程图

分工明确的三个模块使得数据准备、训练、测试被分为相对独立的三部分,它们都有易于调用的接口,便于编写命令、开发扩展功能。

实验结果

我们在Cora数据集上对比了新旧版本中默认参数下11个模型的表现,发现与旧版结果相比,新版工具包运行结果高效准确。工具包在Cora上的结果如下:

微信图片_20200730153804.png

我们还测试了新版本的7个模型在wiki和BlogCatalog上的表现,结果如下:

Wiki数据集结果.png

Wiki数据集结果

BlogCatalog数据集结果.png

BlogCatalog数据集结

使用说明

在训练时,只需在OpenNE/src中运行:python -m openne --model gf --dataset blogcatalog,其中--model和--dataset后可以替换成任意其他已有模型和数据集。     

还可以指定--local-dataset使用自己的数据集,如:python -m openne --model gf --local-dataset --root-dir mydatasetdir --edgefile edges.txt --labelfile --labels.txt

更详细的参数配置参见readme.md。

结语

我们的工具包将继续关注在无监督/自监督图表示学习领域,并预计进行下面的升级与更新:

  • 增加新的模型与算法,比如NetMF[15]、NetSMF[16]、ARGA/ARVGA[12]、GALA[13]以及AGE[14]等。这些新模型的相关论文也将会包含在组里两个相关的论文列表NRLPapers和GNNPapers中。
  • 增加新的评测任务,如链接预测与图聚类。

敬请关注OpenNE-Pytorch项目与后续更新,也欢迎在issue中提出意见、提交与贡献您的代码

开发团队

杜雨峰:清华大学计算机系本科生,https://github.com/Bznkxs

崔淦渠:清华大学计算机系硕士生,https://github.com/cgq15

周界:清华大学计算机系硕士生,https://github.com/jayzzhou-thu

指导教师

孙茂松:清华大学计算机系教授,http://nlp.csai.tsinghua.edu.cn/staff/sms/

刘知远:清华大学计算机系副教授,http://nlp.csai.tsinghua.edu.cn/~lzy/

杨成:北京邮电大学助理教授,http://nlp.csai.tsinghua.edu.cn/~yangcheng/

相关论文

[1] Tang, J., Qu, M., Wang, M., Zhang, M., Yan, J., & Mei, Q. (2015, May). Line: Large-scale information network embedding. In Proceedings of the 24th international conference on world wide web (pp. 1067-1077).

[2] Ahmed, A., Shervashidze, N., Narayanamurthy, S., Josifovski, V. and Smola, Alexander J. (2013, May). Distributed large-scale natural graph factorization. In Proceedings of the 22nd international conference on World Wide Web (pp.37-48).

[3] Perozzi, B., Al-Rfou, R. and Skiena, S. (2014, August). DeepWalk: Online learning of social representations. In Proceedings of KDD (pp.701-710).

[4] Grover, A. and Leskovec, J. (2016, August). node2vec: Scalable feature learning for networks. In Proceedings of KDD (pp.855-864).

[5] Ou, M., Cui, P., Pei, J., Zhang, Z. and Zhu, W. (2016, August). Asymmetric transitivity preserving graph embedding. In Proceedings of the 22nd ACM SIGKDD (pp.1105-1114).

[6] Cao, S., Liu, W. and Xu, Q. (2015, October). Grarep: Learning graph representations with global structural information. In Proceedings of CIKM (pp.891-900).

[7] Wang, D., Cui, P. and Zhu, W. (2016, August). Structural deep network embedding. In Proceedings of the 22nd ACM SIGKDD international conference on Knowledge discovery and data mining (pp.1225-1234). 

[8] Roweis, S. T., and Saul, L. K. (2000). Nonlinear Dimensionality Reduction by Locally Linear Embedding. In Science 290.5500 (pp.2323-2326).

[9] Belkin, M. and Niyogi, P. (2002). Laplacian eigenmaps and spectral techniques for embedding and clustering. In Advances in neural information processing systems (pp.585-591).

[10] Yang, C., Liu, Z., Zhao, D., Sun, M. and Chang, E. (2015, July). Network representation learning with rich text information. In Proceedings of IJCAI (pp.2111-2117).

[11] Kipf, Thomas N and Max Welling. (2016). Variational graph auto-encoders. In NIPS Workshop on Bayesian Deep Learning.

[12] Pan, S., Hu, R., Long, G., Jiang, J., Yao, L. and Zhang, C. (2018). Adversarially Regularized Graph Autoencoder for Graph Embedding. In Proceedings of IJCAI (pp.2609-2615).

[13] Park, J., Lee, M., Chang, H. J., Lee, K. and Choi, J. Y. (2019).

Symmetric graph convolutional autoencoder for unsupervised graph representation learning. In Proceedings of ICCV (pp.6519-6528).

[14] Cui, G., Zhou, J., Yang, C. and Liu Z. (2020). Adaptive Graph Encoder for Attributed Graph Embedding. https://arxiv.org/abs/2007.01594.

[15] Qiu, J., Dong, Y., Ma, H., Li, J., Wang, K., & Tang, J. (2018, February). Network embedding as matrix factorization: Unifying deepwalk, line, pte, and node2vec. In Proceedings WSDM (pp. 459-467).

[16] Qiu, J., Dong, Y., Ma, H., Li, J., Wang, C., Wang, K., & Tang, J. (2019, May). Netsmf: Large-scale network embedding as sparse matrix factorization. In Proceedings of WWW (pp. 1509-1520).