BERT模型

BERT模型是2018年的10月Google发布的论文《Pre-training of Deep Bidirectional Transformers for Language Understanding》,提到的BERT模型刷新了自然语言处理的11项记录

模型架构

在这里插入图片描述
ELMO(Embedding from Language Models),采用的双向的Bi-LSTM实现的,图中左端的前向双层LSTM代表正方向编码器,输入的是从左到右顺序的除了预测单词外的上文Context,右端的逆向双层LSTM代表反方向编码器,输入的是从右到左的逆序的句子下文Context;每个编码器的深度都是两层LSTM叠加。模型的前向和后向LSTM是分别训练的

GPT(Generative Pre-Training),特征提取不是用的RNN,而是用的Transformer,GPT采用两阶段过程,第一个阶段是利用语言模型进行预训练,第二阶段通过Fine-tuning的模式解决下游任务,GPT的预训练虽然仍然是以语言模型作为目标任务,但是采用的是单向的语言模型,ELMO在做语言模型预训练的时候,预测的单词 同时使用了上文和下文,而GPT则只采用Context-before这个单词的上文来进行预测,没有考虑下文

Bert采用和GPT完全相同的两阶段模型,首先是语言模型预训练;其次是使用Fine-Tuning模式解决下游任务。和GPT的最主要不同在于在预训练阶段采用了类似ELMO的双向语言模型

BERT模型

输入部分

在这里插入图片描述
输入的Embedding有三部分组成,
Token Embedding,Segment Embedding,用来区别两种句子,Position Embedding 位置嵌入是指将单词的位置信息编码成特征向量

预训练任务部分

Masked LM((带mask的语言模型训练):是指在训练的时候随即从输入预料上mask掉一些单词,然后通过的上下文预测该单词,在原始训练⽂本中, 随机的抽取15%的token作为即将参与mask的对象,在训练模型时,一个句子会被多次喂到模型中用于参数学习,但是Google并没有在每次都mask掉这些单词,而是在确定要Mask掉的单词之后,80%的时候会直接替换为[Mask],10%的时候将其替换为其它任意单词,10%的时候会保留原始Token。
在这里插入图片描述
Transformer Encoder在训练的过程中, 并不知道它将要预测哪些单词?,哪些单词是原始的样, 哪些单词被遮掩成了[MASK], 哪些单词被替换成了其他单词正是在这样种不确定的情况下, 反倒逼着模型快速学习该token的分布式上下文的语义, 尽最大努力学习原始语言说话的样子,因为原始文本中只有15%的token参与了MASK操作, 并不会破坏原语言的表达能力和语言规则;

Next Sentence Prediction (下一句话的预测任务):因为涉及到QA和 推理, 句子主题关系等NLP任务,增加了第二个预训练任务,目的是让模型理解两个句子之间的联系。所有的参与任务训练的语句都被选中参加,50%的B是原始⽂本中实际跟随A的下⼀句话。(标记为IsNext, 代表正样本),50%的B是原始⽂本中随机抽取的⼀句话。(标记为NotNext, 代表负样本)
例如:训练的输入是句子A和B,B有一半的几率是A的下一句,输入这两个句子,模型预测B是不是A的下一句。预训练的时候可以达到97-98%的准确度。

Bert模型微调

在这里插入图片描述
在海量单预料上训练完BERT之后,便可以将其应用到NLP的各个任务中了,BERT在11个不同任务中的模型,它们只需要在BERT的基础上再添加一个输出层便可以完成对特定任务的微调

可以调整的参数和取值范围有:
Batch size: 16, 32
Learning rate (Adam): 5e-5, 3e-5, 2e-5
Number of epochs: 3, 4

Bert优点

Bert的基础建立在transformer之上, 拥有强大的语言表征能力和特征提取能力。在11
项NLP基准测试任务中达到了state of the art。同时再次证明了双向语言模型的能力更加强大
在这里插入图片描述