PGL图学习之图游走类metapath2vec模型[系列五]


1.异质图

在图结构中有一个重要概念,同构图和异构图:

同构图:节点类型仅有一种地图

异构图:节点类型有多种地图,举例如下:

异质图介绍在真实世界中,很多的图包含了多种类别节点和边,这类图我们称之为异质图。显然,同构图是异质图中的一个特例,边和节点的种类都是一。异质图比同构图的处理上更为复杂。为了能够处理实际世界中的这大部分异质图,PGL进一步开发了图框架来对异质图模型的支持图神经网络的计算,新增了MetaPath采样支持异质图表示学习。

本节:

举例异质图数据

理解PGL是如何支持异质图的计算

使用PGL来实现一个简单的异质图神经网络模型,来对异质图中特定类型节点分类。

PGL中引入了异质图的支持,新增MetaPath采样支持异质图表示学习,新增异质图MessagePassing机制支持基于消息传递的异质图算法,利用新增的异质图接口,能轻松搭建前沿的异质图学习算法。


以及学术论文


1.1使用PGL创建一个异质图

在异质图中,存在着多种边,我们需要对它们进行区分。使用PGL可以用一下形式来表示边:

edges={'click':[(0,4),(0,7),(1,6),(2,5),(3,6)],'buy':[(0,5),(1,4),(1,6),(2,7),(3,5)],}clicked=[(j,i)fori,jinedges['click']]bought=[(j,i)fori,jinedges['buy']]edges['clicked']=clickededges['bought']=bought由于边的类型不同,边的特征要根据不同类别来区分。导入飞桨框架seed=0(0)(0)num_nodes=len(node_types)node_features={'features':(num_nodes,8).astype("float32")}labels=([0,1,0,1,0,1,1,0])如果遇到报错显示没有,重启项目即可通过堆叠两个HeterMessagePassingLayer创建一个简单的GNN。classHeterGNN():def__init__(self,in_dim,hidden_size,etypes,num_class):super(HeterGNN,self).__init__()_dim=in__size=hidden_=_class=num_=()(HeterMessagePassingLayer(_dim,_size,))(HeterMessagePassingLayer(_size,_size,))=(_size,_class)defforward(self,graph,feat):h=featforiinrange(len()):h=[i](graph,h)logits=(h)returnlogitsprint(_feat["features"])logits=model(g,_feat["features"])loss=criterion(logits,labels)()()_grad()print("epoch:%s|loss:%.4f"%(epoch,()[0]))
epoch:0|loss:1.3536epoch:1|loss:1.1593epoch:2|loss:0.9971epoch:3|loss:0.8670epoch:4|loss:0.7591epoch:5|loss:0.6629epoch:6|loss:0.5773epoch:7|loss:0.5130epoch:8|loss:0.4782epoch:9|loss:0.4551
2.methpath2vec及其变种(原理)

上篇项目讲的deepwalk、node2vec两种方法都是在同构图中进行游走,如果在异构图中游走,会产生下面的问题:

偏向于出现频率高的节点类型

偏向于相对集中的节点(度数高的节点)

因此在异构图中采用methpath2vec算法。

metapath2vec:ScalableRepresentationLearningforHeterogeneousNetworks

论文网址
项目主页
发表时间:KDD2017
论文作者:YuxiaoDong,,AnanthramSwami
作者单位:MicrosoftResearch

Metapath2vec是YuxiaoDong等于2017年提出的一种用于异构信息网络(HeterogeneousInformationNetwork,HIN)的顶点嵌入方法。metapath2vec使用基于meta-path的randomwalks来构建每个顶点的异构邻域,然后用Skip-Gram模型来完成顶点的嵌入。在metapath2vec的基础上,作者还提出了metapath2vec++来同时实现异构网络中的结构和语义关联的建模。

methpath2vec中有元路径(metapath)的概念,含义就是在图中选取的节点类型构成的组合路径,这个路径是有实际意义的,例如以上面的异构图为例,A-P-A代表同一篇论文的两个作者,A-P-C-P-A代表两个作者分别在同一个会议上发表了两篇论文。

