NLP预训练模型
一、按照时间线主要有:
-
ELMO (2018.3 华盛顿大学 )
- 传统word2vec无法解决一词多义,语义信息不够丰富,诞生了ELMO
-
GPT (2018.06 OpenAI )
- ELMO以lstm堆积,串行且提取特征能力不够,诞生了GPT
-
BERT (2018.10 Google)
- GPT 虽然用transformer堆积,但是是单向的,诞生了BERT
-
XLNet (2019.06 CMU+google brain)
- BERT虽然双向,但是mask不适用于自编码模型,诞生了XLNET
-
ERNIE (2019.4 百度)
- BERT中mask代替单个字符而非实体或短语,没有考虑词法结构/语法结构,诞生了ERNIE
- BERT-wwm (2019.6.30 哈工大 +讯飞)
- 为了mask掉中文的词而非字,让BERT更好的应用在中文任务,诞生了BERT-wwm
- RoBERTa (2019.7.26 Facebook)
- Bert训练用更多的数据、训练步数、更大的批次,mask机制变为动态的,诞生了RoBERTa
- ERNIE2.0 (2019.7.29 百度 )
- ERNIE的基础上,用大量数据和先验知识,进行多任务的持续学习,诞生了ERNIE2.0
- BERT-wwm-ext (2019.7.30 哈工大 +讯飞 )
- BERT-wwm增加了训练数据集、训练步数,诞生了BERT-wwm-ext
- ALBERT (2019.10 Google)
- BERT的其他改进模型基本考增加参数和训练数据,考虑轻量化之后,诞生了ALBERT
二、ELMO模型介绍
ELMO的英文为 “Embedding from Language Models",该论文获NAACL18 Best Paper ,采用双层双向LSTM。
现阶段存在问题:传统的词向量(如word2vec)是静态的/上下文无关的,一旦训练好后,词向量就是固定的,使得在不同语境下,映射的同一个词的词向量是相同的,不符合真实文本表示情况。
ELMO解决的出发点事:解决了一词多义的问题
ELMO主要结构:
- ELMO基于RNN(LSTM)训练,使用两个单向LSTM代替一个双向LSTM
ELMO两阶段如下,本质就是根据当前上下文对Word Embedding进行动态调整的过程:
- 用语言模型进行预训练
左边的前向双层LSTM是正方向编码器,顺序输入待预测单词w的上文
右边则是反方向编码器,逆序输入w的下文
训练好之后,输入一个新句子s,每个单词都得到三个Embedding(训练结果):
①单词的Word Embedding ;
②第一层关于单词位置的Embedding;
③第二层带有语义信息的Embedding。
-
做下游任务时,从预训练网络中提取对应单词的网络各层的Word Embedding作为新特征补充到下游任务中;
如QA任务:输入Q/A句子,对三个Embedding分配权重,整合生成新的Embedding;
ELMO缺点:
- lstm是串行,训练时间长;相比于transformer,特征提取能力不够(ELMO采用向量拼接)
- 一个非常明显的缺点在特征抽取器选择方面,ELMO 使用了 LSTM 而不是新贵 Transformer,Transformer 是谷歌在 17 年做机器翻译任务的“Attention is all you need”的论文中提出的,引起了相当大的反响,很多研究已经证明了 Transformer 提取特征的能力是要远强于 LSTM 的。
- ELMO 采取双向拼接这种融合特征的能力可能比 Bert 一体化的融合特征方式弱。(从道理推断产生的怀疑,没有验证)
三、GPT模型
GPT的英文为 “Generative Pre-Training”
训练过程:
1、GPT 训练过程分为两个部分,无监督预训练语言模型和有监督的下游任务 fine-tuning
[图片上传失败...(image-c7c5d0-1624199108637)]
2、自回归模型: 根据上文内容预测下一个可能跟随的单词,就是常说的自左向右的语言模型任务
3、transformer的decoder里面有三个子模块,GPT只用了第一个和第三个子模块,如下图
与ELMO的不同:
- GPT用transformer的decoder提取特征,而不是Bi-LSTM;堆叠12个
- 单向(根据上文预测单词,利用mask屏蔽下文)
- GPT中的mask操作在Self-Attention 中, Softmax 之前:
第一阶段(预训练)
- 采用Transformer的decoder模型作为特征提取器。ransformer是当时效果最好的特征提取器,RNN不能并行且性能相对较差,是个很明智的选择。
- ELMO使用上下文对单词进行预测,而 GPT 则只采用 Context-before 这个单词的上文来进行预测,而抛开了下文。
第二阶段(应用于下游任务):
1、对于不同的下游任务来说,本来你可以任意设计自己的网络结构,现在不行了,你要向 GPT 的网络结构看齐,把任务的网络结构改造成和 GPT 的网络结构是一样的。
2、在做下游任务的时候,利用第一步预训练好的参数初始化 GPT 的网络结构,这样通过预训练学到的语言学知识就被引入到你手头的任务里来了,这是个非常好的事情。再次,你可以用手头的任务去训练这个网络,对网络参数进行 Fine-tuning。
那怎么改造才能靠近 GPT 的网络结构呢?
GPT 论文给了一个改造施工图如上:
对于分类问题,不用怎么动,加上一个起始和终结符号即可;
对于句子关系判断问题,比如 Entailment,两个句子中间再加个分隔符即可;
对文本相似性判断问题,把两个句子顺序颠倒下做出两个输入即可,这是为了告诉模型句子顺序不重要;
对于多项选择问题,则多路输入,每一路把文章和答案选项拼接作为输入即可。从上图可看出,这种改造还是很方便的,不同任务只需要在输入部分施工即可。
优点:Transformer捕捉更长范围的信息,优于RNN;并行,快速
缺点:需要对输入数据的结构调整;单向
由于单向地用上文预测下一个单词,GPT比BERT更适合做文本生成的任务。
Bert模型介绍
BERT 英文为 “Bidirectional Encoder Representations from Transformers"
与GPT的区别:
双向
用的是transformer的encoder(GPT用的是decoder,ELMO用的是Bi-LSTM)
多任务学习方式训练:预测目标词和预测下一句
优点:效果好、普适性强、效果提升大
缺点:硬件资源的消耗巨大、训练时间长;预训练用了[MASK]标志,影响微调时模型表现
Bert缺点:
(1)BERT在第一个预训练阶段,假设句子中多个单词被Mask掉,这些被Mask掉的单词之间没有任何关系,是条件独立的,然而有时候这些单词之间是有关系的。
(2)BERT的在预训练时会出现特殊的[MASK],但是它在下游的fine-tune中不会出现,这就造成了预训练和微调之间的不匹配,微调不出现[MASK]这个标记,模型好像就没有了着力点、不知从哪入手。所以只将80%的替换为[mask],但这也只是缓解、不能解决。
(3). BERT在分词后做[MASK]会产生的一个问题,为了解决OOV的问题,我们通常会把一个词切分成更细粒度的WordPiece
(4). wordpiece存在问题。这样它只需要记住一些词(WordPiece的序列)就可以完成这个任务,而不是根据上下文的语义关系来预测出来的。使得模型能找到预测的捷径。很自然的想法就是词作为一个整体要么都Mask要么都不Mask,这就是所谓的Whole Word Masking。
预训练分为以下三个步骤:
①Embedding
三个Embedding 求和而得,分别是:
- Token Embeddings:词向量,首单词是[CLS]标志,可用于分类任务;
- Segment Embeddings:用[SEP]标志将句子分为两段,因为预训练不光做LM还要做以两个句子为输入的分类任务;
- Position Embeddings:和之前文章中的Transformer不同,不是三角函数而是学习出来的。
②预测目标词Masked LM
随机挑选一个句子中15%的词,用上下文来预测。这15%中,80%用[mask]替换,10%随机取一个词替换,10%不变。用非监督学习的方法预测这些词。
③预测下一句 Next Sentence Prediction
选择句子对A+B,其中50%的B是A的下一句,50%为语料库中随机选取
BERT的微调(fine tuning)参考参数:
- Batch Size:16 or 32
- Learning Rate: 5e-5, 2e-5
- Epochs:2, 3, 4
BERT非常强大,在 11 项 NLP 任务中夺得 SOTA 结果,这11项任务可分为四大类:
- 句子对分类任务
- 单句子分类任务
- 问答任务
- 单句子标注任务
【小总结】:
- ELMO用Bi-LSTM,GPT用transformer的decoder,BERT用transformer的encoder
- ELMO:双向,GPT,单向,BERT:双向
- ELMO:解决一词多义,GPT,特征更丰富,BERT:双向/多任务训练/能捕捉更长距离的依赖
- GPT:适合文本生成等任务(NLG任务),BERT:适合预测任务(NLU任务)
- GPT-2,以及一些诸如 TransformerXL 和 XLNet 等后续出现的模型,本质上都是自回归模型,而 BERT 则不然,虽然没有使用自回归机制,但 BERT 获得了结合单词前后的上下文信息的能力,从而取得了更好的效果。而其中XLNet虽然使用了自回归,但引入了一种能够同时兼顾前后的上下文信息的方法,即双流自注意力。
抄自