一、什么是NLP四范式:
学术界一般将NLP任务的发展分为四个阶段,即NLP四范式:
- 第一范式:基于传统机器学习模型,如TF-IDF特征+朴素贝叶斯。
- 第二范式:基于深度学习的模型,如word2vec特征+LSTM。
- 第三范式:预训练模型+fine-tuning的范式,如Bert+fine-tuning。
- 第四范式:预训练模型+Prompt+预测的范式,如Bert+Prompt。
整个发展历程是朝着精度更高、少监督,甚至无监督的方向发展的。
二、Fine-Tuning
Fine-Tuning是用于将预训练的语言模型适应于特定任务的领域。Fine-Tuning的基本思想是采用已经在大量文本上进行训练的预训练语言模型,然后在小模型的任务特定文本上继续训练它。
弱点:
- 1)下游任务的目标和预训练的目标差距过大,可能导致过拟合
- 2)微调过程中需要依赖大量的监督语料等等。
解决方法:
Prompt-Tuning通过添加模板的方法
三、Prompt-Tuning的入门路线:
Fine-Tuning是让预训练的模型迁就下游任务。
Prompt-Tuning是让下游任务迁就预训练模型,其目的是将Fine-tuning的下游任务目标转换为Pre-training的任务。
Prompt-tuning执行步骤:
1)构建模板(Template)。
2)标签词映射(Verbalizer)。
3)训练。
什么是Prompt-Tuning?
通过添加模版的方法来避免引入额外的参数,从而让模型可以在小样本(few-shot)或者零样本(Zero-Shot)场景下达到理想的效果。
四、Prompt-Tuning的方法
1) GPT-3
2) PET模型
主要组件LPattern(模版)与Verbalizer(标签词映射)
3)P-tuning V1的核心思想:
P-tuning固定LLM参数,利用多层感知机(MLP)和LSTM对Prompt进行编码,编码之后与其他向量进行拼接之后正常输入LLM
五、Prompt-Tuning方法进阶
1)超大规模参数模型Prompt-Tuning方法
1.上下文学习In-Context Learning:直接挑选少量的训练样本作为该任务的提示。
zero-shot learning:给定任务的描述,然后提供测试数据对齐进行预测,直接让训练好的模型去进行任务测试。
one-shot learning给定任务的描述,在进行新数据预测前,插入一个样本做指导,相当于给一个例子让模型理解,然后再提供测试数据对其进行预测。
few-shot learning:给定任务的描述,在进行新数据预测前,插入N个样本做指导,相当于给N个例子让模型理解,然后再提供测试数据对其进行预测。
2.指令学习 Instruction-Tuning:构建任务指令集,促使模型根据任务指令做出反馈。
3.思维链 Chain of Thought:给予或激发模型具有推理和解释的信息,通过线性链式的模式指导模型生成合理的结果。
2)指令学习方法的应用:指令学习是通过更明显的指令和指示,让模型去理解并做出正确的action。
1、Instruction-Tuning:做判别比做生成更容易。和Prompt-Tuning的核心一样,就是去发掘语言模型本身具备的知识
3)思维链方法的实现
思维链(CoT)是一种改进的提示策略,用于提高LLM在复杂推理任务中的性能,如算术推理、常识推理和符号推理。
Chain of Thought分为Few shot CoT和Zero shot CoT。
Few shot CoT:ICL的一种特殊情况,它通过融合CoT推理步骤,将每个演示<input,output>扩充为<input,CoT,output>
Zero shot CoT:直接生成推理步骤,然后使用生成的CoT来导出答案。
4)PEFT(Parameter Efficient Fine Tuning)大模型参数搞笑微调方法原理
PEFT方法仅微调少量或额外的模型参数,固定大部分预训练参数,大大降低了计算和存储成本,同时最先进的PEFT技术也能实现了与全量微调(Full Fine-Tuning)相当的性能。
PEFT方法分类:
1、Prefix/Prompt-Tuning:在模型的输入或隐层添加k个额外可训练的前缀伪token,只训练这些前缀参数。
2、Adapter-Tuning:将较小的神经网络层或模块插入预训练模型的每一层,这些新插入的神经模块称为adapter(适配器),下游任务微调时也只训练这些适配器参数。
3、LoRA(Low-Rank Adaptation):通过学习小参数的低秩矩阵来近似模型权重矩阵w的参数更新,训练时只优化低秩矩阵参数。
LoRA原理:冻结预训练模型的权重,并在每个Transformer块中注入可训练层(称为秩分解矩阵),即在模型的Liner层的旁边增加一个"旁支"A和B,其中,A将数据从d维降到r维,这个r是LoRA的秩,是一个重要的超参数;B将数据从r维升到d维,B部分的参数初始为0。模型训练结束后,需要将A+B部分的参数与原大模型的参数合并在一起使用。