当前位置:   article > 正文

NLP-预训练模型:综述【基础:BERT】【预训练任务优化:ERNIE、SpanBERT】【训练方法优化:RoBERTa、T5】【模型结构优化:XLNet、ALBERT、ELECTRA】【模型轻量化】_t5, roberta, albert,bert,transformer,macbert区别

t5, roberta, albert,bert,transformer,macbert区别

一、为什么需要预训练模型

复旦大学邱锡鹏教授发表了一篇NLP预训练模型综述,“Pre-trained Models for Natural Language Processing: A Survey”,从多个角度分析了当前预训练语言模型。本文基于这篇文章来分析。邱老师认为预训练模型有三大优势:

  • 预训练模型从大规模语料中学习知识,对下游任务帮助很大
  • 预训练提供了一种更好的参数初始化方式,使得在目标任务上泛化能力更好,收敛速度更快
  • 预训练可以认为是一种正则化手段,可以防止模型在小数据集上过拟合。

二、预训练简史

预训练语言模型到目前分为两个阶段

  • 预训练word embeddings。这个阶段只训练词向量,而且是静态的,是一种feature-base方式。典型例子为word2vec, glove。利用词向量进行token embedding,然后送入模型中。模型设计百花齐放,但主要以LSTM为主。
  • 预训练上下文编码器。这个阶段基于上下文动态学习embedding和encoding。典型例子为ELMO、GPT、BERT。

三、预训练任务

目前大部分都是基于自监督学习来构建的,又分为基于上下文学习和对比学习两类。

1、上下文学习

1.1 语言模型LM

语言模型一般指的是自回归语言模型,由上文利用最大似然估计,来预测下文。典型代表就是GPT

1.2 掩码语言模型 MLM

类似于完形填空,先在原始语句中mask一部分token,然后predict他们。BERT中采用的就是这种方式。这种方法有两个比较大的问题

  • pretrain阶段人为引入了mask,但fine-tune阶段不存在mask,导致两阶段不一致。为了减缓这个影响,BERT提出了三种mask方式,替换为[mask]、替换为其他token、保持不变,三者比例为80%、10%、10%。
  • 不同于LM,MLM每次只能对mask位置的token进行predict,大大降低了训练效率和模型收敛速度,使得训练更耗时。

在seq2seq结构中,也有人尝试使用了MLM,也就是Seq2Seq MLM。在该结构中,encoder中的语句加入了mask,而在decoder中则需要生成这些mask。Seq2Seq MLM特别适合在生成任务中使用,比如摘要、翻译、问答等。MASS和T5中就是用了这种方法。

针对MLM预训练任务,很多文章进行了不同角度的优化,主要包括:

  • SpanBERT以span masking的方式,对连续token进行mask。从而可以学到span级别的信息。
  • Roberta采用了dynamic masking动态掩码,将语料复制为10份,每一份一种随机mask,从而加入了一定的信息增益。
  • ERNIE(baidu)对实体和短语进行mask,从而使模型学到了实体和短语知识,也可以认为是一种引入外部知识的方式。
  • StructBERT在span内打乱了token顺序,然后进行重构。提升了任务难度,并整合了语言结构。
  • XLM构建了两个不同语言的基于机器翻译语料的sequence,在它的基础上进行MLM,从而提升了模型多语言理解能力。

1.3 排列语言模型 PLM

针对于BERT预训练和精调两阶段不一致的问题,XLNet提出了排列语言模型,从而将auto-encoder转变为了auto-regression。利用attention-mask和双流自注意力来实现。

1.4 去噪自编码器 Denoising Autoencoder (DAE)

MLM就是一种DAE。向原始语料中添加噪声,利用这些包含噪声的语料,来重构不含噪声的输入。添加噪声的方法主要有:mask token、删除token、填充文本、句子排列、文本换位。

2、对比学习 Contrastive Learning (CTL)

CTL的思想是 “learning by comparison”, 它假定观测文本比随机采样的文本,语义更加相似。一般CTL任务比MLM简单一些,需要的算力也更少。

2.1 Replaced Token Detection (RTD)

ELECTRA提出了这个任务,判断sequence中每个token是否和原始token一致。它是一个二分类任务,label为replaced和original。通过这种方式,使得每个token都可以参与到prediction中,大大加快了模型收敛速度。