2.1前置重要概念: 2.1.1网络嵌入;异构图/同构图 1)网络嵌入NetworkEmbedding

针对网络嵌入的相关工作主要有两大部分构成,一部分是图嵌入,一部分是图神经网络。图嵌入方面的相关代表有Deepwalk、LINE、Node2vec以及NetMF,Deepwalk源于NLP(自然语言处理)方面的Word2vec,将Word2vec应用到社交网络体现出了良好的效果,LINE主要是针对大规模网络,Node2vec是在Deepwalk的随机游走上进行了改进,使得游走不再变得那么随机,使得其概率可控,具体就不做过多赘述。对于图神经网络,GCN通过卷积神经网络结合了邻居节点的特征表示融入到节点的表示中,GraphSAGE它就是一个典型的生成式模型,且它结合了节点的结构信息,而且,它不是直接为每个节点生成嵌入,而是生成一个可以表示节点嵌入的函数表示形式,这样的模型,也就是这种生成式模型,有助于它在训练期间对未观察到的节点进行归纳和判断。

2)同构Homogeneous与异构Heterogeneous

Heterogeneity:表示节点/边的单类还是多类
Heterogeneous/Heterogeneous:表示节点是单类还是多类
为了区分,论文添加了

Multiplex:表示边是单类还是多类

Attribute:是否是属性图,图的节点是否具有属性信息

根据图结构(同构/异构)以及是否包含节点特征,作者将图分为如下六类(缩写):

同构图:HOmogeneousNetwork(orHON),

属性同构图AttributedHOmogeneousNetwork(orAHON),

点异构图HEterogeneousNetwork(orHEN),

属性点异构图AttributedHEterogeneousNetwork(orAHEN),

边异构图MultiplexHEterogeneousNetwork(orMHEN),

带节点属性的异构图AttributedMultiplexHEterogeneousNetwork(orAMHEN)

论文归纳了以及每一种网络类型对应的经典的研究方法,如下表:


3)节点属性的异构图AMHEN


传统的graphembedding算法比如DeepWalk的做法会忽略图中边的类型以及节点的特征,然后转换成一个HON。
如果将边的类型考虑进去,那么就得到一个MHEN,能够取得非常明显的效果。
此外,如果将节点的属性也同时考虑进去,那么就利用了原图的所有信息,可以得到最好的效果。

4)AMHEN嵌入难点

除了异构性和多样性外,处理AMHEN也面临着多重挑战:

多路复用的边(MultiplexEdges):每个节点对可能含有多种不同的类型边,如何将不同的关系边进行统一嵌入;

局部交互(PartialObservations):存在大量的长尾客户(可能只与某些产品进行很少的交互);

归纳学习(Inductive):如何解决冷启动问题;

可扩展性(Scalability),如何拓展到大规模网络中。

2.1.2信息网络(InformationNetwork)

信息网络(InformationNetwork)是指一个有向图G=(V,E),同时还有一个object类型映射函数$\phi:V\to\mathcal{A}$,边类型映射函数$\psi:E\to\mathcal{R}$。每一个object$v\inV$,都有一个特定的object类型$\phi(v)\in\mathcal{A}$;每一条边$e\inE$都有一个特定的relation$\psi(e)\in\mathcal{R}$。异质网络(HeterogeneousNetwork)指的是object的类型$|\mathcal{A}|1$或者relation的类型$|\mathcal{R}1|$。

2.1.3网络模式(Networkschema)

网络模式(Networkschema),定义为:$T_G=(\mathcal{A,R})$,是信息网络G=(V,E)的一种meta模板,这个信息网络有一个object类型映射函数$\phi:V\to\mathcal{A}$和link类型映射函数$\psi:E\to\mathcal{R}$。信息网络G是一个定义在object类型$\mathcal{A}$上的有向图,并且边是$\mathcal{R}$中的relation。


