K-BERT: Enabling Language Representation with Knowledge Graph
https://github.com/autoliuweijie/K-BERT.
Motivation
弥补语言模型缺乏领域知识的弊端
摘要
预先训练的语言表示模型,如BERT,从大规模语料库中获取一般的语言表示,但缺乏特定领域的知识。阅读一篇领域文本时,专家用相关知识进行推理。为了使机器能够实现这一功能,作者提出了一种基于知识的语言表示模型,其中三元组作为领域知识注入到句子中。然而,过多的知识整合可能会使句子偏离其正确的含义,这就是所谓的知识噪音(KN)问题。为了克服KN,K-BERT引入了soft-position and visible matrix 来限制知识的影响。K-BERT可以通过配备KG轻松地将领域知识注入到模型中,而无需自行预训练,因为它能够从预训练的BERT加载模型参数。
介绍
pre-train刷新了各种NLP任务的SOTA,但是在特定领域(如医药)表现不加,一个方法是重新训练个强调领域知识的pre-train model,但是计算成本太高。此外,作者考虑到将KG融入集成到语言表示模型中,使其具备领域知识。但是,这种集成面临两个挑战:
- Heterogeneous Embedding Space (HES):一般情况下,文本中文字的嵌入向量和KG中实体的嵌入向量是分开获取的,使得它们的向量空间不一致。
- Knowledge Noise (KN):过多的知识融入可能会使句子偏离其正确的意思。
K-BERT由此而生:
Methodology
Notation
对于一个句子:
s
s
s = {
w
0
w_0
w0,
w
1
w_1
w1,
w
2
w_2
w2, …,
w
n
w_n
wn},
n
n
n为句子的长度。英语句子为word-level,本文针对character-level的中文句子。
其中,每一个token都包含在词表
V
V
V内。KG表示为
K
K
K,包含一系列三元组:
ε
ε
ε = {
w
i
w_i
wi,
r
j
r_j
rj,
w
k
w_k
wk},
w
i
w_i
wi和
w
k
w_k
wk为实体名称,
r
j
r_j
rj∈
V
V
V是他们之间的关系。所有的三元组均在
K
K
K内,即
ε
ε
ε∈
K
K
K。
Model architecture
K-BERT的模型架构由四个模块组成(如下图),即knowledge layer, embedding layer, seeing layer and mask-transformer。对于一个输入句子,knowledge layer首先从一个KG注入相关的三元组,将原始句子转换成一个知识丰富的句子树。然后句子树被同时馈入embedding layer和seeing layer。然后转换成token-level嵌入表示和可见矩阵。可见矩阵用于控制每个token的可见区域,防止因注入过多知识而改变原句的意思。
knowledge layer(KL)
知识层用于句子知识注入和句子树转换。具体地,给定输入句子
s
s
s = {
w
0
w_0
w0,
w
1
w_1
w1,
w
2
w_2
w2, …,
w
n
w_n
wn}和一个KG
K
K
K,KL输出一个句子树
t
t
t = {
w
0
w_0
w0,
w
1
w_1
w1,…,
w
i
w_i
wi {(
r
r
r
i
_i
i
0
_0
0,
w
w
w
i
_i
i
0
_0
0),…,(
r
r
r
i
_i
i
k
_k
k,
w
w
w
i
_i
i
k
_k
k)},…,
w
n
w_n
wn}。这个过程可以分为两个步骤:知识查询(K-Query)和知识注入(K-Inject)。
在K-Query阶段,所有在句子
s
s
s中的实体被选择出来,在
K
K
K中查找相应的三元组:
其中,
E
E
E = {(
w
i
w_i
wi,
r
r
r
i
_i
i
0
_0
0,
w
w
w
i
_i
i
0
_0
0), …,(
w
i
w_i
wi,
r
r
r
i
_i
i
k
_k
k,
w
w
w
i
_i
i
k
_k
k)}是对应的三元组集合。
然后K-Inject将
E
E
E中的三元组缝合到句子
s
s
s中的相应位置,产生一个句子树:
形式上:
Embedding layer(EL)
EL的功能是将句子树转换成嵌入表示,使其能够fed到mask-transformer encoder中,嵌入为三个部分的和:token embedding ,position embedding 和segment embedding。与BERT的不同之处在于,K-BERT输入的是句子树而不是句子token序列。因此,如何在保留句子结构信息的同时将句子树转化为序列是K-BERT的关键。
Token embedding:与BERT一致,采用BERT的词表,对于句子树中的每一个token经过lookup table转换成一个维数为 H H H的嵌入向量。此外,K-BERT也使用[CLS]作为分类tag和[MASK]去mask tokens。
K-BERT和BERT的token嵌入的区别在于句子树中的token在嵌入操作之前需要重新排列:分支中的token被插入到相应的节点之后,而后续的token被向后移动。如上图所示的例子,句子树被重新排列为“Tim Cook CEO Apple is visiting Beijing capital China is a City now”。虽然这个程序很简单,但它使句子不可读,并失去了正确的结构信息。幸运的是,它可以通过软位置和可见矩阵来解决。
Soft-position embedding :对于BERT来说,如果没有位置嵌入,就相当于一个词袋模型,导致结构信息(即token的顺序)的缺失。BERT输入句子的所有结构信息都包含在位置嵌入中,这就允许将丢失的结构信息添加回不可读的重排句子中。
以下图中的句子树为例,重新排列后,[CEO]和[Apple]插在[Cook]和[is]之间,但是[is]的主语应该是[Cook]而不是[Apple]。为了解决这个问题,将[is]的位置号设置为3,而不是5。所以在transformer encoder 里计算self attention 分数的时候,[is]是在[Cook]的下一个位置。然而,另一个问题出现了:[is]和[CEO]的position 号都是3,这使得他们在计算self attention 时位置相近,但实际上两者之间没有联系,作者提出用Mask self attention解决此问题。
Segment embedding:同BERT,采用segment embedding识别不同的句子。
Seeing layer
Seeing layer是K-BERT和BERT最大的区别,也是这个方法如此有效的原因。K-BERT的输入是一个句子树,其中的分支是从KG获得的知识。但知识带来的风险是会导致原句意思发生变化,即KN问题。比如上图的句子树中,【China】只修饰【Bejing】,与【Apple】无关。所以【Apple】的表示不应该受到【China】的影响。另一方面,用于分类的[CLS]标签不应该绕过[Cook]获取[Apple]的信息,因为这将带来语义变化的风险。为了防止这种情况发生,K-BERT用一个可见矩阵
M
M
M来限制每个token的可见区域,这样[Apple]和[China],[CLS]和[Apple]就互不可见了。
M
M
M被定义为:
例如:Tim与CEO不在一个branch,则M中它们两个的hard位置被设置为负无穷。
Mask-Transformer
可见矩阵 M M M在一定程度上包含了句子树的结构信息。BERT中的Transformer 编码器无法接收 M M M作为输入,需要修改为Mask-Transformer,可以根据 M M M限制自我注意区域,Mask-Transformer是多个Mask-自我注意块的堆叠。将层数表示为 L L L,hidden size 表示为 H H H,mask self attention head 的数量表示为 A A A。
Mask-Self-Attention:它是的一种Self-Attention扩展。形式上:
其中
W
q
W_q
Wq、
W
k
W_k
Wk和
W
v
W_v
Wv可训练模型参数。
h
i
h_i
hi是第
i
i
i个mask-self-attention block 的隐藏状态。
d
k
d_k
dk是比例因子。
M
M
M是Seeing layer 计算出的可见矩阵。直觉上,如果
w
k
w_k
wk对
w
j
w_j
wj不可见(
M
M
M
j
_j
j
k
_k
k为负无穷),那么
M
M
M
j
_j
j
k
_k
k会将注意力得分
S
S
S
i
^i
i
+
^+
+
1
^1
1
j
_j
j
k
_k
k屏蔽为0,这意味着
w
k
w_k
wk对
w
j
w_j
wj的隐藏状态没有贡献。
如图4所示的例子,
h
h
h
i
^i
i
[
_[
[
A
_A
A
p
_p
p
p
_p
p
l
_l
l
e
_e
e
]
_]
]对
h
h
h
i
^i
i
+
^+
+
1
^1
1
[
_[
[
C
_C
C
L
_L
L
S
_S
S
]
_]
] 没有影响,因为 [CLS]看不见[Apple]。但是
h
h
h
i
^i
i
+
^+
+
1
^1
1
[
_[
[
C
_C
C
L
_L
L
S
_S
S
]
_]
]可以通过间接获得
h
h
h
i
^i
i
+
^+
+
1
^1
1
[
_[
[
C
_C
C
o
_o
o
o
_o
o
k
_k
k
]
_]
]的信息,因为[Apple]对[Cook]可见,[Cook]对[CLS]可见。这个过程的好处是【Apple】丰富了【Cook】的表示,但不直接影响原句的意思。
Experiments
Pre-training corpora:
WikiZh :https://dumps.wikimedia.org/zhwiki/latest/
WebtextZh:https://github.com/brightmart/nlp chinese corpus
Knowledge graph:
CN-DBpedia:http://kw.fudan.edu.cn/cndbpedia/intro/
HowNet:http://www.keenage.com/
MedicalKG
Baselines
Google -BERT
K- BERT
Parameter settings and training details
与BERT相同:L = 12 , A = 12 , H =768 ,参数量:110M
注意:在 pre-train阶段,没有对BERT加入KG,因为这样做会将相关实体的距离拉近,导致句子的语义改变,预训练阶段与googleBERT相同,在微调阶段加入KG。
直接看看结果
所有数据集都分为三个部分:训练、开发和测试。使用训练部分来微调模型,然后在开发和测试部分评估其性能。实验结果如表1和表2所示,从中可以将结果分为三类:(1)KG对情感分析的任务(即Book_review、Chnsenticorp、Shopping和Weibo)没有显著影响,因为句子的情感可以在没有任何知识的情况下基于情感词来判断;(2)在语义相似性任务方面,HowNET的表现优于百科KG。
对于问答和NER任务(即NLPCC-DBQA和MSRA-NER),百科KG (CN-DBpedia)比语言KG更合适。因此,根据任务类型选择合适的KG非常重要。
此外,可以观察到,使用额外的语料库(WebtextZh)也可以带来性能提升,但没有KG那么显著。如表2所示的MSRA-NER,CN-DBpedia将F1从93.6%提高到95.7%,而WebtextZh仅将其提高到94.6%。
Specific-domain tasks
K-BERT的出色点:
Domain Q&A:金融和法律问答数据集:Finance Q&A and Law Q&A
领域NER:Medicine NER
看看结果
可以看到,改善很明显。
Ablation studies
soft-position 和可见矩阵
M
M
M的影响: