论文:Modeling Relational Data with Graph Convolutional Networks 使用图卷积网络对关系数据进行建模
论文链接:https://arxiv.org/abs/1703.06103
Github链接:https://github.com/tkipf/relational-gcn
此论文引入了关系图卷积网络(R-GCNs),并在两个标准知识库上应用R-GCNs,完成了两个任务——
- 链接预测
- 实体分类
那么是应用这个网络并解决它的呢?我们可以把知识库想象成一个有向有标签的多图,我个人理解就是有向带权图。
我们上面提到的两个任务,其实可以看成两个解决问题时的situations,在这种情况下,many丢失的信息都may存在于邻域结构编码的图中。我们来For instance,
- 知道Steven在VTU上学接受教育。
那么就表示Steven应该带有一个标签person, 而且三人组(Steven HD, lived in, China)就must属于知识图。
So,我们需要为关系图中的实体开发一个编码器模型,从而可以应用于两个situations。
对于链路预测任务,可以看成是一个自编码器,这个自编码器包括2个part。
- 编码器:一个生成实体的,隐含特征,表示的R-GCN
- 解码器:一个,利用这些表示,来预测标记边,的张量因子分解模型。
其实解码器可以rely on任何类型的因子分解(也就是任何评分函数),但是论文中使用的方法是DisMult。
一、论文的亮点
1.1 展示了GCN框架可以应用于关系数据建模,i.e.链接预测和实体分类任务。
1.2 引入了参数共享和实现稀疏约束的技术,技术实现的目的是将其apply到具有大量关系的多图。
1.3 为了improve模型的性能,以DisMult为例,使用一个在关系图中执行多步信息传播的编码器模型来加强因子分解模型。
二、Neural relational modeling
2.1 模型中符号的定义
2.2 关系图卷积网络R-GCN
R-GCN是GCN在大规模关系数据上的一种扩展,这个GCN是在局部邻居信息进行聚合的GCN。这些方法我们可以理解为一个简单可微的消息传递模型的一个special example。
上述(1)的转换模型在局部有结构的邻居中聚集,编码特征是非常有效的。
同时,在图分类、基于图的半监督节点分类等任务中,可以大幅度地提高其性能。
基于此,论文定义了一个简单的传播模型,这个model可以用来计算在一个关系多图中的节点或实体的前向更新。
2.3 R-GCN和GCN不同的地方
论文中,和GCN不同的是,文中引入了一个relation-specific的转换,也就是依赖于边的类型和方向。
除了采取简单的线性消息转换外,还可以选择多层神经网络,它的灵活性更高,但是计算效率很低。
上图中,需要注意的几点:
- 对每个节点引入了一个特殊的关系类型:自连接,self-loop
- 深蓝色的方块表示来自于邻居节点激活的特征(D维向量)
- in 和 out 表示两种类型的边
- each节点的更新可以用整个图中的共享参数并行计算。
2.4 Regularization 正则化or规则化
论文中新定义的传播模型(公式2),当它应用于多关系数据的一个问题时,图中关系的数量随着参数的增长而增长,从而会导致overfit的问题。
为了解决overfit的问题,我们需要引入2个独立的方法对R-GCN层进行规则化——
- 基函数分解
- 块对角分解
这两种分解方法都可以减少关系比较多的数据,i.e.,知识库,在train中需要learning的参数。从而减少overfit的问题。
2.4.1 basis decomposition 基函数分解
2.4.2 block-diagonal decomposition 块对角分解
论文中,对所有的R-GCN模型都采取下面的形式:
- 按传播模型(公式2)堆叠L层;
- 输入层中的每个节点,如果没有其他的特征,就选择一个one-hot向量作为输入特征。
- 对于块分解,用一个简单的线性变换把上句的one-hot向量映射到一个稠密的表示。
三、链接预测
看到了链接预测,我们首先要问,
- 预测的是什么?根据什么预测的?为了做什么任务?
预测的是新的元组(subject, relation, object)
根据什么预测的,暂时还不知道。
任务是为可能的边(s, r, o)分配一个分数f(s, r, o),从而确定这些边属于边集的可能性。
当然,做这个任务,还需要一个大杀器——图形自动编码器,
- 这个玩意儿是用什么组成的?
一个实体编码器+评分函数(解码器)
这个图形自动编码器的作用,就是把每个实体映射到一个真值向量上。
接下来,解码器会根据节点表示重建图的边。
也就是说,编码器对三元组(subject, relation, object)进行评分。
文中使用的方法是——使用一个R-GCN编码器,通过计算节点来表示。
论文中的实验,进行评分的就是选择了一个评分函数,评分函数就是DisMult,每个关系r都跟一个对角矩阵R有关: