仰止

V1

2022/12/08阅读:30主题:默认主题

KBERT-给模型引入知识图谱

KBERT是一篇2019年的论文,可以说比较老了。不过,其为bert引入知识图谱的方法,确实值得学习

论文信息

论文地址:

https://arxiv.org/abs/1909.07606

论文代码:

https://github.com/ autoliuweijie/K-BERT

论文笔记:

https://note.youdao.com/s/5cECPPRg

主要内容

很早之前就听说了KBERT,但是一直没时间去看论文。后来,看了LEBERT后,就很好奇KBERT是如何将KG接入BERT的,所以这段时间就看了下它的论文和代码。

我个人感觉,BERT与词表、KG的融合是必然的趋势。它们不仅蕴含大量的知识,而且可以不断的更新,可以让模型不断的学习领域知识

回归正题,下面我们看下KBERT是怎么实现的

(1)模型结构

从上到下,一个句子先是经过Knowledge layer实现句子中实体到KG的三元组的映射,生成一个句子树;然后,经过embedding layer,根据KBERT定义的范式来实现对句子树的编码,并根据句子树生成对应的visible matrix;接着,经过一个transformer encoder模块实现输出

我们可以略作分析,知识层仅仅通过map就可以实现,所以比较简单;transformer encoder有现成的;所以,本文的关键点应该就在对句子树的embedding方法,以及seeing layer层的实现

由于需要把KG融入BERT,所以其需要保持和BERT一样的输入形式,也就是需要token idsposition embeddingsegment ids,而segment ids是没什么疑问的,所以关键点就在于前两个输入

现在问题就转化为了token idsposition embedding是怎么实现的,以及seeing layer的实现方式。还是带着问题看论文比较容易抓住重点,提高效率

(2)KG的融入

毫无疑问,知识图谱的融入BERT的方式,是这篇论文的核心,我们可以结合下面这张图分析

一张好图确实有利于理解,感觉光看这张图就可以了解到核心思想了。首先,可以看到,KBERT有三个输入,token embeddingsoft-position embeddingsegment embedding;接着,看左下角的图,一目了然有没有,就是会出现两种位置编码,一种位置编码是没有重复的,并且KG产生的分支排在前面(也就是先走分支,再走主干),这种位置编码被称为hard-position,另一种位置编码是到达分岔点时,主干和分支同时编码,并且id相等,这被称为soft-position;最后,右下角是一个mask矩阵,不用多说,肯定是用来进行单向编码,防止A与B之间产生关联进而影响结果

下面进一步分析,为什么要有两种位置编码,这两种位置编码有什么作用

当不融合知识图谱的时候,相当于只有主干,这时只会有一种位置编码,注意我们这里说的都是绝对位置编码。知识图谱说简单点就是三元组(论文里的就是三元组),有着sub-rel-obj的结构,分支就是rel-obj的形式。所以,KG的信息要引入,就需要将其融合到输入,BERT的输入有input_idssegment_idsposition_embedding,对于segment_ids 都是一样的,因为KG相当于一种enhance,并不会增加一个句子,所以可以改变的只能是前两个。input_ids对应着token embedding,而每个字的token对应的id都是由vocab提供好的,因此KG与实体对应后,其与主干的位置摆放就成了关键

直接将分支接着对应的sub后面,然后再计算原先后面的主干,也就是hard position index,可以方便后面的mask矩阵的求取,但也会带来麻烦。以上图为例,is的主语应该是Cook,可是hard position中却是Apple,这显然会引入不小的噪声,所以引入了soft position,使得原来句子的位置信息依旧有效。可是,这样又导致了新的问题,CEOis的位置id是一样的,这肯定会造成影响吧,一般会使得它们的相关性更大,但是这两个单词并没有相关性,因此,在计算attention的时候需要保证两者不可见,以减弱这种噪声,所以就还需要设计一种mask-self-attention的结构

上图mask matrix的原理也比较易懂,核心就是该分支只对其连接的实体可见,主干token之间互相可见,这也就是Seeing layer的核心了

论文最后还提到KG只作用在下游,也就是说我们可以直接使用BERT的预训练模型,而不比自己去预训练,进一步表明,我们可以把BERT换做任意的预训练模型,并且用KG来提升指标

(3)实验部分

作者也做了比较清晰的消融实验:

如上表,其中HowNetCN-DBpedia表示两种不同的知识图谱,应该是各自适用于不同的任务类型。可以看到,引入KG后,各方面指标较BERT都有所提升

此外,作者一直强调的一个点是,KBERT结合特定领域的KG,可以在该领域很好的提升效果

可以看到,在医疗领域引入特定的KG后,在该领域的提升效果比非特定领域的KG更大

同时,作者也对soft position和visible matrix做了消融实验,来确认KBERT操作的有效性

根据上图我们可以得到以下结论:

  • KG的引入会带来噪声。由图a可知,在去掉mask后,KBERT的效果低于BERT
  • KBERT可以比BERT更快收敛。由图a可知,KBERT在epoch=2处达到峰值,而BERT在epoch=4
  • KBERT具有有效性。两个实验中,KBERT的效果都优于BERT

相关思考

现在知识图谱越来越大,其蕴含的知识完全可以对BERT进行增强,而且现在都在对BERT引入各种各样的外部知识,可见这篇论文在当时是极具前瞻性的

不过,数据决定模型,KG越来越大也会导致噪声越来越多,当某个实体对应着多个三元组时,如何选取最有效的三元组是一个问题(论文里是直接选取前面两个三元组)。

其实KBERT与LEBERT真的很像,一个是引入KG,一个是引入Lexicon;而且我们团队用的centrabert也加入了lexicon;同时近两年比较火的prompt,其引入的模板也可以认为是一种知识。所以,BERT+知识的组合真的是一种趋势

分类:

人工智能

标签:

自然语言处理

作者介绍

仰止
V1