LLM:提示学习Prompt Learning

本文详述了Prompt-Tuning技术的发展,从GPT-3的In-ContextLearning到指令微调Instruction-Tuning,探讨了如何利用大模型的知识进行Few-shot或Zero-shot学习。Prompt-Tuning通过模板和指令激发模型的补全和理解能力,减少了Fine-tuning的过拟合问题,而Instruction-Tuning则强调模型对指令的理解和执行。此外,文章还介绍了包括Chain-of-Thought在内的相关技术,以及如何通过这些技术改进模型的推理和理解能力。
摘要由CSDN通过智能技术生成

背景

Prompt-Tuning技术发展历程

面向预训练语言模型的Prompt-Tuning技术发展历程

在这里插入图片描述

Prompt-Tuning自从GPT-3被提出以来,从传统的离散、连续的Prompt的构建、走向面向超大规模模型的In-Context Learning、Instruction-tuning和Chain-of-Thought。

其中:

提示学习Prompt-learning(和提示微调Prompt-Tuning​​​​​​​一个意思吧?):狭义的Prompt-learning激发语言模型的补全能力,例如根据上半句生成下半句,或是完形填空等,主要是指In-Context Learning?。    广义的Prompt-learning应该指的是早期的以及In-Context Learning、Instruction-tuning和Chain-of-Thought都算。

上下文学习In-context Learning:无须修改模型即可实现few-shot/zero-shot learning,是Prompt的前身(即可认为是prompt learning的一种)。其通过从训练集中挑选一些样本作为任务的提示(Natural Language Prompt)来实现免参数更新的模型预测。或者说是给出范例,让机器回答其它问题:以 GPT3 为代表,将检索后的每个文档(标题 + 提炼后的语句)作为一个样本输入到 GPT3 里,最后写 “标题:xxx \n 内容:_”,让模型去补全。

指令微调Instruction-tuning(和指示学习Instruction-learning一个意思吧?):让模型对题目 / 描述式的指令进行学习。针对每个任务,单独生成指示,通过在若干个 full-shot 任务上进行微调,然后在具体的任务上进行评估泛化能力,其中预训练模型参数是可更新的。或者说给出题目的叙述,让机器进行回答:以 ChatGPT 为代表,将检索后的信息输入给 ChatGPT 并后面补上一句 “请根据以上内容,回答问题 xxx”。

        假设是一个Question Generation任务,那么可以为这个任务定义一些指令,例如:

Title:任务的名称;
Definition:任务的定义,说明这个任务的本质和目的;
Things to avoid:说明这个任务的注意事项,例如需要避免什么等等;
Positive / Negative Examples:给出正确和错误的例子,作为提示;
Prompt:当前任务的提示信息;
  当许多任务都按照这种模式定义好模板,让模型在指令化后的数据上进行微调,模型将可以学会如何看到指令做预测。

[指示学习Instruction Learning和Prompt Learning,In-content Learning区别]

提示学习,指示学习的区别

        指示学习和提示学习的目的都是去挖掘语言模型本身具备的知识。

        不同的是Prompt是激发语言模型的补全能力,例如根据上半句生成下半句,或是完形填空等。Instruct是激发语言模型的理解能力,它通过给出更明显的指令,让模型去做出正确的行动。

提示学习:老师讲解的通俗易懂,学生很喜欢,这门课太____了。
指示学习:这句话的情感是非常正向的:老师讲解的通俗易懂,学生很喜欢。选项:A = 好;B = 一般;C = 差。

Instruction Learning 则必须对模型精调,让模型知道这种指令模式;指示学习经过多任务的微调后,也能够在其他任务上做zero-shot!

Prompt 在没精调的模型上也能有一定效果;提示学习都是针对一个任务的,泛化能力不如指示学习,比如做个情感分析任务的 prompt tuning,精调完的模型只能用于情感分析任务。

