预训练语言模型
预训练语言模型是采用迁移学习的方法(归纳迁移学习)通过自监督学习从大规模数据中获得与具体任务无关的预训练模型,然后用训练好的预训练模型提高下游任务性能的一种数据增强法
优势:
- 预训练模型 + 微调机制具备很好的可扩展性,在支持一个新任务时,只需要利用该任务的标注数据进行微调即可
- 预训练 + 提示范式可以通过利用合适的prompt实现不对预训练语言模型改动太多,尽量在原始LM上解决任务的问题
预训练-精调范式
基本思想:自然语言处理任务往往用有监督方法学习,但标注数据有限,预训练方法可以通过自监督学习从大规模数据中获得与具体任务无关的预训练模型,然后用训练好的预训练模型提高下游任务的性能。
训练过程
- Pre-training阶段:利用大型预料库完成预训练模型非监督学习
- Fine-tuning阶段:针对特定任务在相应数据集中进行监督学习,通过Fine-tuning技术来适配具体任务
Bert
适合分类问题
预训练语言模型分类
按语言模型分类
- 自回归
- 自编码:Bert
- 广义自回归:xlnet
注:词向量也是一种预训练语言模型
TagLM
预训练 + 微调架构
- 用大量未标注的原始语料训练双向语言模型得到 h k L M h_k^{LM} hkLM向量
- 将
h
k
L
M
h_k^{LM}
hkLM加入目标任务模型,用标注的任务数据训练任务模型
ELMo
动机:学习深层的上下文词表示,并以此来更好的增强各类NLP任务
-
E L M o k t a s k ELMo_k^{task} ELMoktask向量:
向任务中加入一个训练好的向量 E L M o k t a s k ELMo_k^{task} ELMoktask
-
下游任务中加入 E L M o k t a s k ELMo_k^{task} ELMoktask:
固定ELMo中BiLM网络中的参数,然后将 E L M o k t a s k ELMo_k^{task} ELMoktask 与下游任务的 X k X_k Xk或 h k h_k hk连接,形成增强的表示[ X k X_k Xk; E L M o k t a s k ELMo_k^{task} ELMoktask] 或 [ h k h_k hk; E L M o k t a s k ELMo_k^{task} ELMoktask],并将其用在下游任务中 -
模型训练
- Pre-training阶段,用大规模无标注数据预处理双向语言模型,然后将BiLM网络参数固定得到 E L M o k ELMo_k ELMok
- Fine-tuning,将
E
L
M
o
k
t
a
s
k
ELMo_k^{task}
ELMoktask加入下游任务,用任务标注数据微调任务模型参数及
E
L
M
o
k
t
a
s
k
ELMo_k^{task}
ELMoktask中的
S
j
t
a
s
k
S_j^{task}
Sjtask 和
γ
j
t
a
s
k
\gamma_j^{task}
γjtask
注:以上两种方法本质上是采用拼凑的方式学习,主要适用于解决CV任务
ULM-FiT
动机:提出一种可以让不同的NLP任务之间可以采用类似CV微调技术的通用归纳迁移学习方法
主要贡献是训练方法
加入一个训练好的模块
- 用通用预料训练预训练模型
- 用任务预料在LM进行微调———训练时每层的梯度逐渐变小
该过程仅需要对权值进行微调而不需要彻底训练网络,其目的是使模型不要忘记之前习得的特征,主要有两种方法:- 学习率分层微调技术
- 倾斜三角形学习率
- 目标任务微调
gradual unfreezing fine-tuning:最后一层会包括最通用的特征,在训练时先训练最后一层(冻住其他层),然后在第二个EPOCH的时候,在解冻倒数第二层,并训练所有结冻层,以此类推,直至模型收敛,这样可以避免对先验知识的遗忘。
GPT
GPT采用transformer Decoder部分,并且每个子层只有一个Masked Multi Self-Attention和一个Feed Forward,模型共叠加使用了12层Decoder
GPT输出为一个句子的表示,
GPT模型训练:
- Pre-training:主要利用大型语料库完成非监督学习
特点:用语言模型方法,自回归 - Fine-tuning:对于输入为一个序列的任务(如文本分
类等 ),GPT可方便的与任务对接,采用前述方式来 Fine-tuning 模型;但对于输入为二个以上序列的任务(如匹配,问答等)无法直接应用,需将任务的形式进行改变转换成预训练模型可以处理的有序序列。
微调有两种方式:
(1)只调任务参数;
(2)任务参数和预训练模型一起调
Transformer结构可以比LSTM学到更丰富的语言知识,预训练语言模型在任务中起到了重要作用
Bert
Transformer比LSTM能学到更丰富的语言结构知识,本文用Transformer的Encoder联合上下文语境训练双向语言模型(相比ELMO),并在输出端附加一个简单的输出层
transformer 编码端
学习两个句子之间的前后顺序关系
- 两个主要任务:
- Masked LM完形填空任务
- Next Sentence Prediction下个句子预测任务
预训练:通用领域知识结构知识学习,句子之间的顺序关系
- 存在问题:由于BERT用深层双向预测语言模型,在预测中存在自己看见自己的问题(要预测的下一个词在给定的序列中已经出现)达不到预期效果
- 解决方法:采用MLM——Masked Language Mode
目标任务微调-有监督:分类、匹配、序列标注、生成(选择式生成)
BERT的主要贡献:
- 预训练的有效性
- 网络深度:BERT预训练网络基于Transformer的Encoder,可以做的很深
- 双向语言模型:在BERT之前,ELMo和GPT的主要局限在于标准语言模型是单向的,GPT使用Transformer的Decoder结构,只考虑了上文的信息,ELMo从左往右的语言模型和从右往左的语言模型其实是独立开来训练的,共享embedding,将两个方向的LSTM拼接并不能真正表示上下文,其本质仍是单向的,且多层LSTM难训练
- 预训练模型包含多种知识:BERT不但包含上下文知识,还包含句子顺序关系知识
RoBERTa
- 改进了优化函数
- 改用动态掩码方式训练,改用更大的batch size
- 采用了更大的数据集,使用了BPE处理文本数据
BART——使用标准的Transformer结构
BERT和GPT都是单独堆叠Transformer的Encoder和Decoder(BERT只是用Encoder,GPT只使用Decoder)这种单纯的使用某一部分,就会造成两个鸿沟:
BERT:具备双向语言理解能力的却不具备做生成任务的能力
GPT:拥有自回归特性的却不能更好的从双向理解语言
解决方法:使用标准的Transformer结构为基础,吸纳BERT和GPT的优点,使用多种噪声破坏原文本,再将残缺文本通过序列到序列的任务重新复原(降噪自监督)
BART与BERT区别:
BART是自回归类的模型,更有利于解决生成任务
- BERT用的是Transformer的Encoder,BART用的是标准的Decoder
- BERT在预测时加入了额外的FFN,而BART没有使用FFN
T5
给整个NLP预训练模型领域提供了一个通用框架,把所有NLP任务都转化成一种形式(text-to-text),通过这样的方式可以用同样的模型,同样的损失函数,同样的训练过程,同样的解码过程来完成所有的NLP任务
用transformer的编码解码端,把所有的任务转化为生成任务
- T5模型采用Transformer的encoder-decoder结构
Prompt
- prompt挖掘工程
特点:不通过目标工程使预训练的语言模型(LM)适应下游任务,而是将下游任务建模的方式重新定义,通过利用合适的prompt实现不对预训练语言模型改动太多,尽量在原始LM上解决任务的问题
基于MLM模型的局限性:MLM所使用的独立性假设限制了它对更长文本的预测能力(空位处文字不能太长),无法预测不定长的答案也约束了它的场景(所以当前只能用于做选择题,不能做生成)
-
输入端(提示工程)
对于输入的文本x,进行两步操作形成prompt输入:- 使用一个模板,模板通常为一段自然语言,并且包含有两个空位置:用于填入x的槽[x]和用于生成答案文本[z]的槽
- 把输入x填到[x]的位置
-
输出端(答案工程)
Answer工程的目的是搜索一个answer空间Z和一个到原始输出Y的映射,从而得到一个有效的预测模型,需要考虑两个维度:确定answer形式和选择answer设计方法 -
训练设置:在很多情况下,无需对下游任务的语言模型进行任何显示训练即可使用prompting方法,又称零样本设置
-
参数更新:预训练模型+prompt参数
- 直接训练不用prompt:优点是简单,缺点是小数据* 集容易过拟合。
- 直接基于prompt生成答案:优点是零样本,缺点是需要较强的prompt设计。
- 固定预训练参数,调整prompt参数:优点是适合小样本学习,缺点是不适合零样本学习。
- 调整预训练参数,固定prompt参数:这种方法暂时不多
- 调整预训练参数,调整prompt参数:优点是大数据集上效果好,缺点是小数据集容易过拟合。
-
利用完形填空题进行少样本文本分类和自然语言处理
- PET:将分类任务重构成填空形式;利用预训练模型和少量样本对无标签数据进行软标注;用软标注的数据训练分类模型,达到良好的效果
- PET:将分类任务重构成填空形式;利用预训练模型和少量样本对无标签数据进行软标注;用软标注的数据训练分类模型,达到良好的效果
-
NLP四个范式:
- 第一范式:特征工程+算法
提取出自然语言语料库中的一些特征,利用特定的规则或数学、统计学的模型对特征进行匹配和利用,进而完成特定的NLP任务 - 第二范式:基于神经网络的监督学习
指的是神经网络引进之后,预训练模型出现之前NLP领域的研究方法,这类方法不用手动设置特征和规则,节省了大量的人力资源,但仍然需要人工设计合适的神经网络架构来对数据集进行训练 - 第三范式:预训练+精调范式(目标工程)
指先在大的无监督数据集上进行预训练,学习到一些通用的语法和语义特征,然后利用预训练好的模型在下游任务的特定数据集上进行fine-tuning,使模型更适应下游任务,
特点:不需要大量的有监督下游任务数据,模型主要在大型无监督数据上训练,只需要少量下游任务来微调少量网络层即可。 - 第四范式:预训练+提示+预测范式(Prompt工程)
指将下游任务的建模方式重新定义,通过合适的prompt来实现直接在预训练模型上解决下任务
第四范式研究领域主要有三个问题:- 针对输入端:如何构造prompt,更好的对下游任务建模,使其能够激发预训练模型的潜能
* - 针对输出端:如何将原标签映射为prompt对应的新标签
- 针对模型:如何对预训练模型进行精调
- 针对输入端:如何构造prompt,更好的对下游任务建模,使其能够激发预训练模型的潜能
- 第一范式:特征工程+算法
域主要有三个问题:
* 针对输入端:如何构造prompt,更好的对下游任务建模,使其能够激发预训练模型的潜能
* 针对输出端:如何将原标签映射为prompt对应的新标签
* 针对模型:如何对预训练模型进行精调