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