【预训练模型】学习笔记

预训练模型

  • 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张图片
区别:
1)GPT特征抽取器不是用RNN,而是最新特征提取器Transfprmer,在典型的NLP任务中,Transformer特征抽取能力要强于RNN
2)GPT模型沿着序列单方向进行,ELMo会同时考虑上下文
3)BERT基于上述两个模型特点,做了两点改进,首先,将单向Transformer改为双向Transformer单元,其次 在预训练任务上做了调整==(MLM,掩码)(NSP,预测下一个句子)==
MLM
MLM任务类似填空任务,将输入句子的部分词语随机掩码,来最终预测掩码词
NSP
输入连续的句子片段,学习预测其中第二个句子是否是原始文档中的后续句子

模型结构

(1)Embedding层
【预训练模型】学习笔记_第2张图片
送入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有稳定网络参数的作用。

你可能感兴趣的:(深度学习,python,深度学习,pytorch)