2.1.4元路径(MetaPath)

MetaPath是2011年YizhouSunetc.在MiningHeterogeneousInformationNetworks:PrinciplesandMethodologies提出的,针对异质网络中的相似性搜索。MetaPath是一条包含relation序列的路径,而这些relation定义在不同类型object之间。

元路径P是定义在网络模式TG=(A,R)上的,如$A1→^RA2→^RA3…→^RA{l+1}$表示了从$A1$到$A{l+1}$的复杂的关系,$R=R1∘R2∘R3∘Rl。$元路径P的长度即为关系R的个数.

确定元路径的意义在于我们会根据确定的元路径进行随机游走,如果元路径没有意义,会导致后续的训练过程中无法充分体现节点的意义,元路径通常需要人工进行筛选。

在基于元路径的游走过程中,只要首尾节点类型相同,就可以继续游走,直到达到最大游走长度或者找不到指定要求的节点。通常来说,元路径是对称的。

如何高效根据上下文信息表征不同类型的节点?

能否用Deepwalk或者Node2Vec来学习网络中的节点?

能否直接将应用于同构网络的Embedding模型直接应用于异构网络?

解决诸如此类的挑战,有利于更好的在异构网络中应用多种网络挖掘任务:

传统的方法都是基于结构特征(如元路径meta-path)来求相似性,类似的方法有PathSim、PathSelClus、RankClass等:

但这种方式挖掘出来的元路径(如“APCPA”)经常会出现相似度为0的情况。如果我们能够将Embedding的思想应用于异构网络,则不会再出现这种情况。

基于这种观察,作者提出了两个可以应用于异构网络的GraphEmbedding的算法模型——metapath2vec以及metapath2vec++。

问题定义ProblemDefinition

Definition1:异质网络(HeterogeneousNetwork):

Definition2:异质网络表示学习(HeterogeneousNetworkRepresentationLearning):

2.2Metapath2vec框架


2.3Metapath2vec++框架

methpath2vec的变种:

methpath2vec++:在负采样时考虑节点类型

multi-methpath2vec++:针对多条元路径进行游走

sideinfo+multi-methpath2vec++:在获取元路径的基础上考虑了节点的特征

metapath2vec在为每个顶点构建领域时,通过meta-path来指导随机游走过程向指定类型的顶点进行有偏游走。但是在softmax环节中,并没有顶点的类型,而是将所有的顶点认为是同一种类型的顶点。换言之,metapath2vec在NegativeSampling环节采样的negative样本并没有考虑顶点的类型,也就是说metapath2vec支持任意类型顶点的NegativeSampling。于是作者在metapath2vec的基础上又提出了改进方案metapath2vec++。

2.3.1HeterogeneousNegativeSampling

在metapath2vec++中,softmax函数根据不同类型的顶点的上下文$c{t}$进行归一化。也就是说$p\left(c{t}\midv;\theta\right)$根据固定类型的页点进行调整。即:$p\left(c{t}\midv;\theta\right)=\frac{e^{X{c{t}}\cdotX{v}}}{\sum{u{t}\inV{t}}e^{X{u{t}}\cdotX{v}}}$

其中$V_{t}$是网络中$t$类型顶点集合。在这种情况下,metapath2vec++为Skip-Gram模型的输出层中的每种类型的领域指定了一个多项式分布的集合。而在metapath2vec,DeepWalk和node2vec中,Skip-Gram输出多项式分布的维度等于蜂个网络中顶点的数目,然而对于metapath2vec++的Skip-Gram,其针对特定类型的输出多项式的维度取决于网络中当前类型顶点的数目。如下图示。



3.分布式图引擎(快速入门)

因为会存在许多无法在一台机器上加载的巨大图,例如社交网络和引文网络。为了处理这样的图,PGL开发了一个分布式图引擎框架来支持大规模图网络上的图采样,以进行分布式GNN训练。

下面将介绍执行分布式图引擎以进行图采样的步骤。