Prompt-Tuning和Instruction-Tuning都利用了语言模型中的知识来提高其性能,但它们的目标略有不同[8]。Prompt-Tuning旨在激发语言模型的补全能力,而Instruction-Tuning旨在激发语言模型的理解能力。Instruct-Tuning的主要优势之一是其在多任务学习方面的效果。通过在多个任务上精调模型,我们可以让模型学习到更通用的知识和技能,从而在面对新任务时具有更好的迁移能力。此外,与Prompt Tuning相比,Instruct-Tuning更加通用,因为它不仅仅限于某个任务的特定模板,而是可以在任何需要理解指令的任务中使用。但是Instruct-tuning 对模型的容量有要求,在大模型上表现出色,而在小模型上表现不佳。

中英术语对照表

英文中文释义
Emergent Ability突现能力小模型没有,只在模型大到一定程度才会出现的能力
Prompt提示词把 prompt 输入给大模型,大模型给出 completion
In-Context Learning上下文学习在 prompt 里面写几个例子,模型就可以照着这些例子做生成
Instruction Tuning指令微调用 instruction 来 fine-tune 大模型
Code Tuning在代码上微调用代码来 fine-tune 大模型
Reinforcement Learning with Human Feedback (RLHF)基于人类反馈的强化学习让人给模型生成的结果打分,用人打的分来调整模型
Chain-of-Thought思维链在写 prompt 的时候,不仅给出结果,还要一步一步地写结果是怎么推出来的
Scaling Laws缩放法则模型的效果的线性增长要求模型的大小指数增长
Alignment与人类对齐让机器生成符合人类期望的,符合人类价值观的句子

现代 NLP 第四范式

Prompting 方法是现在NLP的第四范式。其中现在NLP的发展史包含

  1. Feature Engineering:即使用文本特征,例如词性,长度等,在使用机器学习的方法进行模型训练。(无预训练语言模型)
  2. Architecture Engineering:在W2V基础上,利用深度模型,加上固定的embedding。(有固定预训练embedding,但与下游任务无直接关系)
  3. Objective Engineering:在bert 的基础上,使用动态的embedding,在加上fine-tuning。(有预训练语言模型,但与下游任务有gap)
  4. Prompt Engineering:直接利用与训练语言模型辅以特定的prompt。(有预训练语言模型,但与下游任务无gap)

在四个范式中,预训练语言模型,和下游任务之间的距离,变得越来越近,直到最后Prompt Learning是直接完全利用LM的能力。

Prompt Learning 和 Fine-tuning 的区别

        Pre-training + Fine-tuning 模式:先在Pre-training阶段通过一个模型在大规模无监督语料上预先训练一个预训练语言模型(Pre-trained Language Model,PLM)(e.g. GPT、EMLO、BERT),然后在Fine-tuning阶段基于训练好的语言模型在具体的下游任务上再次进行微调(Fine-tuning),以获得适应下游任务的模型。    缺陷:在大多数的下游任务微调时,下游任务的目标与预训练的目标差距过大导致提升效果不明显,微调过程中依赖大量的监督语料等。一般任务在Fine-tuning阶段几乎都涉及在模型头部引入新参数的情况,且都存在小样本场景过拟合的问题。

        Prompt-Tuning微调范式——Prompt-Tuning,其旨在通过添加模板的方法来避免引入额外的参数,从而让语言模型可以在小样本(Few-shot)或零样本(Zero-shot)场景下达到理想的效果。如GPT-3、PET。

Prompt的目的是将Fine-tuning的下游任务目标转换为Pre-training的任务

Prompt-Tuning旨在解决传统Fine-tuning的两个痛点:
        降低语义差异(Bridge the gap between Pre-training and Fine-tuning):预训练任务主要以Masked Language Modeling(MLM)为主,而下游任务则重新引入新的训练参数,因此两个阶段的目标通常有较大差异。因此需要解决如何缩小Pre-training和Fine-tuning两个阶段目标差距过大的问题;
        避免过拟合(Overfitting of the head):由于再Fine-tuning阶段需要新引入额外的参数以适配相应的任务需要,因此在样本数量有限的情况容易发生过拟合,降低了模型的泛化能力。因此需要面对预训练语言模型的过拟合问题。

