《Graph Representation Learning》【4】——Multi-relational Data and Knowledge Graphs

4 Multi-relational Data and Knowledge Graphs

这一部分,我们将介绍多关系图(multi-relational graph)中的浅层嵌入方法。

Knowledge graph completion
这一章的大多数方法,最初都是为完成知识图谱任务而设计的。
在多关系图中,我们一般会定义这样的三元组(tuple): e = ( u , τ , v ) e=(u,\tau,v) e=(u,τ,v),来表示两个节点之间存在某种关系。一般来说,知识图谱任务的目标是预测图中缺失的边,即链接预测(link prediction)。
在本章中,我们将简要概述多关系图的嵌入方法。

4.1 Reconstructing multi-relational data

与简单图一样,我们可以将多关系图的嵌入视为重构(reconstruction)任务。给定两个节点的嵌入,我们的目标是重构这些节点之间的关系,不同之处在于,我们必须处理多种不同类型的关系。

为了能够适应多关系图,我们对简单图中的解码器进行了如下改进:
(1)输入:一对节点的嵌入向量+关系类型。
(2)输出:边 ( u , τ , v ) (u,\tau,v) (u,τ,v)存在的概率。
最早的多关系嵌入方法是RESCAL,它的解码器为:
D E C ( z u , τ , z v ) = z u T R τ z v DEC(z_u,\tau,z_v)=z_u^TR_{\tau} z_v DEC(zu,τ,zv)=zuTRτzv
其中 R τ ∈ R d × d R_{\tau}\in \mathbb R^{d\times d} RτRd×d是关系τ特有的可学习矩阵。
重构损失定义为:
L = ∑ u ∈ V ∑ v ∈ V ∑ τ ∈ R ∣ ∣   D E C ( z u , τ , z v ) − A [ u , τ , v ]   ∣ ∣ 2 \mathcal L=\sum_{u\in V}\sum_{v\in V}\sum_{\tau \in \mathcal R}||\ DEC(z_u,\tau,z_v)-\mathcal A[u,\tau,v]\ ||^2 L=uVvVτR DEC(zu,τ,zv)A[u,τ,v] 2
其中 A ∈ R ∣ V ∣ × ∣ R ∣ × ∣ V ∣ \mathcal A\in \mathbb R^{|V|\times|\mathcal R|\times|V|} ARV×R×V为多关系图的邻接张量(adjacent tensor)。

Loss functions, decoders, and similarity functions
正如我们前面所提到的,编解码器模型有3个非常重要的概念。
译码器在一对节点嵌入之间给出一个分数;相似性函数定义了我们要编码的节点相似度的类型;损失函数告诉我们,如何评估解码器输出与真实近似值之间的差异。
有一点需要注意:在多关系图解码器中,相似性度量(similarity measure)一般直接定义为邻接张量(adjacent tensor)。换言之,本章中的所有方法都假设我们只重构一阶邻居。这个因为,在多关系图中定义高阶邻域关系是困难的,并且大多数多关系嵌入方法都是专门为关系预测而设计的。
因此,不同的解码器和损失函数,衍生出了不同的嵌入方法。

4.2 Loss functions

上面提到的重构损失中的损失函数,主要有2个问题:
(1)计算代价昂贵。可以看到从里到外有3层求和操作,时间复杂度很高。但实际情况是,我们的图一般都是稀疏的,图中存在的边的数量远小于求和操作的计算量,这就说明了很多运算都是没必要的。
(2)邻接张量是「0,1」二值化的,更接近于分类任务,均方误差适用于回归任务,但却不适合进行二值比较。

