BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
介绍
语言模型的预训练能够提高语言任务的性能(就像cv中的imagenet预训练),将预训练的语言表达应用到下游的任务(down-stream tasks)有两种策略:
(1)Feature-based:将预训练得到的特征作为下游任务的额外特征,下游任务的模型结构是根据具体任务设计的(task-specific);
(2)Fine-tuning:下游任务使用预训练语言模型的结构,通过增加特定任务的层和finetune的方式来训练模型(结构重用);
(PS:预训练的方法可以是无监督的,也可以是有监督的(机器翻译任务的迁移)。)
论文提出了基于fine-tuning的语言表达模型BERT(Bidirectional Encoder Representation from Transformers),基于双向的上下文信息的transformers编码器,使用MLM(Masked Language Model)和NSP(Next Sentence Prediction)任务来预训练得到语言的隐含表达(token embedding)。同时基于finetune的模型,可以减少针对具体任务的模型设计。BERT在11个语言任务上取得了非常好的效果。
BERT
下图为BERT的预训练和fine-tuning,可以看出一个预训练的BERT可以重用于不同语言任务上,然后finetune。
模型结构:
多层双向Transformer,原论文:Attention is all you need
: 层数L=12,隐含层大小H=768,head数量A=12;(110M,与Open AI GPT同样大小)
: L=24, H=1024, A=16
输入输出
输入为token,输出为token的隐含向量T
[CLS]是分类token,隐含状态为C,用于分类任务。
区分sentence:用[SEP] token;用segment embedding表示sentence A or B。
下图为Token的representation,由token,segment,position的embedding相加得到
预训练
不同于传统的left-to-right or right-to-left 的语言模型,BERT训练是通过MLM和NSP任务。
Masked Language Model
随机掩盖部分输入tokens,然后对应地输出被掩盖的tokens。论文使用15%地masks。
论文用token [MASK] 表示mask,但是在语言任务中一般是不会有这种token的,所以,论文使用如下策略解决:80%用[MASK],10%用随机token代替,10%用原本的token。这个比例的实验如下表所示,可以看出还是有点影响的。
Next Sentence Prediction
有一些任务如QA,自然语言推断NLI需要理解句子间的关系,于是论文通过预测句子是不是下一句的关系来预训练。具体通过C来做分类。
附录中可知,MLM和NSP是结合到一起做预训练的。
Fine-tuning
Input:sentence A, B对应于sentence pairs,hypothesis-premise,question-passage,等
Output:输出T feed into 输出层做token level或者输出C用于分类。
与OPT,ELMo对比
每一层都是双向
实验
GLUE benchmark结果
论文还给出在QA数据集SQuAD 1.1, 2.0的结果
Ablation 研究,可看出NSP和MLM起了很大的作用。
总结
得益于双向transformer的结构,MLM和NSP的预训练方法,以及fine-tuning的多任务共用,使得BERT取得了非常不错的效果。另外,最近有一篇将BERT结合知识图谱的论文,也是值得一看的:ERNIE: Enhanced Language Representation with Informative Entities,ACL2019。