关键词:预训练模型,knowledge-Enhanced PLM,
1.背景及问题描述
通过大数据量训练得到的预训练语言模型,比如BERT、GPT、XLNet等,再对于特定的任务做fine-tuning,或者通过多任务的方式来个更新模型的全部权重,可以达到了SOTA的结果。但是,这种模式存在了一些限制,1.他们很难获得丰富的知识 2.不擅长学习“否定”的知识 3.在多任务训练会发生灾难性遗忘(catastrophic forgetting)等。最近也出现了一些模型,将结构化的知识与预训练模型结合进行训练来更新模型参数,但是这种方式无法做到持续学习(continual learning )。所以,作者提出了K-ADAPTER的结构,可以很灵活的把知识注入到大型的预训练语言模型中。
2.已有的解决方案
本文比较了目前一些用知识来强化预训练语言模型的方法:
作者主要在目标函数,主干模型是否固定,是否可以持续的注入知识来与之前的模型做比较。
想比较上述方法,本文的模型主要有三点不同:
- 模型的训练目标,不仅关注事实相关的预测(比如token预测和关系预测),同时关注语义结构(比如句法分析),这两个是通过两个不同的DAPTER引入的。
- 其他模型的都需要将BERT的原始参数带入训练。
- 本文的模型支持持续学习。因为可以把每个adapter看作带有不同知识的插件,所以可以很灵活的引入不同那个知识,来进行持续学习。
3.解决方案概述
从上图可以看出K-ADAPTER结构与之前模型的区别,图中TRM表示transformer层,KIA表示adapter层。传统的训练模型引入多种知识(a),当引入新的知识,主干模型需要参与更新,这可能导致灾难性遗忘;而本文的模型,在引入多种知识时,不需要更新主干网络参数,是平行训练各个Adapter网络,是互相不影响的。
网络结构:
1.模型整体结构:
一种知识可以用一个adapter模型来引入,每一个adapter模型包含K层adapter。
每层的adapter是由N个transformer层,两个projection层,并且在两个projection层之间加入残差处理。
数据流转:
每层adapter插入到BERT中指定的transformer层之中(本文是选择了{0,11,23}层),将BERT中对应层的隐向量和前一层adapter输出进行拼接,作为每一层adapter的输入。
每个特定的adapter模型最后一层的输出,与预训练模型最后一层的输出进行拼接,就得到了这个adapter模型的最终输出,用来进行下游任务的预测。
在预训练阶段,首先需要在特定的任务上预训练adapter,得到包含特定知识的adapter。在fine-tuning阶段,对于不同的下游任务,可以想BERT一样进行fine-tuning。当需要用到多个不同领域知识的adapter,只要选择特定的adapter,将其最终的输出拼接来预测。
2.本文引入的两种ADAPTER:
Factual Adapter
FacAdapter的预训练任务:关系分类,给定context和一对实体,对其间关系标签进行分类;
数据集:T-REx,将Wikipedia摘要和wikidata三元组进行了对齐;
数据集规模:5.5M句子,430种关系;
实施细节:用BERT和FacAdapter的最后一层输出拼接,然后经过一层pooling层,得到实体的representations,然后使用两个实体representations来进行关系预测。Linguistic Adapter
LinAdapter的预训练任务:依存关系分类,预测给定句子中每个token在依存分析结果中的father index。
数据集:BookCorpus,利用Standford Parser进行处理;
数据集规模:1M;
实施细节:用BERT和FacAdapter的最后一层输出拼接作为输入representation,引入一个线性层在token的每个位置上做分类任务。
4.结果分析
在三类下游任务上验证K-Adapter的性能:a) relation classification,b) entity typing,c) question answer;在实体相关的任务上都取得了提升。同时加入两个Adapter一般有更大的提升。几点结论:
- 在实体相关的任务上有明显提升
- 两个Adapter想结合效果更佳
- K-Adapter的模型普遍比multi-train的模型效果要好一点
5.创新点或贡献
- 提出了K-ADAPTER的结构,不同的知识适配器的学习是解耦的(独立的),可以很灵活的在庞大的预训练模型的基础上持续训练来引入各种知识。
- 用Adapter学习的实体知识和语义知识,用在下游任务有明显的提升。
- 在注入知识的过程中,原始的PLM参数没有变化;解决遗忘灾难问题。
6.个人思考
- 这不是蒸馏吗?
- 每个Adapter都需要分别设计预训练目标,那如何针对不同的知识设计不同的学习/预训练任务?
[参考:]
paper