首发于图计算
异构图embedding学习,舍HetGNN其谁?

异构图embedding学习,舍HetGNN其谁?

图嵌入领域,同构图算法大行其道,如:DeepWalk、Node2vec、GCN、GraphSage、GAT。但实际业务场景中异构图居多,除了经典的MetaPath2vec、RGCN,貌似其他选项并不多,今天就为大家介绍一款异构图嵌入学习神器---HetGNN。


HetGNN简介

提出的网络名称:HetGNN(Heterogeneous Graph Neural Network),2019 SIGKDD

核心理念:heterogeneous structural graph information + heterogeneous attributes or contents for each node

异构图嵌入学习

异构图算法相较同构图算法有如下三方面挑战:

  • 如何对一个节点的异构邻居进行采样,参见C1
  • 如何对异构节点的异构内容设计内容编码器,参见C2
  • 聚合异构邻居时,如何考虑不同节点类型的权重,参见C3
图1 异构图嵌入学习

异构图表示学习问题定义:

HetGNN算法

为了解答上述C1、C2、C3,我们提出HetGNN算法,其有如下四个步骤:

  • 对异构邻居进行采样
  • 对异构内容进行编码
  • 聚合异构邻居信息(同类型邻居聚合+类型聚合)
  • 目标函数和模型训练
图2 HetGNN 架构图

接下来,让我们一起对各部分进行详细剖析。

1.对异构邻居进行采样

  • step1:采样固定长度的RWR,RWR是指从v开始生成随机游走序列,但每一小步操作是遍历当前节点的邻居或以概率p回到起始点。
  • step2:把邻居按类型分组,对节点类型t来说,把RWR(v)中的词频前top k_t个节点作为v的关系t的相关邻居。

2.对异构内容进行编码

说明:不同的节点类型,其content类型很可能不相同(text、image、attributes)。一般text需经Par2Vec预训练,image需经CNN预训练。

  • step1:把不同类型的content经过训预练或者数值化处理。
  • step2:将step1的结果分别应用不同的FC进行转换,统一输出维度。
  • step3:将step2的结果喂入Bi-LSTM模型,将特征进行交叉,增强特征表达能力。
  • step4:对step3的各隐层输出应用mean pooling,生成节点的最终embedding表达。

读者可参考图2中的(b) NN-1进行理解,具体的数学表达式如下:

3.聚合异构邻居信息(同类型邻居聚合+类型聚合)

part I:同类型邻居聚合,一般形式如下:

上式中的聚合函数AG有多种选择,如:FC、CNN、RNN等。本文中采用实践中效果较好的Bi-LSTM进行同类型邻居聚合。

同类型邻居聚合的直观形式,可参考图2中的(c) NN-2。

part II:类型聚合

说明:此模块本质上是一个自注意力模型。为了简化形式,把self和邻居归为一个集合。

4.目标函数和模型训练

目标函数如下:

出于计算效率考虑,上式采用Negative sampling进行训练且取negative sample size=1,则优化目标转化为:

上式中的三元组基于图上的随机游走序列生成。大致过程为:生成异构图随机游走序列,基于一个序列选择节点v的正节点v_c,采样生成与v_c对应的节点v的负节点v_c'。

明确目标函数后,模型基于mini-batch的方式训练,优化器是Adam optimizer。不断地进行训练迭代,直至指标收敛为止。

参考资料

1.Heterogeneous Graph Neural Network:dl.acm.org/doi/pdf/10.1

编辑于 2021-07-23 15:24