一、What is BERT ?
- BERT [1] is for pre-training Transformer’s [2] encoder.(BERT是预训练Transformer模型的encoder网络,从而大幅提高准确率)
- How? (BERT的基本想法有两个,一个想法:随机遮挡一个或者多个单词,让encoder网络根据上下文来预测被遮挡的单词。第二个想法是:把两个句子放在一起,让encoder网络判断两句话是不是原文里相邻的两句话。BERT用这两个任务来预训练Transformer模型的encoder网络)
- Predict masked word.(预测被遮挡的单词。)
- Predict next sentence.(预测下一个句子)
Reference
- Devlin, Chang, Lee, and Toutanova. BERT: Pre-training of deep bidirectional transformers for language understanding. In ACL, 2019
- Vaswani and others. Attention is all you need. In NIPS, 2017.
1.1 Task 1: Predict Masked Words(任务一:预测被遮挡的单词)
1.1.1 Randomly mask a word(随机遮挡一个单词)
- “The ___ sat on the mat”
- What is the masked word? (被遮住的单词是什么)
具体做法:
- 把输入的第二个被遮挡的单词替换为:[MASK]符号。
- [MASK]符号会被Embedding层编码成词向量XM 。
- 把[MASK]位置的输出记作向量UM 。
- 把UM 作为特征向量输入一个Softmax分类器,分类器的输出是一个概率分布P。字典里面的每一个单词都有一个概率值,通过概率值判断被遮挡的单词是什么?
- 这个例子中,遮挡住了cat这个单词,训练的时候希望分类器的输出P向量接近单词cat的one-hot向量
注意:
- Transformer的encoder网络不是一对一映射,而是多对一映射。
- 向量UM 不仅依赖于向量XM ,而且依赖于所有X的向量,UM 在[MASK]位置上,但是UM 知道整句话的信息,向量UM 包含上下文信息,因此可以用UM 预测被遮挡的单词。
1.1.2 Predict the masked word(预测被遮挡的单词)
- e: one-hot vector of the masked word “cat”. (把cat的one-hot向量计作e)
- p: output probability distribution at the masked position. (向量P是分类器输出的概率分布,我们希望P接近e)
- Loss = CrossEntropy(e,p). (用反向传播算出损失函数关于模型参数的梯度)
- Performing one gradient descent to update the model parameters.(执行梯度下降来更新模型参数)
1.1.3 总结
BERT会随机遮挡单词,把遮住的单词作为标签,BERT预训练不需要人工标注的数据集,可以用任何书籍或者维基百科作为训练数据,可以自动生成标签,这样一来训练数据要多少有多少,足以训练非常大的模型
1.2 Task 2: Predict the Next Sentence(任务二:预测下一个句子)
- Given the sentence:
“calculus is a branch of math”. (微积分是数学的一个分支) - Is this the next sentence?
“it was developed by newton and leibniz” (它是由牛顿和莱布尼兹发展起来的)
现在做出判断,这两句话是否是原文中相邻的两句话?
-
Given the sentence:
“calculus is a branch of math”. (微积分是数学的一个分支) -
Is this the next sentence?
“panda is native to south central china” (熊猫原产于中国中南部)
1.2.1 Input Representation(输入表示)
准备训练数据,把两句话拼接起来,两句话之间用 [SEP] 符号 分隔开;在最前面放置一个[CLS]符号,占一个位置,[CLS]符号的意思是分类。
-
Input:
[CLS] "calculus is a branch of math" [SEP] "it was developed by newton and leibniz"
- [CLS] is a token for classification.
- [SEP] is for separating sentences.
-
Target: true
生成训练数据的时候,有50%是原文里真实相邻的两句话;另外50%的第二句话是从训练数据中随机抽取的句子
-
Input:
[CLS] "calculus is a branch of math" [SEP] "panda is native to south central china"
- [CLS] is a token for classification.
- [SEP] is for separating sentences.
-
Target:false
1.2.2 Predict the next sentence
- 一条训练数据包含两句话,两句话都被分割成很多个符号,在句子的最前面放[CLS]符号,占一个位置,这个位置的输出计作向量C,但是C并不仅仅依赖于[CLS],向量C包含两句话的全部信息,所以靠C向量就能判断两句话是否真实的相邻。
- 把C作为特征向量,输入到一个分类器,分类器的输出是介于(0,1)之间的值f,1代表true,分类器认为两句话是从原文中拿出来的;0代表false,分类器认为第二句话是假的,两句话不相关;
- 可以用CrossEntropy作为损失函数来衡量预测f与真实标签之间的区别,有了loss损失函数,就可以计算梯度,然后用梯度下降来更新模型参数。
这样做预训练的作用:相邻两句话通常有关联,这样做二分类可以强化这种关联,让Embedding和词向量包含这种关联。
二、Combining the two methods
BERT把两个任务结合起来,用来预训练Transformer
2.1 Input Representation(输入表示)
把两句话拼接起来,随机遮挡15%的单词,这条训练数据碰巧有两个被遮挡的单词,一共有三个任务。
第一个任务:判断两句话是否真的相邻。知道这两句话是从原文中取出来的,因此标签设置为true。
另外两个任务:预测两个被遮住的单词,标签是真实的单词,"branch"和 “was”
-
Input:
"[ CLS] calculus is a [ MASK] of math [ SEP] it [ MASK] developed by newton and leibniz".
-
Targets: true,“branch”,“was”.
这条训练数据碰巧只有一个被遮挡单词,所有共有两个任务,因为知道第二句话是随机抽样得到的,因此是假的,标签设置为false;被遮挡的单词是south,因此标签是单词south
-
Input:
"[ CLS] calculus is a [ MASK] of math [ SEP] panda is native to [MASK] central china".
-
Targets: false,“south”.
2.2 Training(训练)
假如有两个单词被遮挡,那么就有三个任务,就需要定义三个损失函数。
- Loss 1 is for binary classification (i.e., predicting the next sentence.)第一个任务是二分类:第一个损失函数是binary classification。
- Loss 2 and Loss 3 are for multi-class classification (i.e., predicting the masked words.) 第二、三个任务是预测单词,多分类任务:损失函数是multi-class classification
- Objective function is the sum of the three loss functions.目标函数是三个损失函数的加和,
- Update model parameters by performing one gradient descent.把目标函数关于模型参数求梯度,然后做梯度下降来更新模型参数
2.3 Data(数据)
- BERT does not need manually labeled data. (Nice! Manual labeling is expensive.) BERT的 好处不需要人工标注数据,人工标注数据非常麻烦,得花几十万才能标注比较大的数据集,两种任务的标签都是自动生成的
- Use large-scale data, e.g., English Wikipedia (2.5 billion words.)
- Randomly mask words (with some tricks.) (随机遮挡单词,有一些小技巧)
- 50% of the next sentences are real. (The other 50% are fake.) 接下来的句子中有50%是真实的。 (另外50%是假的)。
2.4 Cost of Computation(计算成本)
论文中有两种模型。BERT训练出来的模型参数是公开的,如果用Transformer直接下载BERT预训练的模型和参数就可以。
- BERT Base (BERT小模型)
- 110M parameters.
- 16 TPUs, 4 days of training (without hyper-parameter tuning.) 无超参调整
- BERT Large (BERT大模型)
- 235M parameters.
- 64 TPUs, 4 days of training (without hyper-parameter tuning.)
三、总结
- Bidirectional Encoder Representations from Transformers (BERT)
- BERT用海量数据训练超级大的模型
- 主要涉及BERT的主要原理,但是没有详细介绍BERT的技术细节
- BERT的Embedding层并不是简单的word Embedding,其中还有一些技巧,随机遮挡单词的时候也有一些技巧