Prompt Learning 和 Fine-tuning 的范式区别

  • Fine-tuning 是使得预训练语言模型适配下游任务
  • Prompting 是将下游任务进行任务重定义,使得其利用预训练语言模型的能力,即适配语言模型

早期Prompt-Tuning

早期Prompt-tuning的工作原理

        以二分类的情感分析作为例子,给定一个句子[CLS] I like the Disney films very much. [SEP] 传统的Fine-tuning方法是将其通过BERT的Transformer获得 [CLS]表征之后再喂入新增加的MLP分类器进行二分类,预测该句子是积极的(positive)还是消极的(negative),因此需要一定量的训练数据来训练。
        Prompt-Tuning则执行如下步骤:

构建模板(Template Construction):通过人工定义、自动搜索、文本生成等方法,生成与给定句子相关的一个含有[MASK]标记的模板。例如It was [MASK].,并拼接到原始的文本中,获得Prompt-Tuning的输入:[CLS] I like the Disney films very much. [SEP] It was [MASK]. [SEP]。将其喂入BERT模型中,并复用预训练好的MLM分类器(在huggingface中为BertForMaskedLM),即可直接得到[MASK]预测的各个token的概率分布;

标签词映射(Label Word Verbalizer):因为[MASK]部分我们只对部分词感兴趣,因此需要建立一个映射关系。例如如果[MASK]预测的词是“great”,则认为是positive类,如果是“terrible”,则认为是negative类。

训练:根据Verbalizer,则可以获得指定label word的预测概率分布,并采用交叉信息熵进行训练。此时因为只对预训练好的MLM head进行微调,所以避免了过拟合问题

        因此如何最大化的寻找当前任务更加合适的template和label word是Prompt-tuning非常重要的挑战。

Prompt-Tuning—GPT-3

 Prompt-Tuning起源于GPT-3的提出《Language Models are Few-Shot Learners》(NIPS2020),其认为超大规模的模型只要配合好合适的模板就可以极大化地发挥其推理和理解能力。

In-context Learning:即无须修改模型即可实现few-shot/zero-shot learning,是Prompt的前身。其通过从训练集中挑选一些样本作为任务的提示(Natural Language Prompt)来实现免参数更新的模型预测;


Demonstration Learning:即让模型知道与标签相似的语义描述,提升推理能力。添加一些新的文本作为提示。例如在对“I like the Disney film. It was [MASK]”进行情感分析时,可以拼接一些相似场景的ground-truth文本“I like the book, it was great.”、“The music is boring. It is terrible for me.”等。此时模型在根据新添加的两个样例句子就可以“照葫芦画瓢”式地预测结果了。

ICT工作原理:下图给了ICT的工作原理,挑选了 K = 3 个训练样本作为Demonstration(黄色部分),指令模板则是换行符“\n”,旨在区分样本的句子和标签。在预测时,不断地更换测试样本(绿色部分),并在末尾留出空间让模型生成。

示例:
In-context Learning:将语料中比如含差、无聊等负面词作为label,相应的片段作为prompt,进行预测。
Demonstration Learning:人工加一些相似表达。

小规模的语言模型(BERT)上的prompt——PET模型

PET(Pattern-Exploiting Training)出自《Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference》(EACL2021),Prompt-Tuning启发于文本分类任务,并且试图将所有的分类任务转换为与MLM一致的完形填空。PET详细地设计了Prompt-Tuning的重要组件——Pattern-Verbalizer-Pair(PVP),并描述了Prompt-tuning如何实现Few-shot/Zero-shot Learning,如何应用在全监督和半监督场景(iPET)。

