1.2 GPT
GPT是“Generative Pre-Training”的简称,是指的生成式的预训练。GPT的训练程序包括两个阶段。第一阶段的预训练是在一个大型文本语料库上学习一个高容量的语言模型。接下来是一个微调阶段,在这个阶段,使模型适应带有标记数据的判别性任务。
第一阶段的工作具体为:Embedding——>Transformer——>Text Production。
第二阶段的工作具体为:将下游任务的网络结构改造成和GPT的网络结构是一样的;利用第一步预训练好的参数初始化GPT的网络结构完成下游任务,这样通过预训练学到的语言学知识就被引入到任务里了;使用下游任务去训练这个网络,对网络参数进行Fine-tuning,使得这个网络更适合解决任务的问题。
对于特定任务的输入转换,使用了一种遍历式的方法,将结构化的输入转换成预先训练好的模型可以处理的有序序列。图3提供了一个可视化的说明。
图3 左)GPT中使用的Transformer结构和训练目标。(右) 输入在不同的任务上进行微调的转化。将所有结构化的输入转化为标记性的序列,由预训练模型处理,然后是一个线性+softmax层
当前 SOTA!平台收录 GPT 共 1 个模型实现资源。
模型 | SOTA!平台模型详情页 |
GPT | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/models/models/09877886-65c3-44b0-a5be-9e5043964787 |
1.3 BERT
BERT(Bidirectional Encoder Representations from Transformers)自从谷歌提出就一直大热,很多人认为BERT是整个NLP研究历程中里程碑似的节点。BERT与ELMo提出,一经提出就明显胜过了ELMo。BERT的灵感来源是OpenAI在17年发布过的一篇名为“Attention is all your need”论文中提到的Transformer模型。关于Transformer的相关模型我们放在第七个章节中具体介绍,本章节内BERT是作为一类预训练模型介绍的。
首先,BERT在NLP的11个任务(包括文本分类任务)中均有较大程度性能提升。其次,BERT在无监督场景下结合预训练能够最大化地利用文本数据,同时对不同场景的下游任务均有提升和帮助。BERT的基础建立在Transformer之上,拥有强大的语言表征能力和特征提取能力,同时再次证明了双向语言模型的能力更加强大。
BERT的网络结构使用了双向Transformer的堆叠,Encoder和Decoder分别12层。其思想出于ELMo和GPT但同时又高于二者。ELMo采用了双向LSTM来训练词Embedding,虽然使用了双向LSTM,但其实是使用2个单向LSTM对学到的句子语义信息做拼接,和BERT完全双向不同,对句子间不同词的语义依赖关系也不如BERT捕捉的充分。GPT只有单向,其假设句子间语义依赖关系只有从左到右,而没有从右到左,该假设在实际中并不完全满足。BERT加入了Masked Language Model(MLM) 和 Next Sentences Prediction(NSP),使得模型能够在无监督的场景下学习到句子间特征和语义特征。在无监督学习场景训练,能最大化的使用训练语料。而Pre-train和Fine-tune能够方便地将已训练好的BERT模型迁移到不同的应用场景,在工业界大有益处。
图1最右侧为BERT的架构,可以看出BERT的最大亮点:双向Transformer网络,BERT直接引用了Transformer架构中的Encoder模块,并舍弃了Decoder模块, 这样便自动拥有了双向编码能力和强大的特征提取能力。
下图为BERT的输入图示。由图示可知,BERT的输入包括三个部分:词嵌入张量(Token embeddings)、语句分块张量( segmentation embeddings)、位置编码张量(position embeddings),最终的embedding向量是将上述的3个向量直接做加和的结果。
图4 BERT输入表示。输入嵌入是标记嵌入、分割嵌入和位置嵌入的总和。嵌入和位置嵌入的总和
接下来,MLM和 NSP是BERT的另外两个亮点:
BERT中引入了一个带mask的语言模型训练(Masked LM)。在原始训练文本中,随机抽取15%的token作为即将参与mask的对象。在选中的token中,数据生成器并不是把他们全部变成[MASK],具体变化方法包括三类:一是,在80%的概率下,用[MASK]标记替换token,比如my dog is hairy → my dog is [MASK];二是,在10%的概率下,用随机单词替换token,比如my dog is hairy → my dog is apple;三是,在10%的概率下,保持token不变,比如my dog is hairy → my dog is hairy。
BERT还引入了一个下句话预测任务(Next Sentence Prediction ),目的是服务问答、推理、句主题关系等NLP任务。所有的参与任务训练的语句都被选中参加,其中:50%的B是原始本中实际跟随A的下句话;50%的B是原始本中随机抽取的一句话。在该任务中,BERT模型可以在测试集上取得97-98%的准确率。
最后,fine-tuning是BERT的另一个亮点,只需要将特定任务的输入,输出插入到BERT中,利用Transformer强大的注意力机制就可以模拟很多下游任务,从而具有极佳的迁移特性。
当前 SOTA!平台收录 BERT 共 7 个模型实现资源。
模型 | SOTA!平台模型详情页 |
BERT | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/models/models/1d27a74a-8668-4d64-9615-ce889b88700b |
1.4 ALBERT
ALBERT(A Lite BERT)被称为Lite版的Bert,相关论文发表在ICLR 2020。ALBERT采用了两种技术来减少参数量,以应对扩展预训练模型的主要障碍。第一个是因子化嵌入参数化。通过将大型词汇嵌入矩阵分解成两个小矩阵,将隐藏层的大小与词汇嵌入的大小分开。这种分离使得在不显著增加词汇嵌入的参数大小的情况下更容易增长隐藏的大小。第二种技术是跨层参数共享。这种技术可以防止参数随着网络的深度而增长。这两种技术都大大减少了BERT的参数数量而不严重损害性能,从而提高了参数效率。类似于BERT的ALBERT配置的参数减少了18倍,训练速度可以提高1.7倍左右。减少参数的技术也作为一种正则化的形式,稳定了训练并有助于泛化。为了进一步提高ALBERT的性能,还引入了一个用于句序预测的自监督损失(sentence-order prediction,SOP)。SOP主要关注句子间的连贯性,旨在解决原始BERT中提出的下句预测(NSP)损失的无效性。
ALBERT架构的主干与BERT相似,因为它使用具有GELU非线性的Transformer encoder。将词汇embedding size表示为E,将encoder layers层数表示为L,将hidden size表示为H,将feed forward/filter size设置为4H,多头注意力的数量设置为H / 64。
让BERT模型变大(scale up)的方法一般有两种:变深(增加模型的层数)、变宽 (增加隐藏尺寸,即每一层embeddings的特征数),ALBERT的方式是第二种。具体ALBERT的改进点如下所示:
Factorized Embedding Parameterization(将初始嵌入缩短为128个特征)。对于词向量维度 E 和隐层维度 H,在词表 V 到 H 的中间,插入一个小维度 E,多做一次尺度变换:O(VxH) → O(VxE+ExH)。
Cross-layer Parameter Sharing(共享所有层的参数)。具体分为三种模式:只共享 attention 相关参数、只共享 FFN 相关参数、共享所有参数(attention相关+FFN)。全共享如下图所示:
图5 ALBERT全共享参数
Sentence Order Prediction(SOP)。SOP 就是让模型预测两个相邻 segments 有没有被调换前后顺序。SOP主要是针对NSP提出的,即句子顺序判断。NSP将话题预测和连贯性预测混合在一个任务中。然而,与连贯性预测相比,话题预测更容易学习,而且与使用MLM[掩蔽语言建模]损失学习的内容重叠更多。因此,ALBERT提出一个主要基于连贯性的损失,即句序预测(SOP)损失,它避免了话题预测,侧重于对句子间的一致性进行建模。
此外,还包括用长句做预训练、随机遮连续的多个词(Masked-ngram-LM vs Masked LM)、扩大模型参数、增加预训练数据、去掉Dropout层等trick。
当前 SOTA!平台收录 ALBERT 共 13 个模型实现资源。
模型 | SOTA!平台模型详情页 |
ALBERT | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/models/models/0306236e-ce20-4886-98cb-45730fda6cf9 |