2.2 Next Sentence Prediction (NSP)

BERT提出了这个任务,正样本为来自同一文档的两个连续语句,负样本为不同文档的两个语句。NSP的初衷是让模型学习到sentence level的信息,对NLI等句子关系判断的任务有帮助。但目前基本认为NSP反而会有副作用,主要原因为:

  • NSP的负样本来自不同文档,差异过大,任务过于简单,导致模型参数训练不充分。
  • NSP将两句话构成一个pair,会减小单个语句的长度。而越长的语句,信息量越大,可以提升模型效果
  • NSP的负样本来自不同文档,利用不同文档的语句来预测MLM,容易给MLM带来较大的噪声。

2.3 Sentence Order Prediction (SOP)

ALBERT提出了这个任务,语句顺序预测。一个pair的两个文本,不论正负样本,都来自同一文档。正样本为AB,负样本为BA。模型需要预测语句顺序。这个方法克服了MLM噪声引入问题,也使得模型从基于NSP的主题预测变为了基于SOP的语句关系预测,大大增加了任务难度,从而使模型参数训练更充分。

四、预训练模型分类

在这里插入图片描述
根据是否基于上下文、模型架构、预训练任务、扩展方法分为四大类。如上所示。

  • 是否基于上下文:第一代不基于上下文,是静态的word embedding。如word2vec、glove。第二代之后的基本就都是基于上下文的了
  • 模型架构:分为LSTM、Transformer encoder、Transformer decoder、Transformer。
  • 预训练任务:上文详细分析了
  • 扩展方法。比如知识增强、多语言、特定语言、多模态、特定领域、模型轻量化等。

比较有代表性的一些模型如下表
在这里插入图片描述

1、GPT

模型名称隐层数张量维度自注意力头数参数量训练语料
openai-gpt1276812110M英文语料
  • openai-gpt: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共110M参数量, 由OpenAI在英文语料上进行训练而得到.

2、GPT-2

模型名称隐层数张量维度自注意力头数参数量训练语料
gpt21276812117MGPT-2英文语料
gpt2-xl481600251558MGPT-2英文语料
  • gpt2: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共117M参数量, 在OpenAI GPT-2英文语料上进行训练而得到.
  • gpt2-xl: 编码器具有48个隐层, 输出1600维张量, 25个自注意力头, 共1558M参数量, 在大型的OpenAI GPT-2英文语料上进行训练而得到.

3、BERT

模型名称隐层数张量维度自注意力头数参数量训练语料
bert-base-uncased1276812110M小写英文文本
bert-large-uncased24102416340M小写英文文本
bert-base-cased1276812110M不区分大小写的英文文本
bert-large-cased24102416340M不区分大小写的英文文本
bert-base-multilingual-uncased1276812110M小写的102种语言文本
bert-large-multilingual-uncased24102416340M小写的102种语言文本
bert-base-chinese1276812110M简体和繁体中文文本
  • bert-base-uncased: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共110M参数量, 在小写的英文文本上进行训练而得到.
  • bert-large-uncased: 编码器具有24个隐层, 输出1024维张量, 16个自注意力头, 共340M参数量, 在小写的英文文本上进行训练而得到.
  • bert-base-cased: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共110M参数量, 在不区分大小写的英文文本上进行训练而得到.
  • bert-large-cased: 编码器具有24个隐层, 输出1024维张量, 16个自注意力头, 共340M参数量, 在不区分大小写的英文文本上进行训练而得到.
  • bert-base-multilingual-uncased: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共110M参数量, 在小写的102种语言文本上进行训练而得到.
  • bert-large-multilingual-uncased: 编码器具有24个隐层, 输出1024维张量, 16个自注意力头, 共340M参数量, 在小写的102种语言文本上进行训练而得到.
  • bert-base-chinese: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共110M参数量, 在简体和繁体中文文本上进行训练而得到.

4、DistilBERT

模型名称隐层数张量维度自注意力头数参数量训练语料
distilbert-base-uncased667681266M/
distilbert-base-multilingual-cased67681266M/
  • distilbert-base-uncased: 基于bert-base-uncased的蒸馏(压缩)模型, 编码器具有6个隐层, 输出768维张量, 12个自注意力头, 共66M参数量.
  • distilbert-base-multilingual-cased: 基于bert-base-multilingual-uncased的蒸馏(压缩)模型, 编码器具有6个隐层, 输出768维张量, 12个自注意力头, 共66M参数量.