PET设计了两个重要组件:
Pattern(Template):记作 T ,即上文提到的Template,其为额外添加的带有[mask]标记的短文本,通常一个样本只有一个Pattern(因为我们希望只有1个让模型预测的[mask]标记)。
Verbalizer:记作 V ,即标签词的映射,对于具体的分类任务,需要选择指定的标签词(label word)。例如情感分析中,我们期望Verbalizer可能是 V ( positive ) = great,V ( negative ) = terrible(positive和negative是类标签)。同样,不同的任务有其相应的label word,但需要注意的是,Verbalizer的构建需要取决于对应的Pattern。
上述两个组件被称为Pattern-Verbalizer-Pair(PVP),一般记作 P = ( T , V )。不同的任务、不同的样本可能会有其更加合适的pattern,因此如何构建合适的pattern是Prompt-Tuning的研究点之一。构建Verbalizer是另一个研究挑战。

训练目标:可以形式化描述

Prompt-Tuning的集成

为一个句子设计多个不同的PVP。
Patterns Ensembling:同一个句子设计多个不同的pattern,例如It was [mask].,I think it is [mask].,This comment denotes as [mask]. 等,此时,原先只有一个句子,却可以生成多个不同的样本,也变相起到数据增强的作用。在训练时,可以当作单独的样本进行训练,推理时,则可以对所有Pattern的结果进行投票或加权。

在这里插入图片描述

Verbalizers Ensembling:同样,在给定的某个Pattern下,并非只有1个词可以作为label word。例如positive类,则可以选择“great”、“nice”、“wonderful”。当模型预测出这三个词时,均可以判定为positive类。在训练和推理时,可以对所有label word的预测概率进行加权或投票处理,并最后获得概率最大的类。

在这里插入图片描述

PVPs Ensembling(Prompt Ensembling):Pattern和Verbalizer均进行集成,此时同一个句子有多个Pattern,每个Pattern又对应多个label word。在训练时可以采用加权,在推理时可以采用加权或投票法:

在这里插入图片描述

半监督的学习方法——iterative PET(iPET)。 先从预训练模型开始,初始化多个不同的模型(图中1步骤),在有标注的少量样本上进行Prompt-Tuning,然后通过多个不同的PVP训练得到多个不同的模型(图中a步骤),每个模型在无标注数据上进行推理打标,并根据置信度筛选(图中b步骤),根据新标注的数据与原始标注数据融合后,再重新进行Prompt-Tuning(图中c步骤),重复abc三个步骤多次后,获得每个模型后,在测试时进行集成投票(图中2、3步骤)。

Pattern和Verbalizer的设计和选择

        根据特定任务的性质和先验知识人工设计模板。但是在同样的数据集和训练条件下,选择不同的Pattern和Verbalizer会产生差异很大的结果。有时候,即便是人类理解的相似的模板,也会对模型预测结果产生很大差异。在相同Pattern时,选择不同的label word对结果影响很大,同理,不同的Pattern对结果影响也很明显,并不能充分发挥Prompt简单快捷的优势。 

 缺陷:成本高;不能保证获得最优解,训练不稳定,不同的PVP对结果产生的差异明显,方差大;在预训练阶段MLM任务并非完全按照PVP的模式进行训练的(比如MLM训练通常都是长文本,mask的数量也并非只有1个,预测的概率分布也并非是有限的),与MLM在语义和分布上依然存在差异。

如何挑选合适的Pattern?

        离散的模板构建法(人工构建;启发式法;生成),其旨在直接与原始文本拼接显式离散的字符,且在训练中始终保持不变(这些离散字符的词向量在训练过程中保持固定)。通常情况下,离散法不需要引入任何参数。
        连续的模板构建法(连续提示;如词向量微调和伪标记),其旨在让模型在训练过程中根据具体的上下文语义和任务目标对模板参数进行连续可调。这套方案的动机则是认为离散不变的模板无法参与模型的训练环节,容易陷入局部最优,而如果将模板变为可训练的参数,那么不同的样本都可以在连续的向量空间中寻找合适的伪标记,同时也增加模型的泛化能力。因此,连续法需要引入少量的参数并让模型在训练时进行参数更新。

