11_BERT(预训练Transformer模型)

一、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

  1. Devlin, Chang, Lee, and Toutanova. BERT: Pre-training of deep bidirectional transformers for language understanding. In ACL, 2019
  2. 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? (被遮住的单词是什么)

具体做法:

  1. 把输入的第二个被遮挡的单词替换为:[MASK]符号。
  2. [MASK]符号会被Embedding层编码成词向量XM
  3. 把[MASK]位置的输出记作向量UM
  4. 把UM 作为特征向量输入一个Softmax分类器,分类器的输出是一个概率分布P。字典里面的每一个单词都有一个概率值,通过概率值判断被遮挡的单词是什么?
  5. 这个例子中,遮挡住了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”.

image-20210407195540534

这条训练数据碰巧只有一个被遮挡单词,所有共有两个任务,因为知道第二句话是随机抽样得到的,因此是假的,标签设置为false;被遮挡的单词是south,因此标签是单词south

  • Input:

       "[ CLS]  calculus is a [ MASK] of math
        [ SEP]  panda is native to [MASK] central china".
    
  • Targets: false,“south”.

image-20210407195607085

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,其中还有一些技巧,随机遮挡单词的时候也有一些技巧
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少云清

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值