BERT:Pre-training of Deep Bidirectional Transformers for Language Understanding
0 Abstract
1、Bert,是一个基于Transformer的双向编码表示器,从unlabeled text中学习上下文双向信息。
( GPT,基于Transformer的单向语言模型 、ELMo,基于双向LSTM的语言模型)
2、pre-trained bert模型,接下游任务只需要加个输出层。
1 Introduction
主要介绍预训练语言模型的作用、如何用、和Bert的主要思路
1、事实证明真的有用!
预训练语言模型对很多NLP任务都有提升作用,包括sentence-level 和 token-level。
2、怎么用?feature-based 和 fine-tuning
feature-based,以ELMo为代表,作为下游任务模型的输入特征;
fine-tuning,以GPT为代表,加一个适用于下游任务的输出层,在下游任务训练过程中,微调模型的所有参数。
3、现有研究的不足。都是单向的!
标准的语言模型是单向的,只能使用前序序列预测当前词。
在模型选择上受到了限制,例如在GPT中 ,只能选择解码器(Masked multi-head attention)。
在finetuning方法中,如果下游任务是序列标注,那需要看整句来推测当前时刻标签,双向的模型表现效果会更好。
4、本文的贡献。MLM和NSP
1)Masked Language Model,使用掩码语言模型代替标准语言模型,实现双向编码;
标准语言模型:输入 tok_1, tok_2, ...., tok_n,从左到右,用toki-k ...toki-1 预测toki ,k是窗口大小
掩码语言模型:同上面一样的输入,随机mask掉一些token,预测tok[MASK]
2)Next Sentence Prediction,输入句子对,判断是否为上下句
2 Related Work
2.1 无监督的特征学习方法,Elmo,以词嵌入为主,主要通过单向的语言模型任务进行预训练
2.2 无监督的微调方法,GPT,在无标签的文本上预训练,然后在有标签数据的下游任务上进行微调
2.3 有监督的迁移学习,NLP在NLI和机器翻译任务上有大量的公开数据,在这两个任务上训练完的模型可以用在别的任务上
3 BERT
1、Bert的pre-training 和fine-tuning
pre-training: 在MLM和NSP上,使用无标签数据进行预训练
fine-tuning: 首先使用预训练好的参数对模型进行初始化,然后在下游任务的训练中,微调模型所有的参数。
每个下游任务都要单独对模型进行微调。
2、BERT-BASE 和 BERT-LARGE
使用多层双向Transformer encoder,Transformer 的层数记作L,隐藏层的大小记作H, self-attention的头数记作A
BERT-BASE: L=12,H=768, A=12,模型大小与GPT一样,方便进行对比;
BERT-LARGE: L=24,H=1024, A=16
3、输入和输出
输入:input representation=token embedding + segment embedding + position embedding
1)可以是单个句子,也可以是句子对。输入为句子对的时候,中间加分隔符[SEP],嵌入层加segment embedding。
2)使用WordPiece embedding,当token在语料中出现频率过低,但它的词根出现频率高的话,就把这个token切成词根
3)输入序列的首字符是[CLS],用来表示整个序列的特征
输出:
1)下游任务为分类时,[CLS]最终的hidden state作为输出层的输入
2)下游任务为序列标注时,取每个token的representations作为输出层的输入
4、Pretraining
Task #1: Masked LM
1)为了训练双向的表示,BERT将输入序列的tokens,以15%的概率随机mask,masked token的最后一层隐层的输出进入softmax层,softmax的大小是语料词典大小,用来推测masked token的真实值。
2)[MASK]在fine-tuning的过程中不会用到,所以会导致pretraining和finetuning的输入数据不一样,为了减少影响,masked的token中,有80%是真的用[MASK]进行替代,10%是用使用随机一个token进行替代,10%不做任何处理。
Task #2:Next Sentence Prediction
很多NLP的任务需要计算两个句子之间的关系,这在语言模型中并没有被学习到,所以BERT中加入NSP任务作为预训练任务。
我们在语料中随机抽取50%的上下句对和50%的无关句对作为训练语料。
Data: 预训练语料使用了800M words的BooksCorpus和2500M的English Wikipedia
5、Finetuning
微调的输入输出见 3、输入和输出
相比pretraining,微调训练起来比较简单,一个GPU几个小时就可以达到不错的效果
6 Conclusion
主要贡献是:双向