人工构建(Manual Template)

如前文

启发式法(Heuristic-based Template)

一般是采用规则、正则化模板的方法自动构建出相应的Pattern,或者直接通过启发式搜索的方法获得Pattern。

如清华大学刘知远团队提出的PTR(PTR: Prompt Tuning with Rules for Text Classification)利用启发式的规则定义若干子模板(sub-prompt),并通过若干子模板的组合来形成最终的Pattern。根据不同的实体而相应改变模板的字符序列。

AutoPrompt则是另一种典型的方法,其由加州大学提出《AutoPrompt: Eliciting Knowledge from Language Models with Automatically Generated Prompts(EMNLP2021),给定原始的输入,额外定义若干离散的字符作为trigger,并组成Template,喂入MLM中预测对应label word的概率。而这些trigger最终通过梯度搜索的方法进行挑选。
生成(Generation)

直接让模型来生成合适的模板:根据给定的任务训练数据(通常是小样本场景),生成出合适的模板。

陈丹琦团队提出LM-BFF则作为该类方法的典范,其出自于《Making Pre-trained Language Models Better Few-shot Learners》(ACL2021)。LM-BFF首先定义一个Template的母版(有点类似于PTR中的含有占位符的子模板),将这些母版与原始文本拼接后喂入T5模型(T5模型属于自回归式的生成模型)后在<X>和<Y>占位符部分生成相应的字符,最终形成对应的Template。然后再基于生成的Template和label word进行训练。

前面提到的模板都是可读的离散的token(或Hard Prompt),很难寻找到最佳的模板。

连续提示——Continuous/Soft Prompt

词向量微调(Word Embedding):显式地定义离散字符的模板,但在训练时这些模板字符的词向量参与梯度下降,初始定义的离散字符用于作为向量的初始化;伪标记(Pseudo Token):不显式地定义离散的模板,而是将模板作为可训练的参数。

将模板转换为可以进行优化的连续向量,换句话说,我们不需要显式地指定这些模板中各个token具体是什么,而只需要在语义空间中表示一个向量即可,这样,不同的任务、数据可以自适应地在语义空间中寻找若干合适的向量,来代表模板中的每一个词,相较于显式的token,这类token称为 伪标记(Pseudo Token)。

假设针对分类任务,给定一个输入句子 x ,连续提示的模板可以定义为:
T = = [x][v_1][v_2]...[v_m][mask]
其中[v_i]是伪标记,其仅代表一个抽象的token,并没有实际的含义,本质上是一个向量。

基于连续提示的Prompt-Tuning的实现方法

Prompt Tuning

《The Power of Scale for Parameter-Efficient Prompt Tuning》率先提出了伪标记和连续提示的概念,以让模型在能动态地对模板在语义空间内进行调整,使得模板是可约的(differentiate)。

        形式化的描述如下:给定 n 个tokens,记作x_1, ..., x_n ,一个预训练模型对应的embedding table,通过这个table,可以将每个token表示为一个embedding。连续模板中的每个伪标记v_i可以视为参数,也可以视为一个token,因此,可以通过一个embedding table获得每个伪标记的向量v_i,然后喂入一个MLP获得新的表征。最后,对于预训练模型的输入则是同时包含 x_i和v_i。

        每个伪标记的初始化可以有下列几种情况:
最简单的是随机初始化:采用正态分布或者均匀分布随机初始化一个面向所有伪标记的embedding table;
每个token使用预训练模型已有的embedding table进行初始化,每一个伪标记先随机指定词表中的一个词,并取对应词的embedding作为这个伪标记的初始化;
在分类任务上,使用label word(verbalizer)对应的embedding作为初始化,可以有效限制模型输出的是预设的输出类对应的word。

        在训练过程中,每个伪标记以及对应的MLP参数都可以得到训练,对于不同的输入句子 x ,这些伪标记对应的embedding也各不相同,达到了预期的目的。

P-tuning