Cross-entropy with negative sampling
一种比较合适的损失函数是负采样下的交叉熵损失,它和之前在node2vec中提到的损失函数十分相似,惟一的区别在于这里使用的是多关系解码器(考虑了关系的类型)。
L = ∑ ( u , τ , v ) ∈ E − log ⁡ ( σ ( D E C ( z u , τ , z v ) ) ) − γ E v n ∼ P n , u ( V ) [ log ⁡ ( σ ( − D E C ( z u , τ , z v n ) ) ) ] \mathcal L=\sum_{(u,\tau,v)\in E}-\log(\sigma(DEC(z_u,\tau,z_v)))-\gamma \mathbb E_{v_n\sim P_{n,u}(V)}[\log(\sigma(-DEC(z_u,\tau,z_{v_n})))] L=(u,τ,v)Elog(σ(DEC(zu,τ,zv)))γEvnPn,u(V)[log(σ(DEC(zu,τ,zvn)))]
通过观察上述式子,为了使损失尽可能的小,我们希望正样本的得分尽可能高,即 D E C ( z u , τ , z v ) DEC(z_u,\tau,z_v) DEC(zu,τ,zv)的值尽可能的大;负样本的得分尽可能的低,即 D E C ( z u , τ , z v n ) DEC(z_u,\tau,z_{v_n}) DEC(zu,τ,zvn)的值尽可能的低。
其中 P n , u ( V ) P_{n,u}(V) Pn,u(V)代表负样本节点在所有节点中的分布。解码器的输出之所以送入 σ ( ⋅ ) \sigma(\cdot) σ(),是想得到一个[0,1]之间的标准化分数,作为节点之间存在边的概率。
在实际操作中,后一项负采样的期望值一般使用蒙特卡洛近似,改动如下:
L = ∑ ( u , τ , v ) ∈ E ( − log ⁡ ( σ ( D E C ( z u , τ , z v ) ) ) − ∑ v n ∈ P n , u [ log ⁡ ( σ ( − D E C ( z u , τ , z v n ) ) ) ] ) \mathcal L=\sum_{(u,\tau,v)\in E}\left(-\log(\sigma(DEC(z_u,\tau,z_v)))-\sum_{v_n\in P_{n,u}}[\log(\sigma(-DEC(z_u,\tau,z_{v_n})))]\right) L=(u,τ,v)Elog(σ(DEC(zu,τ,zv)))vnPn,u[log(σ(DEC(zu,τ,zvn)))]
其中 P n , u P_{n,u} Pn,u负采样得到的一组节点集。关于如何进行负采样,有一种方法是,随机替换正样本中的头节点或尾节点来生成负样本,在此不过多赘述。

Max-margin loss
另一种损失函数就是margin loss(我也不知道中文应该怎么翻译?maybe最大边缘损失?),也被称为hinge loss,使用的是一种对正负样本进行对比估计的方法。
L = ∑ ( u , τ , v ) ∈ E ∑ v n ∈ P n , u max ⁡ ( 0 , − D E C ( z u , τ , z v ) + D E C ( z u , τ , z v n ) + Δ ) \mathcal L=\sum_{(u,\tau,v)\in E}\sum_{v_n\in P_{n,u}}\max(0,-DEC(z_u,\tau,z_v)+DEC(z_u,\tau,z_{v_n})+\Delta) L=(u,τ,v)EvnPn,umax(0,DEC(zu,τ,zv)+DEC(zu,τ,zvn)+Δ)
其中 Δ \Delta Δ是margin,如果正样本的分数比负样本的分数大,那么我们就得到了一个比较小的损失。

4.3 Multi-relational decoders

之前提到过的RESCAL模型,它的解码器中可学习的参数数量级为 O ( d 2 ) O(d^2) O(d2)。由此可见,它的参数数量还是太多了,我们想进一步减少参数的数量到 O ( d ) O(d) O(d)。下面会介绍一些知识图谱中经典模型。

在这里插入图片描述

