专栏首页机器之心资源 | 清华大学发布OpenNE:用于网络嵌入的开源工具包

资源 | 清华大学发布OpenNE:用于网络嵌入的开源工具包

选自THUNLP

机器之心编译

参与:刘晓坤、路雪

为了方便大家对网络表示学习(NE/NRL)开展相关的实验或研究,清华大学计算机科学与技术系的研究人员在 GitHub 上发布了 NE/NRL 训练和测试框架 OpenNE,其中统一了 NE 模型输入/输出/评测接口,并且修订和复现了目前比较经典的网络表征学习模型。该项目还在持续开发中,作者还提供了与未扩展模型的比较结果。

项目链接:https://github.com/thunlp/OpenNE

本项目是一个标准的 NE/NRL(Network Representation Learning,网络表征学习)训练和测试框架。在这个框架中,我们统一了不同 NE 模型输入和输出接口,并为每个模型提供可扩展选项。此外,我们还在这个框架中用 TensorFlow 实现了经典 NE 模型,使这些模型可以用 GPU 训练。

我们根据 DeepWalk 的设置开发了这个工具包, 实现和修改的模型包括 DeepWalk、LINE、node2vec、GraRep、TADW 和 GCN。我们还将根据已公布的 NRL 论文发表持续实现更多有代表性的 NE 模型。特别地,我们欢迎其他研究者在该框架中构建 NE 模型到这个工具包中,也会公布项目中的贡献内容。

配置需求

  • numpy==1.13.1
  • networkx==2.0
  • scipy==0.19.1
  • tensorflow==1.3.0
  • gensim==3.0.1
  • scikit-learn==0.19.0

使用

通用选项

如果想查看其它可用的 OpenNE 选项,请输入以下命令:

python src/main.py --help
  • input,一个网络的输入文件;
  • graph-format,输入图的格式,类邻接表或边表;
  • output,表征的输出文件;
  • representation-size,用于学习每个节点的隐维数,默认为 128;
  • method,NE 模型的学习方法,包括 deepwalk、line、node2vec、grarep、tadw 和 gcn;
  • directed,将图转换为定向的;
  • weighted,将图加权;
  • label-file,节点标签的文件;只在测试时使用;
  • clf-ratio,节点分类的训练数据的比例;默认值为 0.5;
  • epochs,LINE 和 GCN 的训练 epoch 数;默认值为 5;

样例

在 BlogCatalog 网络上运行「node2vec」,评估多标签节点分类任务上的学习表征,并在这个项目的主目录上运行以下命令:

python src/main.py --method node2vec --label-file data/blogCatalog/bc_labels.txt --input data/blogCatalog/bc_adjlist.txt --graph-format adjlist --output vec_all.txt --q 0.25 --p 0.25

在 Cora 网络上运行「gcn」,并在多标签节点分类任务上评估学习表征,在这个项目的主目录上运行以下命令:

python src/main.py --method gcn --label-file data/cora/cora_labels.txt --input data/cora/cora_edgelist.txt --graph-format edgelist --feature-file data/cora/cora.features  --epochs 200 --output vec_all.txt --clf-ratio 0.1

特定选项

DeepWalk 和 node2vec:

  • number-walks,每个节点起始的随机行走数目;默认值为 10;
  • walk-length,每个节点起始的随机行走步长;默认值为 80;
  • workers,平行处理的数量;默认值为 8;
  • window-size,skip-gram 模型的 window-size;默认值为 10;
  • q,只用于 node2vec;默认值为 1.0;
  • p,只用于 node2vec;默认值为 1.0;

LINE:

  • negative-ratio,默认值为 5;
  • order,1 为 1 阶模型,2 为 2 阶模型;默认值为 3;
  • no-auto-stop,训练 LINE 时不使用早期停止法;训练 LINE 的时候,对每个 epoch 计算 micro-F1。如果当前的 micro-F1 小于上一个,训练过程将使用早期停止法;

GraRep:

  • kstep,使用 k-step 转移概率矩阵(确保 representation-size%k-step == 0);

TADW:

  • lamb,lamb 是 TADW 中控制正则化项的权重的参数;

GCN:

  • feature-file,节点特征的文件;
  • epochs,GCN 的训练 epoch 数;默认值为 5;
  • dropout,dropout 率;
  • weight-decay,嵌入矩阵的 L2 损失的权重;
  • hidden,第一个隐藏层的单元数量;

输入

支持的输入格式是边表(edgelist)或类邻接表(adjlist):

edgelist: node1 node2 <weight_float, optional>
adjlist: node n1 n2 n3 ... nk

默认图为非定向、未加权。这些选项可以通过设置合适的 flag 进行修改。

如果该模型需要额外的特征,支持的特征输入格式如下(feature_i 指浮点):

node feature_1 feature_2 ... feature_n

输出

带有 n 个节点的图的输入文件有 n+1 行。第一行的格式为:

num_of_nodes dim_of_representation

下面 n 行的格式为:

node_id dim1 dim2 ... dimd

其中,dim1, ... , dimd 是 OpenNE 学到的 d 维表示。

评估

如果你想评估学得的节点表征,你可以输入节点标签。它将使用一部分节点(默认:50%)来训练分类器,在剩余的数据集上计算 F1 得分。

支持的输入标签格式为:

node label1 label2 label3...

与其他实现进行对比

运行环境:CPU: Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz

我们展示了在不同数据集上对不同方法的节点分类结果。我们将表征维度设置为 128,GraRep 中的 kstep=4,node2vec 中 p=1,q=1。

注意:GCN(半监督 NE 模型)和 TADW 需要额外的文本特征作为输入。因此,我们在 Cora 上评估这两个模型,Cora 的每个节点都有文本信息。我们使用 10% 的标注数据来训练 GCN。

