Transformer模型
Transformer存在的缺点:
- 捕获长期依赖的能力;
- 解决了上下文碎片问题(context segmentation problem);
- 提升模型的预测速度和准确率;
paper:Self-Attention with Relative Position Representations (aclanthology.org)(首先提出transformer存在位置编码的问题)
paper:Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context (Transformer-XL的论文)
Vanilla Transformer是Transformer和Transformer-XL中间过度的一个算法
详解Transformer-XL - 知乎 (zhihu.com)
Transformer-XL介绍 - 知乎 (zhihu.com)
Transformer-XL 提出使用片段机制加速了模型的训练和推理,同时使用空间存储上一片段的隐藏层向量,可以进行长文本的学习;改进了位置编码的问题,将位置编码加入到注意力机制计算过程中 =>(XLNet、DeBERTa)
BERT模型
BERT存在哪些优缺点?
- 优点:能够获取上下文相关的双向特征表示
- 缺点:
- 生成任务表现不佳:预训练过程和生成过程的不一致,导致在生成任务上效果不佳;
- 采取独立性假设:没有考虑预测[MASK]之间的相关性,是对语言模型联合概率的有偏估计(不是联合概率的密度估计);
- 输入噪声[MASK],造成预训练-精调两阶段之间的差异;
- 无法文档级别的NLP任务(长文本任务),只适合于句子和段落级别的任务;
BERT擅长处理哪些下游NLP任务?
- 适合句子和段落级别的任务,不适用于文档级别的任务(如长文本分类);
- 适合处理文本语言本身就能处理好的任务(如QA/机器阅读理解),不依赖于额外特征(如推荐搜索场景);
- 适合处理高层语义信息提取的任务,对浅层语义信息提取的任务的提升效果不大(如文本分类/NER,文本分类关注于“关键词”这种浅层语义的提取);
- 适合处理句子/段落的匹配任务,因为BERT在预训练任务中引入NSP;因此,在一些任务中可以构造辅助句(类似匹配任务)实现效果提升(如关系抽象/情感挖掘等任务);
- 不适合处理NLG任务,因为BERT在生成任务上效果不佳;
模型压缩
参考:关于Bert压缩
模型压缩的方法
- 低秩因式分解 & 跨层参数共享(计算量没有下降、参数量下降)
- 蒸馏
- 量化
- 剪枝(直接降低模型拟合能力)
ALBERT
参考:解读ALBERT
- 嵌入向量参数因式分解(减少参数量)
- 跨层参数共享(减少参数量)
- 句间连贯性损失(增加任务学习难度)
其他的方法:(弃用dropout 、masked-ngram-LM)
词向量矩阵分解论文:用深度矩阵分解给词向量矩阵瘦身
TinyBERT
知识蒸馏原理:知识蒸馏(Knowledge Distillation) 经典之作
知识蒸馏温度T:加了温度之后的softmax函数为, 原来的softmax函数是T = 1的特例。 T越高,softmax的output probability distribution越趋于平滑,其分布的熵越大,负标签携带的信息会被相对地放大,模型训练将更加关注负标签。
KL散度: Kullback-Leibler(KL)散度介绍 - 知乎 (zhihu.com)
TinyBERT知识蒸馏:TinyBERT(华为):自然语言理解之BERT蒸馏
各种蒸馏模型对比:BERT模型蒸馏完全指南(原理/技巧/代码)
- 软标签:关注负标签的信息
- 硬标签:纠正Teacher model的噪声错误
知识蒸馏的模型:
- Distilled BiLSTM(将BERT蒸馏到单层BiLSTM中)
- BERT-PKD(精调阶段蒸馏, 蒸馏中间隐藏层)
- DistillBERT(预训练阶段蒸馏, 隐层使用cosine loss)
- TinyBERT(预训练阶段蒸馏、微调阶段蒸馏,注意力矩阵蒸馏)
- MobileBERT(预训练阶段蒸馏,压缩每层维度)
- MiniLM(引入助教机制、蒸馏注意力机制中的value矩阵)
- FastBERT
- 极限语言模型压缩(paper)Extreme Language Model Compression with Optimal Subwords and Shared Projections | OpenReviewhttps://openreview.net/forum?id=S1x6ueSKPr
大模型
RoBERTa
论文名称:《RoBERTa: A Robustly Optimized BERT Pretraining Approach》
论文:https://arxiv.org/pdf/1907.11692.pdf
代码:https://github.com/pytorch/fairseq
- 动态掩码(BERT预处理数据后,每个样本进行随机的mask,epoch训练时mask相同的单词。RoBERTa预处理时未进行mask,每次向模型提供输入时进行随机mask)
- 去掉NSP任务(由BERT的句子对输入改为连续输入多个句子直至最大长度512。(FULL-SENTENCES的最大长度512可以跨越文章, DOC-SENTENCES来源于同一文章))
- 增大数据量(数据量由BERT的16G提升到160G)
- 更大的batch_size(尝试从256到8000不等的batch_size, 证实更大的batch_size会有更好的效果)
- Byte-level BPE编码(BERT采用基于character level的Byte-Pair Encoding(BPE)编码,词表大小为30K, 利用启发式分词规则对输入进行预处理后学习得到。RoBERTa采用更大byte级别BPE词表来训练BERT, 词表大小为50K,未对输入做预处理或分词)
XLNet
论文名称:《XLNet: Generalized Autoregressive Pretraining for Language Understanding》
论文:https://arxiv.org/abs/1906.08237
代码:https://github.com/zihangdai/xlnet
动机:
- Bert预训练和微调之间的不匹配
- Bert的Max len 为512
XLNet模型
XLNet模型结合了BERT、GPT、Transformer-XL的优点
- 所有的分解序列作为一个集合,从中采样一个序列, 例如原始序列为1-2-3-4, 分解序列中一个采样为2-4-1-3, 倘若当前token为3, XLNet的方式即可看到所有的信息。
- 引入Transformer-XL的片段循环机制(segment recurrence mechanism)和相对编码机制(relative encoding scheme)
- 引入Masked Two-Stream Self-Attention解决PLM出现的目标预测歧义问题。本文计算两种self-attention计算方式,一个mask当前词,attention值记为g;一个已知当前词,attention值记为h。最后使用g的值去预测词x。
XLNet:运行机制及和Bert的异同比较 - 知乎 (zhihu.com)
ELECTRA
论文名称:《ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generator》
论文:https://arxiv.org/abs/2003.10555
代码:https://github.com/google-research/electra
T5
DeBERTa
DeBERTa对于注意力机制,使用了解耦注意力机制的方法, 注意力机制分数矩阵中删除了位置到位置项的分数
文章的其他部分以及模型的具体实现尚未了解
DEBERTA(Decoding-enhanced BERT with disentangled attention) 论文笔记
DEBERTA:解耦注意力的解码增强型BERT - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/348704980
ERNIE
ERNIE 1.0
论文名称:《ERNIE: Enhanced Representation through Knowledge Integration》
论文:https://arxiv.org/pdf/1904.09223.pdf
代码:https://github.com/PaddlePaddle/ERNIE/tree/develop/ERNIE
原生BERT采用随机【mask】会让模型不能充分学习到语义信息,降低学习难度。
ERNIE1.0的核心思想:知识融合
知识结合 Knowledge Integration:
- Basic-level:与BERT相同,mask掉一个单词
- Entity-level:把实体作为一个整体【mask】
- Phrase-level:把短语作为一个整体【mask】
对话语言模型 Dialogue Language Model(DLM):
ERNIE 1.0 通过引入多轮问答数据, 使ERNIE学习到对话中的隐含关系,增加模型的语义表达能力。
ERNIE 2.0
论文名称:《ERNIE 2.0: A Continual Pre-Training Framework for Language Understanding》
论文:ERNIE 2.0: A Continual Pre-Training Framework for Language Understanding| Proceedings of the AAAI Conference on Artificial Intelligence
代码:https://github.com/PaddlePaddle/ERNIE
除语言共现信息外,语料中包含词法、语法、语义等更多有价值的信息
- 人名、地名、机构名等词语概念知识
- 句子间顺序和距离关系等结构知识
- 文本语义相似度和语言逻辑关系等语义知识
ERNIE2.0 提出连续学习(Continual Learning)的概念,连续学习的目的是在一个模型中训练多个不同的任务以便在学习下个任务中可以记住前一个学习任务学习到的结果。通过连续学习,可以不断积累新的知识。
- 策略一:Multi-task Learning, 让模型同时学习三个任务,具体让三个任务的损失函数权重相加,然后一起反向传播更新参数;
- 策略二:Continual Learning, 先训练任务1, 再训练任务2, 再训练任务3, 这种策略的缺点是容易遗忘前面任务的训练结果,最后训练出的模型容易对最后一个任务过拟合;
- 策略三:Sequential Multi-task Learning,连续多任务学习,第一轮训练任务1, 第二轮训练任务1, 2, 第三轮训练任务1, 2, 3,直至模型收敛完成。
无监督训练任务
任务一:词法级别预训练任务
- Knowledge Masking Task:同ERNIE1.0, 把字、短语、实体【mask】掉
- Capitalization Prediction Task:预测单词大写还是小写
- Token-Document Relation Prediction Task:预测段落A中出现的token,是否在文档的段落B中出现
任务二:语言结构级别预训练任务
- Sentence Reordering Task:把文档中的句子打乱,预测正确顺序
- Sentence Distance Task:分类句子间的距离(0:相连的句子,1:同一文档中不相连的句子,2:两篇文档间的句子)。
任务三:语句级别预训练任务
- Discourse Relation Task:计算两句间的语义和修辞关系;
- IR Relevance Task:短文本信息检索关系,搜索数据(0:搜索并点击,1:搜素并展现,2:无关)。
ERNIE3.0
整体架构:
- 预训练更多的文字
- 从知识图谱中学习世界知识
- 同时兼具生成和理解(分类),即NLG和NLU兼顾
Embedding层数据包含(文本数据、知识图谱) => 经过transformer-XL模块进行上下文学习训练 => 具体任务表示层分为生成任务和分类任务
GPT模型
论文:
GPT:https://paperswithcode.com/method/gpt
GPT2:https://paperswithcode.com/method/gpt-2
GPT3:https://paperswithcode.com/method/gpt-3
参考:
词向量之GPT-1,GPT-2和GPT-3 - 知乎 (zhihu.com)
GPT,GPT-2,GPT-3 论文精读【论文精读】_哔哩哔哩_bilibili
GPT-3提出了prompt的方法,使用“提示”进行零样本学习和小样本学习。