《GPT Understands, Too》在Prompt Tuning方法上主要做出几个改进(图中的 [p_i]等价于上文的[v_i],表示伪标记)。

         考虑到这些伪标记的相互依赖关系:认为 [v_1]与[v_2]是有先后关系的,而transformer无法显式地刻画这层关系,因此引入Prompt Encoder,实际过程中采用一层RNN;
        指定上下文词:如果模板全部是伪标记,在训练时无法很好地控制这些模板朝着与对应句子相似的语义上优化,因此选定部分具有与当前句子语义代表性的一些词作为一些伪标记的初始化(例如上图中“capital”、“Britain”等);
        重参数(Reparameterization):具体到代码实现上,P-tuning先通过一个Prompt Encoder表征这些伪标记后,直接将这些新的表征覆盖到对应的embedding table上,换句话说,Prompt Encoder只在训练时候会使用到,而在推理阶段则不再使用。
        混合提示(Hydride Prompt):将连续提示与离散token进行混合,例如 [x][it][v_1][mask].

PPT(Pre-trained Prompt Tuning)

《PPT: Pre-trained Prompt Tuning for Few-shot Learning》PPT旨在通过先让这些连续提示在大量无标注的预训练语料进行预训练,然后将其加载到对应下游任务的PLM上进行训练,如下图所示(图中的 P 即连续的提示模板,<x> 表示为mask token):

首先在大量无标注语料上进行预训练,获得训练好的连续提示;对下游任务(是非问答、NLI、文本匹配等),加载这些训练好的提示之后,进行微调,或者直接进行zero-shot预测。

几种template优化对比

在这里插入图片描述

如何挑选合适的Verbalizer?

        不同的Verbalizer会对最终预测效果产生较大的影响,不同的任务会有不同的合适的label word。例如在电影评论任务中,positive类别的label word比较合适的是wonderful,而在美食点评任务中,positive比较合适的是testy。

人工设计(Manual Design)

即可以根据对每个任务的经验来人工指定这些label word。

KPT(Knowledgeable Prompt Tuning)

领域知识指导搜索离散的label word:《Knowledgeable Prompt-tuning:Incorporating Knowledge into Prompt Verbalizer for Text Classification》

ProtoVerb

原型网络动态生成label representations:《Prototypical Verbalizer for Prompt-based Few-shot Tuning》。同连续的模板一样,为了让label word也可以自适应的变化,提出连续的label word。ProtoVerb巧妙的运用了原型网络(Prototypical Network)的思路,将每个类别的所有样本的表征的期望作为该类的原型向量,并使用该原型向量代替连续的label word。

        以新闻分类为例,首先定义固定的模板“A [mask] news.”,并拼接到原始的输入句子上。喂入BERT模型中,获得 [mask] 位置的表征向量代表句子向量。在训练过程中的label是已知的,所以可以求得同一label对应所有句子向量的均值来表示这个label的表征(图中的五角星)。在测试阶段,则只需要计算测试句子的表征与各个类别的原型向量的相似度,并取最大相似度对应的label作为预测结果。

参数有效性学习(Parameter-Efficient Learning,PEL)

旨在确保模型效果不受太大影响的条件下尽可能地提高训练的时间和空间效率。
        参数有效性训练:在参数有效性学习过程中,大模型中只需要指定或额外添加少量的可训练参数,而其余的参数全部冻结,这样可以大大提高模型的训练效率的同时,确保指标不会受到太大影响。

Adapter-Tuning

Adapter-Tuning在2019年提出,其面向预训练语言模型的参数有效性学习。为了提高效率,该方法提出固定Transformer的全部参数,然后在Transformer的每一个Block里嵌入一些新初始化的Adapter Network。

图片

   Adapter位于Feed-Forward Layer之后、残差连接之前。Adapter本质上就是两层MLP,分别负责将Transformer的表征降维和升维,只需要添加不到5%的可训练参数,即可以几乎达到全参数训练的效果,在训练过程中大大节省了训练时间,做到时间有效性。不同的任务我们不需要重新对整个预训练模型进行微调,只需要保存Adapter,而预训练模型的其他参数都是原始预训练的,这样就做到了空间的有效性。

