Bert论文-读记录
Abstract:
我们提出...,与之前的语言表示不同的是,Bert用到左边和右边的context,用来训练双向表示。结果:预训练的Bert只需要一个额外的output layer作为 fine-tune 使用。
Bert 很简单,也很强大。在十一种任务上达到了新的state-of-art ,包括推动Glue到80.4%。Mutinli到86.7%,SQuAD到93.2%
Introduction:
预训练语言模型能很有效的提升NLP任务。如:。。。
有两种方式运用预训练模型到任务上:feature-based和fine-tune,feature-based,如:ELMo,在特定任务模型上,使用ELMo的词向量作为additional feature。fine-tune例如:GPT,引出几个task--specific参数,在连接的下游模型上改变这些参数完成fine-tune操作。在先前的工作中,在预训练中都使用相同的object function。(非方向性的语言模型)
我们提出 当前的技术严重限制了预训练表示的能力,尤其是在fine-tune方式这个阶段。主要的limitations是标准语言模型是没有方向的,这限制了预训练能选择的模型架构。例如,在OpenAI 的GPT 中作者使用从左到右的结构,这样在self-attention中每个token只能参与到在他之前的token的计算。这样限制了句子级别的任务,例如SQuAD,利用context的双向的信息十分关键。
在这篇文章中,我们基于提出的Bert改进了fine-tune方法:从transformer中得到双向encoder表示。提出新的预训练objective“masked language model”。masked 语言模型随机的mask 输入的部分token,objective是用来预测被mask的token 的最初的id???不像之前的从左到右的预训练语言模型,MLM允许representation融合语境的左右前后语境信息。能训练深度的双向的transformer模型。除了MLM模型,我们还引进了“next sentence perdition”:jointly pre-trains text-pair representation。
我们论文主要贡献:
1、我们说明了语言表示的双向预训练模型的重要性;不像gpt使用单向的语言模型,bert使用masked语言模型来得到深度双向预训练表示。这个也与ELMo相反,ELMo使用简单的对从左到右和从右到左LMs相连接。
2、我们展示了预训练表示省略掉本来所需的繁重的task-specific结构工程,Bert是第一个基于表示模型的fine-tune,能达到多个任务state-of-art,包括sentence-level和token-level 的任务,表现优于许多task-specific architecture。
3、Bert advances the state-of-art of 十一个任务, 模型的双向运用是最重要的。代码链接:
Related Work
1、feature-based approachs
直接使用训练出来的词向量,从非网络模型,到神经网络模型,
词向量扩展到句子向量,段落向量,
从Wordvec、glove到elmo
2、fine-tune approachs
GPT
3、transfer Learning from Supervised Data
非监督训练得益于有大量的未标注的语料,但是也有尝试从监督训练的方法
如计算机视觉
3、Bert
介绍模型实现。首先是模型架构描述,输入层表示的细节。然后是我们预训练模型的主要创新点。预训练和fine-tune步骤。最后介绍Bert和Open AI GPT 的区别
3.1、Model Architecture
多层双向Transfotmer encoder,关于我们implementation的trasnformer不再详细赘述,参考论文:Vaswani et al. (2017),released in the tensor2tensor library(
https://github.com/tensorflow/tensor2tensor)
layers : L, the hidden size as H, and the number of self-attention heads as A.
In all cases we set the feed-forward/filter size to be 4H, i.e., 3072 for the H = 768 and 4096 for the H = 1024.
主要使用两个model-0size
1、BERT_BASE: L=12, H=768, A=12, Total Parameters=110M
这个主要跟GPT对比(一个双向一个单向)
2、BERT_LARGE: L=24, H=1024, A=16, Total Parameters=340M
我们把双向的Transformer叫做Transformer encoder,把从左到右Transformer叫做Transformer decoder(也就是用于生成的时候一般都是从左到右)
3.2、Input Representation
我们的输入能够明确不含糊的表示单个text sentence 或者一对text sentences (e.g., [Question, Answer]) in one token sequence???
![](https://i-blog.csdnimg.cn/blog_migrate/5d36f368f3f673314eb4bda1d8ec8a21.png)
几个表示相加
1、使用wordpiece embedding(3000 token vocabulary),split word 使用##f分割
2、positional embedding
3、CLS代表如果是classification任务的时候使用,不是分类任务这个位置可以忽略
4、针对句子对使用A、B序列。句子对打包为一个序列:用两种方式:首先用SEP符号分开这两个句子,第二步,将一个学习的句子A的embedding,加到every token of the first sentence,将一个学习的句子B的embedding,加到 every token of the second sentence。
5、针对单个句子,只使用A。
3.3、Pre-training Tasks
我们使用的LM模型,不是简单地从左到右或者从右到左这样的计算方式
3.3.1、Task #1:Masked LM
直觉上的,很容易想到深度双向模型优于从左到右模型或者浅表的将从左到右和从右到左连接起来这样的方式。。不幸的是,传统的方法只能训练从左到右的模型或从右到左,since bidirectional conditioning would allow each word to indirectly “see itself” in a multi-layered context。
为了训练深度双向模型,我们用很直接的方法:随机的将input token进行mask掉,然后来预测这些被mask掉的token。
这个过程叫做“mask LM”(MLM)。被mask的token的最后hidden 本次vetors喂给softmax,这样的LM模型。
在我们的实验中,我们随机的将wordpiece进行15%mask、然后预测这些被mask掉的words
原因没看懂
针对15%随机选择的mask token ,进行下列操作:
• 80% of the time: Replace the word with the [MASK] token, e.g., my dog is hairy → my dog is [MASK]
• 10% of the time: Replace the word with a random word, e.g., my dog is hairy → my dog is apple
• 10% of the time: Keep the word unchanged, e.g., my dog is hairy → my dog is hairy. The purpose of this is to bias the representation towards the actual observed word.
Transformer encoder不知道哪个词被mask,哪个词被随机替换掉。但是这样的情况很少,只是15%中的10%(也就是15%*10%=1.5%)被这样对待。所以大体上不影响
3.3.2、Task #1: Next Sentence Prediction
许多downstream tasks如问答,文本蕴涵,是基于两个句子的关系和理解,这样的关系语言模型学习不到。为了训练一个能理解句子关系的模型,我们预训练一个二进制化的“下一句预测任务”,这个可以从任何单语语料库中简单地生成。准去的来说,我们选择句子A和B,50%的B是A的下一句话,50%的B是语料中随机选择的。
![](https://i-blog.csdnimg.cn/blog_migrate/c91982122bcdd41ab1d4e539220260b0.png)
3.4、Pre-training Procedure
第一段
语料:BooksCorpus (800M words) (Zhu et al., 2015) and English Wikipedia (2,500M words),使用document级别的语料,而不是句子级别的,如Word Benchmark (Chelba et al., 2013)
第二段
为了生成每个训练输入序列,我们从语料库中采样两个文本跨度,我们将其称为“句子”,即使它们通常比单个句子长得多(但也可以更短)。准去的来说,如上文我们选择句子A和B相连接,50%的B是A的下一句话,50%的B是语料中随机选择的。然后对wordpiece进行15%的mask
第三段&第四段
训练细节,数量以及参数,环境
3.5、Fine-tuning Procedure
对于分类任务,使用最后一层的输出的CLS标志进行预测,分类任务fine-tune时只需要加入一个K参数(类别数),label probabilities记为P=softmax(CW^T),对于span-level 和 token-level task,过程详见section 4。
在fine-tune阶段,大部分超参数和预训练的时候一样
• Batch size: 16, 32
• Learning rate (Adam): 5e-5, 3e-5, 2e-5
• Number of epochs: 3, 4
我们发现训练集越大对参数的敏感度越小。fine-tune很快,好用(苍白描述是好用,文章描述很奇妙)。
3.6、Comparison of BERT and OpenAI GPT
有对比意义的是GPT,Bert的很多设计理念与GPT都很接近。还有以下几点不同:
1、训练语料
GPT is trained on the BooksCorpus (800M words);
BERT is trained on the BooksCorpus (800M words) and Wikipedia (2,500M words).
2、
GPT的关键token【SEP】【CLS】只在fine-tune阶段使用,Bert的【SEP】【CLS】和句子A/B在预训练阶段也使用。
3、
GPT was trained for 1M steps with a batch size of 32,000 words;
BERT was trained for 1M steps with a batch size of 128,000 words.
4、
GPT使用相同的学习率5e-5 for all fine-tuning experiments;
BERT针对不同的任务选择不同的学习率,且表现更好。
4 Experiments
we present BERT fine-tuning results on 11 NLP tasks.