Representation Learning for Attributed Multiplex Heterogeneous Network 论文阅读笔记

摘要部分网络嵌入(图嵌入)在真实世界中已经有了非常大规模的应用,然而现存的一些网络嵌入(图嵌入)相关的方法主要还是集中在同质网络的应用场景下,即节点和边的类型都是单一类型的情况下。但是真实世界网络中每个节点的类型都多种,每条边的类型也有多种,而且每一个节点都具有不同且繁多的属性。所以本论文提出了一种在Attributed Multiplex Heterogeneous Network中进行嵌入...
摘要由CSDN通过智能技术生成

摘要部分

网络嵌入(图嵌入)在真实世界中已经有了非常大规模的应用,然而现存的一些网络嵌入(图嵌入)相关的方法主要还是集中在同质网络的应用场景下,即节点和边的类型都是单一类型的情况下。但是真实世界网络中每个节点的类型都多种,每条边的类型也有多种,而且每一个节点都具有不同且繁多的属性。所以本论文提出了一种在Attributed Multiplex Heterogeneous Network中进行嵌入学习的统一框架,并提供了充分了数学理论分析,还在数据集Amazon, YouTube, Twitter, and Alibaba上进行了大量的实验。实验结果表明,利用此框架学习到的嵌入有惊人的性能提升,F1 scores可提高5.99-28.23%,而且该框架还成功地部署在全球领先的电子商务公司阿里巴巴集团的推荐系统上。对产品推荐进行离线A/B测试的结果进一步证实了该框架在实践中的有效性和效率。

 

代码

https://github.com/cenyk1230/GATNE

 

引入

网络嵌入或网络表示学习是一种在保持网络结构和固有属性的同时,将网络中的节点映射到低维连续空间的一种很有前景的方法。最近,由于下游网络学习任务如节点分类、链路预测和社区检测的显著进步,它引起了极大的关注。Deepwalk、LINE和Node2VEC,是将深度学习技术引入网络分析以学习节点嵌入的开拓性工作。NetMF[29]对不同的网络嵌入算法给出了等价的理论分析,之后的NetSMF[28]通过稀疏化给出了可扩展的解决方案。尽管如此,它们被设计成只处理具有单一类型节点和边缘的同构网络。现实世界的网络结构应用,如电子商务,则要复杂得多,不仅包括多类型的节点和或边缘,还包括一组丰富的属性。由于其重要性和挑战性的要求,在研究复杂网络嵌入学习的文献中进行了大量的尝试。根据网络拓扑结构(同质或异构)和属性(有无属性),我们对六种不同类型的网络进行了分类,并分别总结了它们的相对综合发展,分别在表1中分为不带属性的同质网络(或HUN)、带属性的同构网络(或AHON)、不带属性的异构网络(或HEN)、带属性的异构网络(或AHEN)、多重异构网络(或MHEN)和属性复用异构网络(或AMHEN)。可以看出,最后一种,即对节点多类型、边多类型且带权重的异质网络的研究最少。

 

例如,在电子商务系统中,用户可以与项目进行多种类型的交互,如单击、转换、添加到购物车、添加到首选项。图1说明了这样一个例子。显然,“使用者”和“物品”具有本质上不同的性质,不应受到平等对待。此外,不同的用户项交互意味着不同的兴趣水平,应该给予不同的待遇。否则,系统无法精确地捕获用户的行为模式和偏好,不足以实际使用。

 

挑战:

 

 

左边举例说明了一个属性化多工异构网络的示例。图形左边的用户与属性相关联,包括性别、年龄和位置。同样,图中左边的项目包括价格和品牌等属性。用户和项之间的边缘类型来自四个交互,包括单击、加载项首选项、添加到购物车和转换。中间的三个子图代表了三种不同的图形设置方式,包括自下而上的HUN、MHEN和AMHEN。右边部分展示了在阿里巴巴数据集上所提出的模型在深度行走上的性能改进。可以看到,与深度行走相比,Gatne-I的性能提升了28.23%。

 

此图总结了当前研究领域中的6大网络类型,以及每一种网络类型对应的经典的研究方法。(非常重要)清楚地告诉我们当前的研究领域中,哪些研究领域还研究得不够,便于我们深入研究和学习。

 

=====================================================================

最近更新(2020年2月21日)

=====================================================================

 

网络嵌入相关研究领域

1. Network Embedding

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

2. Heterogeneous NetworkEmbedding

