总述: 本文调研近年来bert与knowledge的融合的工作, 对于每一篇工作, 大概的介绍他们融合knowledge的方式, 并且进行自己的点评。
文章列表:
motivation: 把struct knowledge融合到bert的参数当中, 利用conceptNet(大型常识知识图谱)的知识来训练bert的参数, 使得融合知识的bert在推理型数据集上具有较好的表现。
model: 构造一个蕴含常识的QA数据集,并且利用bert在这个数据集上进行pretrain,得到蕴含knowledge的QA的参数。
如上图, 首先从ConceptNet中选取一个三元组T, 然后根据该三元组在wikipedia中选取包含T中两个实体的句子, 然后随机mask掉其中一个实体。 接着将含有mask的这句话作为一个问题, 通过随机选取一些实体(当然要包括原实体)来作为答案候选, 就这样构造了一个QA的数据样例(即,一个问题, 多个候选答案)
为了增加数据集的难度, 他在构造错误答案的时候有一个trick,就是根据T中未被mask掉的那个实体节点选取其相邻节点作为错误候选。 就这样, 根据整个conceptNet, 它创建了一个大型的QA数据集(包含约60w条数据), 然后用原来bert的参数在该QA数据集上进行QA任务的pretrain, 就这样完成了对bert参数进行知识的灌入, 因为在训练的过程中, bert必须学习到两个实体之间的关系,才有可能选出正确的答案。
experiment:分为推理性的数据集(需要knowledge)以及一般的数据集(不需要太多knowledge)
推理性数据集: CommonsenseQA(CSQA), WinogradSchemaChallenge(WSC)
一般数据集: GLUE(通用的英文文本理解任务)
可以看到, 经过常识QA pretrain的bert参数, 在推理任务中远远超过了bert, 在也保持了一般的语言规律。 BERT_CS是本文的模型。
然而, 到目前为止, 其实都还是不公平的对比, 因为原生的bert并没有在利用conceptNet以及wiki sentence的信息。 本文还有一个分离实验:
可以看到, bert+MLM(即原来bert的参数, 在这个新建的QA数据集上用bert的预训练范式(masked language model), 也就是直接把一句话中的对应实体mask掉,表现也有58.8, 所以感觉其实知识的融入的效果也没有很高)
点评:
通过改变bert的输入来引入外部知识,并没有改变bert的结构, 并且效果也有一定的提升。 全文基于一个很简单的idea,就是改变mask的方式,改变输入,或许从输入的角度来讲,可以构造更精巧的输入结构, 让bert学到相关的knowledge。
目前这种方式只考虑了实体建两两的关系,并没有考虑到整个知识图谱的结构, 有一定局限性,属于较为早期的工作。
motivation:
1. 往bert里面融入知识的工作还比较少
2. 现有的融合方式有两种, 一种是在含有knowledge的语句中pretrain,一种是结合一个kg的loss然后和lm model重新pretrain。 前者会使得bert在fintuning的时候忘记之前学到的语法信息, 后者所需的计算时间复杂度太高(因为要重新pretrain整个模型)
model:
通过在bert的模型基础上加一个Adapter, 然后在含领域知识的语料上训练的时候, 只pretrain Adapter的参数,然后保持bert的参数不变, 这样就可以在不同的语料上pretrain adapter从而使得bert具有较强的迁移能力,也保存了bert原本学到了词汇分布。
本文的adapter比较简单, 就是两个线性层, 一个加到transformer的multi-head attention的后面, 一个加到transformer的FF层后面。
然后在领域知识语料训练的时候保持bert的参数不变,在下游任务fintuning的时候, bert和adapter一起更新。
experiment:
在GLUE上做了实验, 在大部分不需要常识的数据集上表现一般, 但是在两个需要尝试推理的数据集上(NLI dataset)表现非常好, 作者还分析了原因。
OM-Adapt是在OMCS.语料上pretrain的模型, CN-Adapt是在conceptNet上pretrain的模型, 可以看到,两者在NLI数据上表现的非常优秀,因为这两个数据集需要专门的knowledge才能做。
然后作者观察到Table3中, 在CS(commonse knowledge)领域的表现有所下降, 作者分析是说:在常识推理中, 推理的过程并不仅仅需要常识,还需要用到高纬度的推理,包含习语的了解等。(但是并没有解释为什么原来bert还做的好一些)
点评:
Adapter较为早期的作品了, 出发点非常好, 可惜实现的有点简单, 然后并没有利用kg的网络结构, 他把conceptNet作为语言去pretrain的。
motivation:
现在的LM+kg的模型在QA方面有几个挑战: 1. 如何根据文本内容检索到一张子图, 并且对子图进行裁剪使得子图的节点数目保持适当的数量。
2. 如何结合query的文本与检索得到的子图进行联合推理
本文就这两点进行了摸索,并且提出1. 根据相关性分数对子图进行修剪 2. 联合GNN结合query context的embedding来进行推理。
model:
相关性分数:(relevance score)
其实就是将检索得到的子图(用之前的方法), 然后将子图中的每一个实体节点与context拼接起来,然后过一个lm最后分类得到一个概率, 意思是通过lm来判别这个实体节点和当前的context的表达在语义空间上有没有一致性。
最后如果这个概率比较大的话, 就保留这个节点,否则从子图中删除这个节点。
联合推理 (joint reasoning):
如上图, 作者首先把QA的context过了一个lm得到一个embedding, 然后将这个embedding作为kg中的一个实体节点z。 然后通过z与context中包含的实体连边, 就形成了一个包含context节点与kg的异构图。 然后大体就是跑几轮gnn,最后结合gnn的信息以及lm的context embedding的信息最后过一个mlp进行分类。
其gnn的架构: 在本文中, 作者用的是GAT, 但是由于在kg中,实体与实体之间还存在有关系, 所以作者在这里用一个线性层将关系与实体同时编码到一个向量中, 然后再跑gat, gat中的节点与节点之间的attention weight作者用的是类似于self-attention的那种Q,K的方法来计算:
总的来说模型非常简单, 但是作者的实验分析做的很完善
experiment:
实验在commonsense QA与openBOOKQA的数据上进行实验,然后对比之前的模型(MHGRN)确实有一定效果, 但是不知道是不是作者自己实现的baseline。
然后作者还分析了
a. 模型的可解释性, 即根据gat中attention的attention weight, 在graph上面进行bfs,从context的节点出发搜索到最终的节点, 最终能找到答案的路径就是模型推理的过程。(可以有多条) 这种方式只适用于做选择题,也就是答案节点在一个已知的集合内。
b. 模型对于扰动的鲁棒性, 即改变not, 或者某一个实体名称,观察attention的weight, 发现比原生的bert确实要具有更强的鲁棒性:
c. 用相关性分数来进行剪枝的有效性, 结果发现, 如果query context中包含的实体越多, 检索得到的子图越大, 结果会越有帮助
点评: 本文结合context和kg的方法较为新颖, 但是模型为什么要这样构造并没有很make sense, 感觉和其他套用GNN的模型没什么很大的区别, 但是本文很大的一个优势在于实验非常详细, 做了可解释性分析(这种用bfs的方式还是比较新颖的),也做了鲁棒性分析, 证明效果确实还可以。估计要投21年的emnlp。
此外, 检索一个子图,并且对他进行剪枝的方式也是一个创新点。
motivation:
现在bert对文本的编码并没有考虑到多种语义关系, 所以作者单独用一个工具将文本中的语义信息(动词,名词之类的)抽取出来作为额外的输入, 最后结合bert的输出然后进行分类
model:
这个模型其实很好看, 左边是bert, 不过由于抽取的语义信息是word级别的, 所以要把bert抽取的bpe格式的词汇还原成word级别的, 所以作者过了一个cnn。
右边就是把句子过了一个sematic role抽取器(之前的工作)然后把抽取出来的这种语义序列过GRU(有点离谱哦)得到语义序列的表达, 最后将语义序列的表达和bert抽取出来的文本的表达结合在一起进行分类。模型还算比较通俗易懂的。
experiment:
在GULE上进行评测, 这个模型只需要fintuning就好, 不需要重新pretrian, 因为相当于额外加了一些文本信息。 然后在各项任务上比原生的bert效果要好。
不过比较离谱的是: 作者后面将semantic role抽取的语义信息给随机加了0.2, 0.4的噪声, 发现结果变化不大, ummm这居然也能解释。
点评:
模型motivation非常清晰, 也针对motivation明确的做了改进, 其实就是bert+其他文本信息,最后两条通道拼接了一下, 实验表示在BERT的基础上有一定效果。 这种paper还是比较好看(看得快)呀
motivation:
没有kg和bert一起训练的模型, 然后本文通过KAR的技术,实现了bert在pretrain的过程中融合KG的信息。
model:
模型比较复杂。
首先有一个span的概念,其实就是句子中的实体, 这些实体在检索的时候会对应多个候选entity。
和一般的pretrain model一样, 过一层transformer得到一个向量H, 因为实体节点的embedding维度可能和H不一致,所以将H投影到Hproj。
然后对于这句话,使用已有的entity selector选择句子中对应的实体位置, 并且将这些实体位置的embedding过一层pooling之后得到一个向量, 所有的实体向量拼起来得到一个矩阵,矩阵大小为(span个数, embedding维度)
用这个矩阵做self-attention得到attention weight, 然后用这个weight与kg中对应的entity相乘,得到某一个span的entity的distribution。
然后将小于某个阈值的entity weight消去, 对剩下的entity通过求得的distribution进行加权得到一个新的span的表达
用这个span的表达和原来span的表达相加得到最终span的表达。
最后用Hproj与这些span做一次self-attention得到最终的表达H'.
experiment: 在很多数据集上表现都还行, 比bert要好一些。
点评: 模型过于复杂, 而且并没有认真解释每一处设计的用意,就是整个模型并不make sense。
只是不停的attention, 搞来搞去搞这么复杂, 最后结果也感觉一般。不是我喜欢的风格。 不过他这种融合kg的方式也可以参考一下。 其实不算是kg,只能说是加强了bert中实体的表达。
motivation:
1. 现在medical MRC的数据集太少, 所以本文提出了一个新的数据集
2. bert在特定领域的mrc还做的不太好, 尤其是医疗领域, 因为医疗的这种问答并没有指定某一个段落中存在答案。
model:
模型整体上来说较为简单: 首先左边是检索对应的evidence(包含了query中实体的一个句子), 然后结合evidence得到一个特征。(用BM25算法来进行检索)
右边是融合KG的部分,从query句子中获取entity, 然后根据这个entity在kg中检索得到对应的三元组, 根据三元组改成句子, 然后把这些句子拼在作为第二个特征, 然后用结合这两者最终得到分类的特征。
当然以上只是从大体上来出发介绍这个模型, 实际上论文在抽取特征的时候也是用了很多attention的。
experiment:
可以看到,在bertbase和bert-large的基础上有一定的进步。
点评:有一个很好的benchmark, 中文的医疗文本数据很少, 本文的数据集看上去质量很高。 模型算比较传统的模型了, 没有太多亮点, 也是靠attention来讲故事。
motivation:
bert融合知识的模型有两类, 第一类是检索类的, 不改bert模型,直接检索子图然后获取knowledge, 这种在测试的过程中需要检索子图, 且依赖检索过程中的对齐精度。并且对子图的表达也是浅层模型(TransE),表达能力有限。
第二类模型是将kg的三元组联合成一个句子,然后mask这种句子中的entity用来训练, 这样会使得模型过拟合这种完成kg的任务, 且这种联合的句子并不具备语法的多样性。
model:
模型主要有两点改进:
a. kg-guided entity masking
和第一篇文章一样, 也是通过kg的三元组,然后检索相关的句子,然后mask句子中kg entity的对应的部分来训练模型, 不过本文对mask的部位做了一点要求, 要求mask的entity是低频的, 并且mask的实体之间需要具备一定的推理能力(在kg中的推理路径不能太长,也不能太短)
2. distractor-suppressed ranking:
对于一个句子,以及其被kg entity匹配的部分, 首先获取到模型中这一字段的表达, 然后这一段对应一个kg entity E, 把E的表达与这一字段的表达看成一个正样本, 从kg中负采样一些兄弟节点出来作为负样本, 然后用contrasting learning的方式来学习这三个表达。
experiment:
数据集:
在普通的QA任务上主要和预训练语言模型比较(bert,robert)加了这个范式之后有一定提点。
在kg completion的任务中主要和bert-kg进行比较, 其实提升也不大.jpg
点评: 很精细化的模型, 主要改进点在mask entity的细节, 然后distractor-suppressed ranking的方式其实也不是新套路, 就是利用lm中的表达与kg entity的表达做对比学习, 好在实验比较充分, 但是模型整体提点也不高。
motivation:
通过修改pretrain 范式来结合knowledge太耗时间, 一般来说bert相当于一个普通人, 可以执行各项语言学上任务(GLEU)。
但是如果这个普通人要做专业领域的事情,就应该只需要学习专业领域的知识,而非把这个人回炉重造, 即bert不需要重新pretrain,而是只需要结合kg来做就好了。
model:
整个模型的创意非常简单, 但是又非常新颖。 就是对于一句话, 把话语中出现的kg entity在kg中的所有关系全部列举在这一句话中, 如上图所示,tim cook is visiting beijing now, 变成了tim cook ceo apple is visiting beijing capital china is_a city now.
这样变化一下之后,就把knowledge融合进了这句话里面。 但是这样融合一般人就读不懂了, 这对模型的精度也是有损失的。 为了防止这种情况, 作者使用了两个措施分别为:soft-position index以及visible matrix
soft-position是指对于句子中同一个entity的不同kg联系, 其position位置保持一致。 visible matrix是指对entity的形容中, 只能看到同一个branch的内容。
experiment:
用了12个中文数据集,还自创了一个医疗知识图谱(可以follow)
baseline就和bert比较了, 在bert的基础上有一定提升。
点评:很巧妙的一个思路, 不过整体来看,对kg的利用还略显粗糙, 但是相对于其他paper而言, 这已经是一篇极好的工作了。
9.
10.