Prefix-Tuning

  Prompt-Tuning的本质是参数有效性学习,是因为整个预训练模型参数可以全部固定,只需要对Template对应的少量参数(例如连续模板的Prompt Encoder、伪标记对应的Embedding等){这样伪标记就带上了任务输入内容的关联语义}进行训练。

        Prefix-Tuning受到Prompt-Tuning的启发,则是除了对输入层添加模板外,还对Transformer的每一层添加“模板”。该方法保持预训练语言模型参数固定(frozen),而只需要在task-specific vector(称为prefix)上进行优化。即只需要少量(约0.1%)的优化参数,即可以在量和小量数据上达到不错的效果。Prefix-Tuning是面向文本生成领域。
Prefix-Tuning与传统Fine-tuning的对比:

P-Tuning v2

  P-tuning V2基于P-tuning和Prefix-tuning,拓展提出p-tuning的V2版本模型。p-tuning-v2的主要贡献是在原本的输入前添加自定义长度的layer prompts,在后续针对下游任务的训练中冻结BERT模型的所有参数而只训练这些prompts。左图表示的是基于连续提示的Prompt-Tuning(例如P-tuning),我们可以发现只有输入层对应模板部分的Embedding和MLP参数是可训练的,右图部分表示Prefix-Tuning(P-tuning V2),Transformer的每一层的前缀部分也是可训练的,可以抽象的认为是在每一层添加了连续的模板。 P-tuning V2面向自然语言理解。

        实际上,Prefix-Tuning或者P-tuning V2并不是真正的在每一层添加模板,而是通过HuggingFace框架内置的past_key_value参数控制。其本质上与Adapter类似,是在Transformer内部对Key和Value插入可训练的两个MLP。比如Prefix-Tuning中的prefix是对模型的每一层增加可以调节的参数,具体表现为扩展注意力中的键值对,即模型会把prefix输入的key和value与本身用hidden_states得到的key和value拼接起来。

[P-tuning-v2源码][记录一次对past_key_values用法的理解 - 知乎]

无额外推理延迟的LORA方法

[LLM:参数有效性学习——LoRA模型]

UniPELT框架

《UniPELT: A Unified Framework for Parameter-Efficient Language Model Tuning》对Adapter、Prefix-Tuning、LoRA等参数有效性学习进行了集成,因为这些参数有效性学习方法本质上都是插入少量的新的参数,这些新的参数可以对预训练模型起到提示作用,只不过并不是以人类可读的离散的模板形式体现而已。

[参数有效性学习]

        对于超过10亿参数量的模型来说,Prompt-Tuning所带来的增益远远高于标准的Fine-tuning,小样本甚至是零样本的性能也能够极大地被激发出来,得益于这些模型的参数量足够大,训练过程中使用了足够多的语料,同时设计的预训练任务足够有效。最为经典的大规模语言模型则是2020年提出的GPT-3,其拥有大约1750亿的参数,且发现只需要设计合适的模板或指令即可以实现免参数训练的零样本学习。

In-Context Learning(上下文学习)

        对于[ICL]有实验表明挑选不同的样本对ICL的性能影响不同,而同样的样本不同的排列也会产生很大的差异,最大准确率的差异超过了40%,验证了ICL的性能对样本的选择和排列很敏感,完全随机的样本挑选和排列使得ICL性能不稳定、方差大。

        这样就有了一些改进工作:

KATE《What Makes Good In-Context Examples for GPT-3?》

Fantastically《Fantastically Ordered Prompts and Where to Find Them: Overcoming Few-Shot Prompt Order Sensitivity》

引入自监督(Self-supervised ICL)

《Improving In-Context Few-Shot Learning via Self-Supervised Training》

In-Context Tuning方法

《Meta-learning via Language Model In-context Tuning》

MetaICL方法

《MetaICL: Learning to Learn In Context》

