11_BERT(预训练Transformer模型)

简介: 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


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 预测被遮挡的单词。


9c1d3ac96e2d4995a6890dcffa7d67f0.png


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.(执行梯度下降来更新模型参数)


55c565f169f74bf28015879a21edc14f.png


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]符号的意思是分类。


          [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

c07790b67803488eb19fa9a4304fd1df.png


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和词向量包含这种关联。


16be275d4fac4982bcf39452af344adb.png

二、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”.


f504f6154a5f107275d23d625c8db0e0.png


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


Input:

"[ CLS]  calculus is a [ MASK] of math
    [ SEP]  panda is native to [MASK] central china".


Targets: false,“south”.


ebc970f2abaecb4191db769eb9a84223.png


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,其中还有一些技巧,随机遮挡单词的时候也有一些技巧


目录
相关文章
|
3月前
|
PyTorch 算法框架/工具
Bert Pytorch 源码分析:五、模型架构简图 REV1
Bert Pytorch 源码分析:五、模型架构简图 REV1
33 0
|
3月前
|
机器学习/深度学习 人工智能 开发工具
如何快速部署本地训练的 Bert-VITS2 语音模型到 Hugging Face
Hugging Face是一个机器学习(ML)和数据科学平台和社区,帮助用户构建、部署和训练机器学习模型。它提供基础设施,用于在实时应用中演示、运行和部署人工智能(AI)。用户还可以浏览其他用户上传的模型和数据集。Hugging Face通常被称为机器学习界的GitHub,因为它让开发人员公开分享和测试他们所训练的模型。 本次分享如何快速部署本地训练的 Bert-VITS2 语音模型到 Hugging Face。
如何快速部署本地训练的 Bert-VITS2 语音模型到 Hugging Face
|
3月前
|
PyTorch 算法框架/工具
Bert Pytorch 源码分析:五、模型架构简图
Bert Pytorch 源码分析:五、模型架构简图
27 0
|
5月前
lda模型和bert模型的文本主题情感分类实战
lda模型和bert模型的文本主题情感分类实战
110 0
|
4月前
|
JavaScript
Bert-vits2-v2.2新版本本地训练推理整合包(原神八重神子英文模型miko)
近日,Bert-vits2-v2.2如约更新,该新版本v2.2主要把Emotion 模型换用CLAP多模态模型,推理支持输入text prompt提示词和audio prompt提示语音来进行引导风格化合成,让推理音色更具情感特色,并且推出了新的预处理webuI,操作上更加亲民和接地气。
Bert-vits2-v2.2新版本本地训练推理整合包(原神八重神子英文模型miko)
|
5月前
|
并行计算 API C++
又欲又撩人,基于新版Bert-vits2V2.0.2音色模型雷电将军八重神子一键推理整合包分享
Bert-vits2项目近期炸裂更新,放出了v2.0.2版本的代码,修正了存在于2.0先前版本的重大bug,并且重炼了底模,本次更新是即1.1.1版本后最重大的更新,支持了三语言训练及混合合成,并且做到向下兼容,可以推理老版本的模型,本次我们基于新版V2.0.2来本地推理原神小姐姐们的音色模型。
又欲又撩人,基于新版Bert-vits2V2.0.2音色模型雷电将军八重神子一键推理整合包分享
|
4月前
|
人工智能 语音技术
Bert-vits2新版本V2.1英文模型本地训练以及中英文混合推理(mix)
中英文混合输出是文本转语音(TTS)项目中很常见的需求场景,尤其在技术文章或者技术视频领域里,其中文文本中一定会夹杂着海量的英文单词,我们当然不希望AI口播只会念中文,Bert-vits2老版本(2.0以下版本)并不支持英文训练和推理,但更新了底模之后,V2.0以上版本支持了中英文混合推理(mix)模式。
Bert-vits2新版本V2.1英文模型本地训练以及中英文混合推理(mix)
|
3月前
|
机器学习/深度学习 数据采集 人工智能
【NLP】Datawhale-AI夏令营Day3打卡:Bert模型
【NLP】Datawhale-AI夏令营Day3打卡:Bert模型
|
3月前
|
机器学习/深度学习 自然语言处理 数据格式
训练你自己的自然语言处理深度学习模型,Bert预训练模型下游任务训练:情感二分类
训练你自己的自然语言处理深度学习模型,Bert预训练模型下游任务训练:情感二分类
55 0
|
4月前
|
机器学习/深度学习 自然语言处理 数据挖掘
预训练语言模型中Transfomer模型、自监督学习、BERT模型概述(图文解释)
预训练语言模型中Transfomer模型、自监督学习、BERT模型概述(图文解释)
61 0

热门文章

最新文章

相关实验场景

更多