如何启动分布式图引擎服务的示例:

假设我们有一个下图,它有两种类型的节点(u和t)。

首先,我们应该创建一个配置文件并指定每台机器的ip地址。这里我们使用两个端口来模拟两台机器。

创建配置文件和ip地址文件后,我们现在可以启动两个图形服务器。

然后我们可以使用客户端从图服务器中采样邻居或采样节点。

4methpath2vec(实践) 4.1数据集介绍

将所有数据和代码下载到一个zip文件中---,包括以下B、C、D、E和F部分(DropBox|百度云)。

Bibtex:@inproceedings{dong2017metapath2vec,title={metapath2vec:异构网络的可扩展表示学习},author={Dong,YuxiaoandChawla,NiteshVandSwami,Ananthram},booktitle={KDD'17},pages={135--144},年份={2017},组织={ACM}}

引用:YuxiaoDong、和AnanthramSwami。2017.metapath2vec:异构网络的可扩展表示学习。在KDD'17中。135–144。

原始网络数据

AMiner计算机科学(CS)数据:CS数据集由1,693,531名计算机科学家和3,194,405篇论文组成,来自3,883个计算机科学场所——包括会议和期刊——截至2016年。我们构建了一个异构协作网络,其中有是三种类型的节点:作者、论文和地点。

Citation:JieTang,JingZhang,LiminYao,JuanziLi,LiZhang,:'08.990–998.

数据库和信息系统(DBIS)数据:DBIS数据集由Sun等人构建和使用。它涵盖了464个场所、其前5000位作者以及相应的72,902篇出版物。我们还从DBIS构建了异构协作网络,其中一个链接可以连接两位作者,一位作者和一篇论文,以及一篇论文和一个地点。

Citation:YizhouSun,JiaweiHan,XifengYan,,:Metapa'11.992–1003.

4.2PGL实现metapath2vec算法

利用PGL来复现metapath2vec模型。和前面xxx2vec的方法类似,先做网络嵌入系数矩阵的训练,然后使用训练好的矩阵在做预测。

包含了对图数据进行深度游走生成walks等接口

包含用于训练metapath2vec的skipgram模型定义

包含了对配置文件的读取接口超参数

所有超参数都保存在文件中,所以在训练之前,你可以打开来修改你喜欢的超参数。

PGL图形引擎启动

现在我们支持使用PGLGraphEngine分布式加载图数据。我们还开发了一个简单的教程来展示如何启动图形引擎

要启动分布式图服务,请按照以下步骤操作。

1)IP地址设置

第一步是为每个图形服务器设置IP列表。每个带有端口的IP地址代表一个服务器。在ip_文件中,我们为演示设置了4个IP地址如下:

127.0.0.1:8553127.0.0.1:8554127.0.0.1:8555127.0.0.1:8556

2)通过OpenMPI启动图形引擎

在启动图形引擎之前,您应该在中设置以下超参数:

etype2files:"p2a:./graph_data/paper2author_,p2c:./graph_data/paper2conf_"ntype2files:"p:./graph_data/node_,a:./graph_data/node_,c:./graph_data/node_"symmetry:Trueshard_num:100

然后,我们可以在OpenMPI的帮助下启动图形引擎。

_config./ip_/_num100

手动启动图形引擎如果您没有安装OpenMPI,您可以手动启动图形引擎。

Fox示例,如果我们要使用4个服务器,我们应该在4个终端上分别运行以下命令。

_config./ip_/_num100--server__config./ip_/_num100--server_id0
6.总结

介绍了异质图,利用pgl对metapath2vec、metapath2vec进行了实现,并给出了多个框架版本的demo满足个性化需求

metapath2vec是一种用于异构网络中表示学习的算法框架,其中包含多种类型的节点和链接。给定异构图,metapath2vec算法首先生成基于元路径的随机游走,然后使用skipgram模型训练语言模型。基于PGL重现了metapath2vec算法,用于可扩展的表示学习。