Instruction-tuning(指令微调)

指示学习是谷歌Deepmind的Quoc V.Le团队在2021年的一篇名为《Finetuned Language Models Are Zero-Shot Learners》中提出的思想。

其它论文[Improving zero and few-shot generalization in dialogue through instruction tuning]

指示学习和提示学习的目的都是去挖掘语言模型本身具备的知识。不同的是Prompt是激发语言模型的补全能力,例如根据上半句生成下半句,或是完形填空等。Instruct是激发语言模型的理解能力,它通过给出更明显的指令,让模型去做出正确的行动。

LaMDA模型

谷歌提出的LaMDA模型(Bard大模型则是基于LaMDA微调的模型),其完全采用自回归生成式模型,并在大量的对话语料上进行预训练,得到137B的大模型。为了提高模型的安全性和事实性,LaMDA涉及到两个微调策略,一个是通过人工标注形式标注一些存在安全隐患的数据。

LaMDA采用如下几个指标对生成模型进行评估:Quality, Safety 与 Groundedness。

1 quality打分是Sensibleness, Specificity, Interestingness (SSI) 3个指标的平均值:

  • Sensibleness: measures whether a model’s responses make sense in context and do not contradict anything that was said earlier. 衡量回复是否符合逻辑,且与上下文不冲突。
  • Specificity: measure whether a response is specific to a given context. For example, if a user says "I love Eurovision" and the model responds "Me too," then it would score 0 on specificity, since this response could be used in many different contexts. 符合上下文。衡量回复是否足够具体,与上下文非常契合。举极端的例子,一个对话系统只回复"OK"或"I don't know",据之前的实验结果,Sensibleness 可以有 70%,但对话体验肯定好不了。
  • Interestingness: the response is likely to “catch someone’s attention” or “arouse their curiosity”, or if it is unexpected, witty, or insightful.  有创造力。要求就更高些,衡量回复是否有趣以及能引起用户的注意或兴趣,属于饱暖之上更高的要求。

2 Safety: avoid unintended results that create risks of harm, and to avoid creating or reinforcing unfair bias    是否有风险、不公正

3 Groundedness: the percentage of responses containing claims about the external world that can be supported by authoritative external sources  在知识型问答中,是否包含真实的信息、并引用相关链接。  同时crowdworker还要指明是否知道该回复内容,如果3个不同的标注都知道,则认为这条回复是常识,无须借助检索。此外,crowdworker要根据检索的内容改写模型回复。

微调策略引入互联网搜索机制,提高模型生成结果的事实性:

OpenAI——InstructionGPT

[InstructionGPT]

Chain-of-Thought(思维链)

        思维链(A chain of thought is a series of intermediate natural language reasoning steps that lead to the final output, and we refer to this approach as chain-of-thought prompting.)在2022年初由谷歌团队提出,其旨在进一步提高超大规模模型在一些复杂任务上的推理能力。

思维链是一种特殊的In-Context Learning,对于每个挑选的In-Context Example,除了给出Input-Output Mapping外,还需要给出一个推理过程,称为Relationale或Reasoning Path,其是一个具有逻辑推理过程的短文本。

[Least-to-Most Prompting Enables Complex Reasoning in Large Language Models]尝试将一个复杂的任务分解为若干简单的子任务。在对每个子问题进行预测时,是一个渐近的过程。

在这里插入图片描述
第一个子问题是最简单的;
解决第二个子问题时,会将上一个子问题以及答案附加在当前子问题的前面,而且第二个子问题会比第一个子问题难;
最后一个子问题就是原始的问题,此时其会有前面所有子问题的解答作为提示。
最简单的情况,就是将一个问题分解为两个子问题,前面所有的子问题可以作为后面子问题的in-context demonstration。

from: -柚子皮-

ref: [【NLP】Prompt Learning 超强入门教程 - 知乎

[Prompt-Tuning——深度解读一种新的微调范式]*

[ChatGPT/InstructGPT详解 - 知乎]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值