异构图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
异构图表示学习问题定义:
HetGNN算法
为了解答上述C1、C2、C3,我们提出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:https://dl.acm.org/doi/pdf/10.1145/3292500.3330961