5、ALBERT

模型名称隐层数张量维度自注意力头数参数量训练语料
albert-base-v11276812125M英文文本
albert-base-v21276812125M英文文本

6、RoBERTa

模型名称隐层数张量维度自注意力头数参数量训练语料
roberta-base1276812125M英文文本
roberta-large24102416355M英文文本
  • roberta-base: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共125M参数量, 在英文文本上进行训练而得到.
  • roberta-large: 编码器具有24个隐层, 输出1024维张量, 16个自注意力头, 共355M参数量, 在英文文本上进行训练而得到.

7、Transformer-XL

模型名称隐层数张量维度自注意力头数参数量训练语料
transfo-xl-wt10318102416257Mwikitext-103英文语料
  • transfo-xl-wt103: 编码器具有18个隐层, 输出1024维张量, 16个自注意力头, 共257M参数量, 在wikitext-103英文语料进行训练而得到.

8、XLNet

模型名称隐层数张量维度自注意力头数参数量训练语料
xlnet-base-cased1276812110M英文语料
xlnet-large-cased24102416240M英文语料
  • xlnet-base-cased: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共110M参数量, 在英文语料上进行训练而得到.
  • xlnet-large-cased: 编码器具有24个隐层, 输出1024维张量, 16个自注意力头, 共240参数量, 在英文语料上进行训练而得到.

9、XLM

模型名称隐层数张量维度自注意力头数参数量训练语料
xlm-mlm-en-204812204816/英文语料
  • xlm-mlm-en-2048: 编码器具有12个隐层, 输出2048维张量, 16个自注意力头, 在英文文本上进行训练而得到.

10、XLM-RoBERTa

模型名称隐层数张量维度自注意力头数参数量训练语料
xlm-roberta-base127688125M2.5TB的100种语言文本
xlm-roberta-large24102716355M2.5TB的100种语言文本

11、T5

模型名称隐层数张量维度自注意力头数参数量训练语料
t5-small6512860MC4语料
t5-base1276812220MC4语料
t5-large24102416770MC4语料
  • t5-small: 编码器具有6个隐层, 输出512维张量, 8个自注意力头, 共60M参数量, 在C4语料上进行训练而得到.
  • t5-base: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共220M参数量, 在C4语料上进行训练而得到.
  • t5-large: 编码器具有24个隐层, 输出1024维张量, 16个自注意力头, 共770M参数量, 在C4语料上进行训练而得到.

五、总结

所有上述预训练模型及其变体都是以transformer为基础,只是在模型结构如神经元连接方式,编码器隐层数,多头注意力的头数等发生改变,这些改变方式的大部分依据都是由在标准数据集上的表现而定,因此,对于我们使用者而言,不需要从理论上深度探究这些预训练模型的结构设计的优劣,只需要在自己处理的目标数据上,尽量遍历所有可用的模型对比得到最优效果即可.

  • BERT:是最重要的一个预训练模型,没有之一。BERT也是我们理解其他模型的重中之重,其他基本都是围绕它来进行优化的。
  • ERNIE、SpanBERT【预训练任务的优化】:预训练任务的优化可以带来模型效果的极大提升。
  • RoBERTa、T5【训练方法优化】:增加数据语料,优化模型超参,也能带来较大的效果提升。这一块的玩家基本都是不缺钱的大金主,因为要做很多对比实验,都是需要极大算力支持的。RoBERTa和T5也是两个大力出奇迹的模型。
  • XLNet、ALBERT、ELECTRA【模型结构优化】:优化模型结构相对来说比较fancy和有创新性,也比较容易发文章,也能带来极大的performance提升和算力需求降低。XLNet、ALBERT、ELECTRA是三个创造力十足的模型。
  • ALBERT、Q8BERT、DistillBERT、TinyBERT【模型轻量化】:模型压缩和加速,始终是工业界落地中的关键话题。从结构优化、量化、剪枝、蒸馏四个角度来对BERT进行轻量化。



参考资料:
NLP之常用预训练模型详解
NLP预训练模型1 – 综述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/368901
推荐阅读
相关标签
  

闽ICP备14008679号