天天看点

【预训练模型】学习笔记1、BERT2、XLNET3、RoBERTa4、ALBERT

预训练模型

  • 1、BERT
        • 基本概念
        • 模型结构
        • BERT微调
  • 2、XLNET
  • 3、RoBERTa
  • 4、ALBERT

1、BERT

基本概念

BERT(BI-directional Encoder Representations from Transformers),中文意思是基于Transformer的双向编码表示,是谷歌2018发布的开源NLP预训练模型。

在BERT发布之前,大部分NLP任务是基于word2vec+RNN等网络结构的基本架构,由于缺乏数据,所以基于图像领域思想,将NLP任务应用于预训练加微调架构上.在BERT之前ELMo和GPT是典型代表。

GPT(Generative Pre-Training),其核心在通用上,采用两个阶段.

(1)利用语言模型进行预训练

(2)通过Fine-tuning(微调)解决下游任务

【预训练模型】学习笔记1、BERT2、XLNET3、RoBERTa4、ALBERT

区别:

1)GPT特征抽取器不是用RNN,而是最新特征提取器Transfprmer,在典型的NLP任务中,Transformer特征抽取能力要强于RNN

2)GPT模型沿着序列单方向进行,ELMo会同时考虑上下文

3)BERT基于上述两个模型特点,做了两点改进,首先,将单向Transformer改为双向Transformer单元,其次 在预训练任务上做了调整==(MLM,掩码)(NSP,预测下一个句子)==

MLM

MLM任务类似填空任务,将输入句子的部分词语随机掩码,来最终预测掩码词

NSP

输入连续的句子片段,学习预测其中第二个句子是否是原始文档中的后续句子

模型结构

(1)Embedding层

【预训练模型】学习笔记1、BERT2、XLNET3、RoBERTa4、ALBERT

送入Token Embedding层之前先进行tokenization,[CLS]插入文本开头,[SEP]插在两个句子之间和第二个句子尾。[CLS]用来配合下游NLP任务,[SEP]用来划分句子。

Token Embedding层根据BERT模型大小将每个Token转换成768或者1024维大小。

(2)Segment Embedding

前一个向量把0赋予给第一个句子中各个token,后一个向量把1赋予给第二个句子token,如果仅有一个句子其Segment Embedding都是0

(3)Position Embedding

与Tranformer中的Position Encoding 不同,没有采用三角函数,而是训练出来的向量.

BERT微调

由于BERT预训练已经可以对句子和句子之间的表示进行计算。对于文本分类和文本匹配任务,可通过[CLS]的输出加上一层MLP来解决。

单句标注任务,只需加softmax就可以完成

对于QA任务,只需用两个线性分类器分别输出范围的起点和终点。

2、XLNET

BERT模型基AE(Auto-Encoding,自编码)的预训练模型。AE语言模型,类似于填空的一种方法,将要预测的词语进行掩码操作,最终预测这个词。

AE语言模型的不足

1)预训练使用了[MASK],这种认为定义的符号在微调过程不存在,导致了预训练和微调过程的不一致。

2)AE语言模型有着不符合真实情况的假设。它假设所预测的token是相互独立的。

XLNet采用广义AR(Auto-Regressive,自回归),AR语言模型更擅长NLP生成任务,因为生成上下文时,通常都是正向的。

XLNet提出了新方法避免[MASK]的弊端,重排列语言模型(PLM),由于计算复杂度,不可能计算所有排序,实际计算只采用一种排序。具体实现很复杂,参考源码。

3、RoBERTa

由Facebook和华盛顿大学共同完成。

1)训练步数更长,批大小更大,训练数据更多

数据量16GB->160GB,步数100K->500K

2)删除了NSP任务

未采用NSP任务的结果有一些提升,可假设该方法无法学习长期依赖关系

3)训练序列更长

以往神经机器翻译研究表明,当lr适当提高时,非常大批大小既可以提高优化速度,又可以提高最终任务性能。

4)动态调整Masking机制

BERT依赖静态mask。为避免每个epoch中对每个训练样本都使用同样的mask方式,训练数据被复制10倍,在40个epoch中每个都要10种不同的mask。动态mask在一定程度上提升了实验效果。

4、ALBERT

ALBERT最大特点,减少了参数量,维持了BERT性能

注意通过矩阵分解(Factorized embedding parameterization,和跨层参数共享(Cross-layer parameter sharing)来降低参数量。

1)矩阵分解

在BERT、XLNet、RoBERTa中,词表的embedding size(E),和Transformer的hidden size(H)都是相等的,这个选择有缺点。

从理论上看储存了信息的H应该要远大于不太依赖内容信息的。实际情况,如果E = H,由于字典太大,模型参数量就会非常大。ALBERT使用了较小的E,训练一个独立上下文的embedding(维度V X E),之后再投影到隐层(乘以 E X H),相当于做了个因式分解。

2)跨层共享机制

单独用一个Self-Attention层循环12次,每一层参数都一样。这样就可以用一层的参数量来表示12层的参数,因此模型参数大大减少。

对BERT每一层参数做了分析,发现每一层参数基本相似,因此直接共享了。

ALBERT有稳定网络参数的作用。

继续阅读