异构网络具有各种类型的节点和/或边缘的场景。众所周知,这种网络很难挖掘,因为异质内容和结构的组合是很多的。创建这样的数据的多维嵌入,为多种现成的多维数据挖掘技术打开了大门。尽管这一问题很重要,但在嵌入动态和异构数据的可伸缩网络方面所做的努力有限。HNE就在网络中加入了内容信息以及网络拓扑结构信息来表示异质网络中的不同节点,PTE是从标记信息和不同层次的单词共现信息构建大规模异构文本网络,然后再嵌入到低维空间中,metapath2vec中又提出了一种基于异质网络的元路径的随机游走法则,根据人为规定的Pattern(模式)进行游走,再使用异质的skip-gram对元路径上的每个节点嵌入表示,HERec提出了基于随机游走策略产生一个有一定意义的节点序列,然后再去学习首先由一组融合函数转换并随后集成到扩展矩阵因式分解(M F)模型中的网络嵌入

3. Multiplex Heterogeneous Network Embedding

现有的方法,通常研究节点之间只具有单一关系的网络,且它只捕获网络的单个视图。然而&

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
"Structure-Aware Transformer for Graph Representation Learning"是一篇使用Transformer模型进行图表示学习的论文。这篇论文提出了一种名为SAT(Structure-Aware Transformer)的模型,它利用了图中节点之间的结构信息,以及节点自身的特征信息。SAT模型在多个图数据集上都取得了非常好的结果。 以下是SAT模型的dgl实现代码,代码中使用了Cora数据集进行示例: ``` import dgl import numpy as np import torch import torch.nn as nn import torch.nn.functional as F class GraphAttentionLayer(nn.Module): def __init__(self, in_dim, out_dim, num_heads): super(GraphAttentionLayer, self).__init__() self.num_heads = num_heads self.out_dim = out_dim self.W = nn.Linear(in_dim, out_dim*num_heads, bias=False) nn.init.xavier_uniform_(self.W.weight) self.a = nn.Parameter(torch.zeros(size=(2*out_dim, 1))) nn.init.xavier_uniform_(self.a.data) def forward(self, g, h): h = self.W(h).view(-1, self.num_heads, self.out_dim) # Compute attention scores with g.local_scope(): g.ndata['h'] = h g.apply_edges(fn.u_dot_v('h', 'h', 'e')) e = F.leaky_relu(g.edata.pop('e'), negative_slope=0.2) g.edata['a'] = torch.cat([e, e], dim=1) g.edata['a'] = torch.matmul(g.edata['a'], self.a).squeeze() g.edata['a'] = F.leaky_relu(g.edata['a'], negative_slope=0.2) g.apply_edges(fn.e_softmax('a', 'w')) # Compute output features g.ndata['h'] = h g.update_all(fn.u_mul_e('h', 'w', 'm'), fn.sum('m', 'h')) h = g.ndata['h'] return h.view(-1, self.num_heads*self.out_dim) class SATLayer(nn.Module): def __init__(self, in_dim, out_dim, num_heads): super(SATLayer, self).__init__() self.attention = GraphAttentionLayer(in_dim, out_dim, num_heads) self.dropout = nn.Dropout(0.5) self.norm = nn.LayerNorm(out_dim*num_heads) def forward(self, g, h): h = self.attention(g, h) h = self.norm(h) h = F.relu(h) h = self.dropout(h) return h class SAT(nn.Module): def __init__(self, in_dim, hidden_dim, out_dim, num_heads): super(SAT, self).__init__() self.layer1 = SATLayer(in_dim, hidden_dim, num_heads) self.layer2 = SATLayer(hidden_dim*num_heads, out_dim, 1) def forward(self, g, h): h = self.layer1(g, h) h = self.layer2(g, h) return h.mean(0) # Load Cora dataset from dgl.data import citation_graph as citegrh data = citegrh.load_cora() g = data.graph features = torch.FloatTensor(data.features) labels = torch.LongTensor(data.labels) train_mask = torch.BoolTensor(data.train_mask) val_mask = torch.BoolTensor(data.val_mask) test_mask = torch.BoolTensor(data.test_mask) # Add self loop g = dgl.remove_self_loop(g) g = dgl.add_self_loop(g) # Define model and optimizer model = SAT(features.shape[1], 64, data.num_classes, 8) optimizer = torch.optim.Adam(model.parameters(), lr=0.005, weight_decay=5e-4) # Train model for epoch in range(200): model.train() logits = model(g, features) loss = F.cross_entropy(logits[train_mask], labels[train_mask]) optimizer.zero_grad() loss.backward() optimizer.step() acc = (logits[val_mask].argmax(1) == labels[val_mask]).float().mean() if epoch % 10 == 0: print('Epoch {:03d} | Loss {:.4f} | Accuracy {:.4f}'.format(epoch, loss.item(), acc.item())) # Test model model.eval() logits = model(g, features) acc = (logits[test_mask].argmax(1) == labels[test_mask]).float().mean() print('Test accuracy {:.4f}'.format(acc.item())) ``` 在这个示例中,我们首先加载了Cora数据集,并将其转换为一个DGL图。然后,我们定义了一个包含两个SAT层的模型,以及Adam优化器。在训练过程中,我们使用交叉熵损失函数和验证集上的准确率来监控模型的性能。在测试阶段,我们计算测试集上的准确率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值