2019 KDD
论文链接:https://dl.acm.org/doi/pdf/10.1145/3292500.3330961
官方代码:https://github.com/chuxuzhang/KDD2019_HetGNN
个人实现:https://github.com/ZZy979/pytorch-tutorial/tree/master/gnn/hetgnn
(本文研究的)异构图不仅包含多个类型的顶点之间的结构化关联(边),还包含与每个顶点关联的非结构化内容
例如:
尽管在同构或异构图嵌入、属性图嵌入以及图神经网络等方面已经有了大量的研究,但很少有研究能同时考虑异构结构信息(顶点和边)和异构内容信息(属性、文本、图像等)
为了解决以上挑战,论文提出了HetGNN——用于异构图表示学习的异构图神经网络模型
(1)内容相关的异构图
内容相关的异构图是指具有多种顶点类型和边类型的图 G = ( V , E , O V , R E ) G=(V, E, O_V, R_E) G=(V,E,OV,RE) ,其中 O V O_V OV 和 R E R_E RE 分别表示顶点和边的类型集合,另外,每个顶点还关联了异构内容(例如属性、文本、图像等)
前面提到的学术图和评论图都是内容相关的异构图的例子
(2)异构图表示学习
给定一个内容相关的异构图 G = ( V , E , O V , R E ) G=(V, E, O_V, R_E) G=(V,E,OV,RE) ,顶点内容集合为C,目标是设计一个模型 F : V → R d F: V→R^d F:V→Rd 来学习一个d维嵌入,该嵌入能够同时对异构结构信息(顶点和边)和异构非结构信息(内容)进行编码
学习到的顶点嵌入可用于多种图挖掘任务,例如连接预测、推荐、顶点分类等
模型包括4部分:
每一部分的功能如下:
用于同构图的GNN通过顶点的直接邻居来聚集特征信息,这种做法在异构图中会产生几个问题:
为了解决以上问题以及挑战C1,论文提出了基于重启随机游走(RWR)的异构邻居采样策略
该策略避免了上面提到的问题:
为了解决挑战C2,论文中设计了一个模块用于将顶点v的异构内容 C v C_v Cv 通过一个神经网络 f 1 f_1 f1 编码为固定长度的嵌入,如下图所示
首先根据不同内容的类型使用不同的方法进行预训练(例如属性内容使用one-hot编码,文本内容使用Par2Vec,图像内容使用CNN),将顶点v的第i个内容的特征表示记为 x i ∈ R d f × 1 , 1 ≤ i ≤ ∣ C v ∣ x_i∈R^{d_f×1},1≤i≤|C_v| xi∈Rdf×1,1≤i≤∣Cv∣
之后使用双向LSTM来聚集顶点v的异构内容特征,最后将LSTM层输出的隐含状态输入到一个mean-pooling层(即取平均),从而得到顶点v的总体异构内容嵌入 f 1 ( v ) f_1(v) f1(v)
其中FC是一个特征转换层,可以是恒等变换、全连接层等
简单来说就是:内容编码→ x i x_i xi →双向LSTM→取平均→ f 1 ( v ) f_1(v) f1(v)
这个内容编码框架有如下优点:
为了解决挑战C3,论文中设计了另一个模块——基于类型的神经网络来聚集异构邻居的内容嵌入
该模块包括两步:
在3.1节中通过RWR每个顶点的所有类型的邻居,这一步使用一个神经网络 f 2 t f_2^t f2t (注意和类型t相关)来聚集每个顶点v的t类型邻居 N t ( v ) N_t(v) Nt(v) 的内容嵌入
该神经网络的结构与3.2节中的类似,使用双向LSTM来聚集每个邻居v’的内容嵌入 f 1 ( v ′ ) f_1(v') f1(v′) ,最后将LSTM层输出的隐含状态输入到一个mean-pooling层(即取平均),从而得到顶点v的t类型邻居的聚集嵌入 f 2 t ( v ) f_2^t (v) f2t(v)
对于不同顶点类型的邻居使用不同的双向LSTM来聚集
前一步对每个顶点v生成了 ∣ O V ∣ |O_V| ∣OV∣ 个聚集嵌入 f 2 t ( v ) , t ∈ O V f_2^t (v),t∈O_V f2t(v),t∈OV ,这一步使用注意力机制来组合基于类型的邻居嵌入,如下图所示
使用注意力机制的动机是不同类型的邻居会对顶点v的最终嵌入表示有不同的贡献,用 α v , t \alpha ^{v, t} αv,t 表示t类型的邻居对顶点v的注意力权重,则顶点v的最终嵌入表示为
(这里的 E v \mathcal{E}_v Ev 就是第2节提到的F)
α v , t \alpha ^{v, t} αv,t 的计算公式如下:
其中 F ( v ) = { f 1 ( v ) } ∪ { f 2 t ( v ) ∣ t ∈ O V } F(v)=\{ f_1 (v) \} \cup \{ f_2^t (v) | t \in O_V \} F(v)={f1(v)}∪{f2t(v)∣t∈OV}
(就是对基于类型的邻居嵌入使用GAT)
目标函数定义如下:
C N v t {CN}_v^t CNvt 表示顶点v的t类型上下文顶点
注意 o 1 o_1 o1 不是误差函数而是似然函数,因此是最大化, v c v_c vc 来自顶点v的随机游走结果,因此该目标函数的含义是使得随机游走结果出现的概率最大
论文中使用负采样技术来优化目标函数 o 1 o_1 o1 ,具体做法是对于顶点v的每一个t类型的邻居 v c v_c vc ,从噪声分布 P t ( v c ) P_t(v_c) Pt(vc) 中采样一个负样本 v c ′ v_{c'} vc′ ,则 log p ( v c ∣ v ; Θ ) \log p(v_c|v;\Theta) logp(vc∣v;Θ) 的估计退化为交叉熵损失
因此目标函数(7)转化为
实验目的是回答4个问题:
论文使用了4个异构图数据集,包括两个学术图和两个评论图
学术图数据集来自AMiner,评论图数据来自Amazon
嵌入维度为128,学术图的邻居采样数量为23(学者、论文、期刊分别为10, 10, 3),评论图的邻居采样数量为20(用户、物品各10)
使用Par2Vec预训练文本内容特征,使用CNN预训练图像内容特征,使用DeepWalk预训练顶点嵌入
学术图的输入顶点特征为文本(论文摘要)特征和预训练的顶点嵌入;评论图的输入顶点特征为文本(物品描述)特征、图片(物品照片)特征和预训练的顶点嵌入
使用PyTorch实现,代码:https://github.com/chuxuzhang/KDD2019_HetGNN
哪个连接关系会在将来出现?
将两个顶点的嵌入按元素相乘作为连接嵌入,训练一个二分类器来预测两个顶点之间是否存在一条边,结果如下
对于学术图,按年份划分训练集和测试集(例如对于A-I_2003,2003年之前的数据作为训练集,2003年及之后的数据作为测试集),预测的连接关系分为两种:type-1是学者之间的合作关系(学者1→论文←学者2),type-2是学者和论文之间的引用关系(学者→论文1→论文2)
对于评论图,按顺序划分训练集和测试集,预测的连接关系为用户和物品之间的评论关系
结果表明在连接预测任务上,HetGNN能学到比baseline更好的顶点嵌入
哪个顶点应该被推荐给目标顶点?
该任务实际上和连接预测很相似,偏好得分定义为两个顶点嵌入的内积
只使用学术图,目标是给学者推荐期刊(即预测“学者-期刊”连接关系),使用训练集学习顶点嵌入,使用测试集中学者发表过论文的期刊作为groud truth,仍然按年份划分,评价指标为top k推荐列表的准确率、召回率和F1得分,结果如下
结果表明在顶点推荐任务上,HetGNN能学到比baseline更好的顶点嵌入
给定的顶点属于哪一个类别/类簇?
这部分包括多标签分类(MC)和顶点聚类(NC)两个任务
只使用A-II学术图,目标是将学者与4个人工选择的研究领域匹配:数据挖掘(DM)、计算机视觉(CV)、自然语言处理(NLP)和数据库(DB);另外,还为每个研究领域人工选择了top 3期刊(数据集中的顶点,相当于给这些期刊顶点人工指定领域)
每个学者的标签是发表论文最多的研究领域(通过论文所属的期刊),使用整个数据集来学习顶点嵌入
对于多标签分类任务,学习到的顶点嵌入用于训练逻辑回归分类器,评价指标为Micro-F1和Macro-F1;对于顶点聚类任务,学习到的顶点嵌入用于k-means算法的输入,评价指标为归一化的互信息(NMI)和adjusted rand index (ARI),结果如下
聚类结果的可视化如下
可以看到相同研究领域的学者嵌入距离较近,说明学习到的顶点嵌入有效
新顶点属于哪一个类别/类簇?
“归纳式”体现在没有预先学习到测试集中的顶点嵌入,需要使用训练好的模型来推断这些顶点的嵌入,之后进行顶点分类和聚类任务的测试
为了研究各组成部分对模型性能的影响,论文中将HetGNN模型和3个变体进行了比较:
HetGNN和这3个变体在A-II数据集的连接预测和顶点推荐任务上的表现如下
从图中可以得出以下结论:
论文中分析了两个关键的超参数的影响:嵌入维度和异构邻居采样数量
不同超参数对HetGNN在A-II数据集的连接预测和顶点推荐任务上的性能影响如下
结果显示: