上篇博客理了一下一些知识表示学习模型,那今天我们来看目前最流行的BERT模型加上外部知识这个buff后到底会有怎么样的发展。其实这个思路在之前就有出现过比较有意思且高效的工作,像百度的ERNIE和ERNIE2.0 以及清华的ERNIE,这些工作的介绍可以参考站在BERT肩膀上的NLP新秀们(PART I)。√ KG-BERT from NWU√ K-BERT from PKU√ KnowBERT from AI2
01
KG-BERT: BERT for Knowledge Graph Completion(2019)https://arxiv.org/abs/1909.03193这篇文章是介绍知识库补全方面的工作,结合预训练模型BERT可以将更丰富的上下文表示结合进模型中,在三元组分类、链接预测以及关系预测等任务中达到了SOTA效果。具体的做法也非常简单易懂,就是修改了BERT模型的输入使其适用于知识库三元组的形式。首先是KG-BERT(a),输入为三元组 的形式,当然还有BERT自带的special tokens。举个栗子,对于三元组 ,上图中的Head Entity输入可以表示为Steven Paul Jobs was an American business magnate, entrepreneur and investor或者Steve Jobs,而Tail Entity可以表示为Apple Inc. is an American multinational technology company headquartered in Cupertino, California或Apple Inc。也就是说,头尾实体的输入可以是实体描述句子或者实体名本身。模型训练是首先分别构建positive triple set和negative triple set,然后用BERT的[CLS]标签做一个sigmoid打分以及最后交叉熵损失上述的KG-BERT(a)需要输入关系,对于关系分类任务不适用,于是作者又提出一种KG-BERT(b),如上图。这里只是把sigmoid的二分类改成了softmax的关系多分类。有一点想法,既然已经训练了那么多的三元组信息,按理说模型应该是会有学到外部知识的一些信息,也算是一种知识融合,是不是可以把这个模型经过三元组训练后用来做一做其他的NLU任务看看效果?https://github.com/yao8839836/kg-bert
02
K-BERT: Enabling Language Representation with Knowledge Graph(2019)https://arxiv.org/abs/1909.07606作者指出通过公开语料训练的BERT模型仅仅是获得了general knowledge,就像是一个普通人,当面对特定领域的情境时(如医疗、金融等),往往表现不如意,即domain discrepancy between pre-training and fine-tuning。而本文提出的K-BERT则像是领域专家,通过将知识库中的结构化信息(三元组)融入到预训练模型中,可以更好地解决领域相关任务。如何将外部知识整合到模型中成了一个关键点,这一步通常存在两个难点:
K-Inject 将查询到的三元组注入到句子 中,将 中的三元组插入到它们相应的位置,并生成一个句子树 t 。
Embedding Layer
K-BERT的输入和原始BERT的输入形式是一样的,都需要token embedding, position embedding和segment embedding,不同的是,K-BERT的输入是一个句子树,因此问题就变成了句子树到序列化句子的转化,并同时保留结构化信息。
Token embedding
句子树的序列化,作者提出一种简单的重排策略:分支中的token被插入到相应节点之后,而后续的token被向后移动。举个栗子,对于上图中的句子树,则重排后变成了Tim Cook CEO Apple is visiting Beijing capital China is a City now。没错,这的确看上去毫无逻辑,但是还好后面可以通过trick来解决。
Soft-position embedding
通过重排后的句子显然是毫无意义的,这里利用了position embedding来还原回结构信息。还是以上图为例,重排后,CEO和Apple被插入在了Cook和is之间,但是is应该是接在Cook之后一个位置的,那么我们直接把is的position number 设置为3即可。Segment embedding 部分同BERT一样。
模型使用了常识知识库ConceptNet和情感词典NEC_VAD作为外部知识来源,对于对话中的每个非停用词token,都会从ConceptNet检索包含其直接邻居的连通知识图 g(t),并且对对于每一个 g(t) ,会移除停用词、词表外词以及置信分数低于1的concept。经过上述操作,最终得到的,对于每一个token,都会有 a list of tuples:Embedding Layer就是常见的word embedding 加上 position embedding