BlogCatalog:10312 节点,333983 边缘,39 标签,非定向:

  • data/blogCatalog/bc_adjlist.txt
  • data/blogCatalog/bc_edgelist.txt
  • data/blogCatalog/bc_labels.txt

Wiki:2405 节点,17981 边缘,19 标签,定向:

  • data/wiki/Wiki_edgelist.txt
  • data/wiki/Wiki_category.txt

cora:2708 节点,5429 边缘,7 标签,定向:

  • data/cora/cora_edgelist.txt
  • data/cora/cora.features
  • data/cora/cora_labels.txt

引用

如果 OpenNE 对你的研究有用,请考虑引用以下论文:

@InProceedings{perozzi2014deepwalk,
  Title                    = {Deepwalk: Online learning of social representations},
  Author                   = {Perozzi, Bryan and Al-Rfou, Rami and Skiena, Steven},
  Booktitle                = {Proceedings of KDD},
  Year                     = {2014},
  Pages                    = {701--710}
}

@InProceedings{tang2015line,
  Title                    = {Line: Large-scale information network embedding},
  Author                   = {Tang, Jian and Qu, Meng and Wang, Mingzhe and Zhang, Ming and Yan, Jun and Mei, Qiaozhu},
  Booktitle                = {Proceedings of WWW},
  Year                     = {2015},
  Pages                    = {1067--1077}
}

@InProceedings{grover2016node2vec,
  Title                    = {node2vec: Scalable feature learning for networks},
  Author                   = {Grover, Aditya and Leskovec, Jure},
  Booktitle                = {Proceedings of KDD},
  Year                     = {2016},
  Pages                    = {855--864}
}

@article{kipf2016semi,
  Title                    = {Semi-Supervised Classification with Graph Convolutional Networks},
  Author                   = {Kipf, Thomas N and Welling, Max},
  journal                  = {arXiv preprint arXiv:1609.02907},
  Year                     = {2016}
}

@InProceedings{cao2015grarep,
  Title                    = {Grarep: Learning graph representations with global structural information},
  Author                   = {Cao, Shaosheng and Lu, Wei and Xu, Qiongkai},
  Booktitle                = {Proceedings of CIKM},
  Year                     = {2015},
  Pages                    = {891--900}
}

@InProceedings{yang2015network,
  Title                    = {Network representation learning with rich text information},
  Author                   = {Yang, Cheng and Liu, Zhiyuan and Zhao, Deli and Sun, Maosong and Chang, Edward},
  Booktitle                = {Proceedings of IJCAI},
  Year                     = {2015}
}

@Article{tu2017network,
  Title                    = {Network representation learning: an overview},
  Author                   = {TU, Cunchao and YANG, Cheng and LIU, Zhiyuan and SUN, Maosong},
  Journal                  = {SCIENTIA SINICA Informationis},
  Volume                   = {47},
  Number                   = {8},
  Pages                    = {980--996},
  Year                     = {2017}
}

本文为机器之心编译,转载请联系本公众号获得授权。

本文分享自微信公众号 - 机器之心(almosthuman2014)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-10-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 7 Papers | Hinton、李飞飞各有新作;深度学习硬件性能评价

    1.标题:Lookahead Optimizer: k steps forward, 1 step back

    机器之心
  • Windows文件名非用反斜杠?Python小技巧帮你解决这个麻烦

    在编程过程中,我们往往会遇到一个小麻烦——微软 Windows 系统在文件夹名之间使用反斜杠字符,而几乎所有其它的计算机(操作系统)都使用正斜杠:

    机器之心
  • 资源 | 如何开启深度学习之旅?这三大类125篇论文为你导航(附资源下载)

    选自Github 作者:songrotek 机器之心编译 参与:晏奇、黄小天 如果你现在还是个深度学习的新手,那么你问的第一个问题可能是「我应该从哪篇文章开始...

    机器之心
  • python读txt和xml

    python随着人工智能的火热着实大火了一把,我最近在用python搭一个框架,其中用到一些很基础的功能,跟大家源码分享,不一定能入君法眼,欢迎一起讨论... ...

    企鹅号小编
  • 大数据干货系列(四)-ZooKeeper总结

    ZooKeeper总结 一、本质 ZooKeeper是一个为分布式应用提供一致性服务的软件。 二、ZooKeeper解决了什么问题 1.分布式系统的一致性问题 ...

    企鹅号小编
  • Python教程之正则表达式(基础篇)

    在一篇文档中,你可能很熟悉文本查找,按下‘Ctrl+F’输入你想要查找的词便可以实现。

    灰小猿
  • python下几种打开文件的方式(你习惯

    就可以打开一个文件进行操作。第二个参数为对文件的操作方式,’w’是写文件,已存在的同名文件会被清空,不存在则会创建一个;’r’是读取文件,不存在会报错;’a’是...

    py3study
  • 使用GDAL实现DEM的地貌晕渲图(一)

    以前一直以为对DEM的渲染就是简单的根据DEM的高度不同赋予不同的颜色就可以。后来实际这么做的时候获取的效果跟别的软件相比,根本体现不出地形起伏的变化。如果要体...

    charlee44
  • 在K8S中使用Argo CD做持续部署

    持续部署这个词对技术人员来说并不陌生,很多时候我们都将CI和CD揉在一起了,今天我们将他们分开。

    没有故事的陈师傅
  • React源码解析之completeUnitOfWork

    (1) 关于completeUnitOfWork()在哪里使用到,请看下 React源码解析之workLoop 中的二、performUnitOfWork

    进击的小进进

扫码关注云+社区

领取腾讯云代金券