Translational decoders
最最经典的翻译模型啊啊!我还专门用pytorch复现过TransE模型。
TransE模型的解码器定义为:
D E C ( z u , τ , z v ) =   − ∣ z u + r τ − z v ∣ ,      ( z u , r τ , z v ∈ R d ) DEC(z_u,\tau,z_v)=\ -|z_u+r_{\tau}-z_v|,\ \ \ \ (z_u,r_{\tau},z_v\in \mathbb R^d) DEC(zu,τ,zv)= zu+rτzv,    (zu,rτ,zvRd)
翻译,说白了就是利用了平移不变现象,希望 z u + r τ ≈ z v z_u+r_{\tau}\approx z_v zu+rτzv,也就是边存在的概率和翻译后的头结点与尾节点之间的距离成正比,它是一个很强大的baseline。
但是TransE模型的局限性在于它的简单性,因此有一些模型对其进行了改进和扩展,统称为TransX系列模型,多了一个对于节点嵌入向量的可训练变换 g i , τ ( ⋅ ) g_{i,\tau}(\cdot) gi,τ()
D E C ( z u , τ , z v ) =   − ∣ g 1 , τ ( z u ) + r τ − g 2 , τ ( z v ) ∣ DEC(z_u,\tau,z_v)=\ -|g_{1,\tau}(z_u)+r_{\tau}-g_{2,\tau}(z_v)| DEC(zu,τ,zv)= g1,τ(zu)+rτg2,τ(zv)

Multi-linear dot products
使用了点积编码器的模型是DistMult,它主要对简单图上的点积编码器进行了推广和泛化。
D E C ( z u , τ , z v ) = < z u , r τ , z v > = ∑ i = 1 d z u [ i ] × r τ [ i ] × z v [ i ] DEC(z_u,\tau,z_v)=<z_u,r_\tau,z_v>=\sum_{i=1}^dz_u[i]\times r_\tau[i]\times z_v[i] DEC(zu,τ,zv)=<zu,rτ,zv>=i=1dzu[i]×rτ[i]×zv[i]
简单粗暴的后果就是只能表示对称关系,无法表示有向或非对称关系。

Complex decoders
针对DistMult模型的缺点,ComplEx模型引入了复数值嵌入。
D E C ( z u , τ , z v ) = R e ( < z u , r τ , z ‾ v > ) = R e ( ∑ i = 1 d z u [ i ] × r τ [ i ] × z ‾ v [ j ] ) DEC(z_u,\tau,z_v)=Re(<z_u,r_\tau,\overline z_v>)=Re\left(\sum_{i=1}^dz_u[i]\times r_\tau[i]\times \overline z_v[j]\right) DEC(zu,τ,zv)=Re(<zu,rτ,zv>)=Re(i=1dzu[i]×rτ[i]×zv[j])
看起来貌似和DistMult没什么太大的区别,实际上里面参与运算的向量都是复数向量,即 z u , r τ , z ‾ v ∈ C d z_u,r_{\tau},\overline z_v\in \mathbb C^d zu,rτ,zvCd。Re代表取实部, z ‾ v \overline z_v zv z v z_v zv的复共轭。

另一个复数模型是RotatE,它将解码器定义为复平面上的旋转(rotation)。
D E C ( z u , τ , z v ) =   − ∣ ∣ z u ∘ r τ − z v ∣ ∣ DEC(z_u,\tau,z_v)=\ -||z_u\circ r_{\tau}-z_v|| DEC(zu,τ,zv)= zurτzv
其中 ∘ \circ 为哈达玛积,所有的向量均为复数向量,且 ∣ r τ [ i ] ∣ = 1 |r_\tau[i]|=1 rτ[i]=1,对应于复平面上的旋转。

4.3.1 Representational abilities

我们可以根据模型在不同的关系逻辑模式上的表达能力,来评价各种多关系解码器。

在这里插入图片描述

Symmetry and anti-symmetry
一个重要的问题是,不同的解码器是否能够同时建模对称和反对称关系。

Inversion
与对称相关的是逆(反转)的概念,其中的一个关系指示了另一个关系的存在,它们的方向相反。

Compositonality
我们还可以考虑,解码器是否可以编码关系表示之间的组合性。

一般来说,考虑这些关系模式有助于比较不同的多关系解码器的表达能力。在实践中,我们可能不寄希望于这些模式一直成立,但可能有许多关系在某种程度上表现出这些模式。

猜你喜欢

转载自blog.csdn.net/weixin_41650348/article/details/110219355
今日推荐