prompt 综述
发布时间:2023-07-26 20:54:35 作者:字节跳动技术团队 浏览量:820
1.1 基本概念
用一句话概括模板学习,即将原本的输入文本填入一个带有输入和输出槽位的模板,然后利用预训练语言模型预测整个句子,最终可以利用这个完整的句子导出最终需要的答案。
模板学习最吸引人的关键在于其通过已有的预训练模型,定义合适的模板就能完成 few-shot 或者 zero-shot 任务,这样可以使得语言模型可以在预训练阶段利用尽可能多的信息进行训练,后续也能最大效率的发挥其作用。
从数学角度来看模板学习,我们传统的监督学习解决的是 P (y|x; θ) 问题,训练一个模型优化其参数 θ,在面对输入 x 时给出输出 y 的概率;而基于模板学习的方法希望解决的是 P (x; θ) 问题,即给定一个参数为θ的模型,你需要告诉我输入文本 x 出现的概率,然后利用这个概率去预测正确的 y。这样就能够减少甚至是避免需要大量的标注数据。
1.2 典型组成
基于上面的概述可以看出,模板学习可以说由三个部分组成——模板设计、答案搜索和答案映射。
模板的典型特点为必须具备两个槽位,一个用来填入原始输入文本,一个用来填入答案。根据答案槽位位置的不同可以分为两个大类,答案槽位位于整个模板中间时一般被称为完形填空式模板,而答案槽位位于末尾时一般被称为前缀式模板。
答案搜索即计算答案空间中的所有候选答案填入对应槽位时 LM 的最高打分结果,所谓答案空间即根据具体任务构建的候选答案,比如对于生成任务来说答案空间就是全部的 token,而对于某些分类任务答案空间可能是固定范围的词组,如「很好」「不错」「还行」「极差」「垃圾」代表「-1」「0」「1」。当然最终选择哪些答案作为最佳答案的策略不是唯一的,比如可以简单的选择最高分答案,也可以根据 LM 的打分进行随机采样多个答案。
答案映射即根据最优答案得到下游任务要求的标签,如前文提到的「很好」映射为「1」,「极差」映射为「-1」。
这部分对各大预训练语言模型按多个维度进行分类,以便明白在模板学习中如何选择合适语言模型。
2.1 训练目标
预训练语言模型的目标主要是两个:1)文本顺序出现的概率;2)文本降噪。
以文本顺序出现的概率为目标的模型普遍都是以自回归的方式预测一个序列中顺序出现的 token(经常会是自左至右的),这种模型被称为标准 语言模型 (Standard Language Model, SLM) ,比如 GPT。
以文本降噪为优化目标的模型往往是对一个给定文本进行噪音处理,最终去预测原始的去噪文本。利用有噪声的部分数据去重建原始数据的方案被称为损坏文本重建(Corrupted Text Reconstruction, CTR ) ,比如 BERT;不管是否有噪音使用所有输入文本去重建原始数据的方案被称为全文本重建(Full Text Reconstruction, FTR) ,比如 BART。
2.2 加噪方式
常见的加入噪声的方式主要是四种,遮盖、替换、删除和置换。
2.3 编码方向以及典型代表
目前主要使用的编码方向主要有三种:1)从左至右;2)双向。
从左至右的典型应用是 GPT 家族;双向模型的一般都是 MLM(masked language model),典型模型是 BERT;将这两种方向进行结合,即 x 部分使用双向 mask 方式,y 部分使用从左至右方式,这种方式又分为两类模型,一种是前缀语言模型(prefix language model),其 y 部分使用 x 作为前缀条件进行解码,其典型模型是 UniLM;另一种是编解码模型(encoder-decoder),其 y 部分使用 x 独立编码为条件进行解码,其典型模型是 BART。
2.4 具体模型分类
即找到一个 function,能够将输入转化应用到下游任务上,并获得最好的效果。
3.1 形式
最常见的两种形式为完形填空式(cloze prompts)和前缀式(prefix prompts)。
至于选择什么样形式的模板主要是根据使用的 LM 和具体的下游任务,比如对于生成式问题或者自回归式预训练模型,前缀式一般表现较好,而对于完形填空问题和 masked 预训练模型,完形填空式一般表现更好。
全文重建式模型(full text reconstruction)使用这两种形式都可以。
对于一些特殊的多输入任务,比如句子对分类,其选择的模板形式则应该需要容纳多个输入。
如:
Language Models as Knowledge Bases?
Template-Based Named Entity Recognition Using BART
Prefix-Tuning: Optimizing Continuous Prompts for Generation
The Power of Scale for Parameter-Efficient Prompt Tuning
3.2 人工模板工程
人工模板即通过人工的方式来设计模板,目前也有很多设计得相当好的模板。
但其存在的问题也是显然的,1)非常依赖设计者的经验和直觉,相当费时;2)即便是经验丰富的设计者也并不一定就能发现合适的模板。
3.3 自动模板学习
自动模板学习又可以进行细分。从模板形式来看可以分为离散的和连续的,离线模板比如真实的自然文本,连续的比如模板是使用 LM 的嵌入空间。从使用方式来看可以分为静态的和动态的,静态的即对于不同的输入都使用同一种模板,而动态的则是对于不同输入生成不同的模板。
3.3.1 离散模板
模板挖掘(prompt mining)
这种方式是给出输入和输出,自动的挖掘模板。其需要依赖一个较大的文本库,这个文本库需要包含输入和输出,然后去搜索输入和输出之间的中间词或者依赖路径,其中出现最为频繁的中间词或者依赖路径作为模板使用。其表现形式为'[X] 中间词 [Z]'。
如:How Can We Know What Language Models Know?
模板改写(prompt paraphrasing)
这种方式是对种子模板进行改写,种子模板可以是任意方式生成的,比如人工构造的或者挖掘而来,通过改写获得一系列的候选模板,然后选择训练结果最好的模板。改写的方式是多样的,比如多语言的双向翻译、同义词替换,也可以利用神经网络进行改写。
如:
How Can We Know What Language Models Know?
BARTScore: Evaluating Generated Text as Text Generation
BERTese: Learning to Speak to BERT
梯度搜索(gradient-based search)
这种方式是利用单词候选集中的各种组合来构造模板,利用梯度下降的方式不断迭代尝试模板,最终获得最合适的模板。
如:
Universal Adversarial Triggers for Attacking and Analyzing NLP
AutoPrompt: Eliciting Knowledge from Language Models with Automatically Generated Prompts
模板生成(prompt generation)
这种方式将模板的生成视为通常的文本生成任务。比如给 T5 模型来生成模板词。
如:
Making Pre-trained Language Models Better Few-shot Learners
PADA: A Prompt-based Autoregressive Approach for Adaptation to Unseen Domains
模板打分(prompt scoring)
这种方式借助知识图谱的三元组概念(头实体 - 关系 - 尾实体),首先人工构造一系列三元组模板集作为候选,分别填入输入和输出,利用一个单向的 LM 对这些填入的候选模板进行打分,使用打分最高的模板。当然这会使得每个输入都可能有不同的模板。
如:Commonsense Knowledge Mining from Pretrained Models
3.3.2 连续模板
构造模板的意图是使得 LM 能够更好完成下游任务,并非是使得人可以理解,所以这也就说明了模板可以设计得不必满足人可以理解这一限制。由此,利用LM的嵌入空间来设计模板成为一个自然的想法。而使用连续型模板有两大好处,1)取消了模板词仅能选择有限的自然语言 token 的限制;2)移除了模板参数仅能读取自 LM 模型的限制,这意味着模板也能进行训练。
前缀微调(prefix tuning)
这种方式在输入前加入与任务相关的连续前缀向量,这个前缀向量是可训练的,而后续的 LM 参数是固定不变的。其数学表达式如下:
其中,φ 为一个可训练的参数,θ 为 LM 参数 h 为在第 i 步时所有神经网络层的 concat 。
这里提到主要的两种方法,一种是构建一个可训练的矩阵,作为生成前缀 embedding,其运作迭代方式对于每一层的 h,当h处于前缀时直接复制这个矩阵,不处于前缀时由 LM 参数计算;另一种方式是加入几个特殊的前缀 token 来作为模板,训练时直接更新这些前缀 token 的 embedding。
如:
Prefix-Tuning: Optimizing Continuous Prompts for Generation
The Power of Scale for Parameter-Efficient Prompt Tuning
Multimodal Few-Shot Learning with Frozen Language Models
离散模板初始化微调(tuning initialized with discrete prompt)
这种方式利用离散模板作为初始化,然后将其连续化,这种方式往往能够提供更好的起始搜索结果。比如利用离散化的模板将其转化为 embedding,然后这些 token 是可以微调的,有点像前缀微调模式的后一种方式。
如:
Factual Probing Is [MASK]: Learning vs. Learning to Recall
AutoPrompt: Eliciting Knowledge from Language Models with Automatically Generated Prompts
Learning How to Ask: Querying LMs with Mixtures of Soft Prompts
软硬模板混合微调(hard-soft prompt hybrid tuning)
这种方式融合了离散模板和连续模板,其做法在于在静态的模板中插入一些可训练的 embedding。比如之前比较火的 p-tuning 的模板就是由可微调的 trainable token 和不可微调的 anchor token 组成。
如:
GPT Understands, Too
PTR: Prompt Tuning with Rules for Text Classification
答案引擎的目的是找到一种映射,使得模板搜索输出的结果空间映射到真实的下游任务输出空间。
4.1 答案的形式
主流的答案为三种:token span sentence,即词粒度,短语粒度和句子粒度。
一般来说选择何种答案形式都是和具体下游任务相关,比如分类任务、命名实体识别任务一般是词粒度;文本生成任务一般是短语和句子粒度。
4.2 答案空间设计方式
4.2.1 人工设计
潜在的答案空间与映射方式均由人工设计,根据其答案空间的不同可分为受限空间和非受限空间,非受限空间指答案可能是全量 token 集或者固定长度的 span 或者 token 序列,这种情况映射是不必要的;受限空间是指输出的答案是有限固定范围的,比如常见的分类任务、实体识别任务、多选择问答任务等,这种情况下就需要一个合适的映射方式。
4.2.2 离散答案搜索(discrete answer search)
答案改写(answer paraphrasing)
这种方式将原始的答案空间(即输出的所有可能结果),通过改写(比如回译)扩张其覆盖范围上限,然后定义一个功能使得这个答案空间转化为最终答案(比如可以是 softmax)。
如:How Can We Know When Language Models Know? On the Calibration of Language Models for Question Answering
剪枝然后搜索(prune-then-search)
这种方式首先生成一个所有合理答案的剪枝空间,然后通过算法进一步搜索这个剪枝空间直到最终获取合适的答案。比如将大型未标注数据集中频繁出现的长于2个字母的单词作为答案空间,在搜索时,反复迭代计算(如最大似然)当一个词作为答案时与 label 之间的合适性。
如:
Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference
Automatically Identifying Words That Can Serve as Labels for Few-Shot Text Classification
AutoPrompt: Eliciting Knowledge from Language Models with Automatically Generated Prompts
Making Pre-trained Language Models Better Few-shot Learners
大量的研究表明,使用多重模板可以提升模板方法的有效性
5.1 模板融合(prompt ensembling)
模板聚合即使用多个待回答的模板来进行预测,其具有三方面的优势:1)使得各模板可以互补;2)不必找到所谓的最佳模板;3)在下游任务上表现更为稳定。
实际使用时如何由多个模板最后得到唯一结果有多种方式:一致性平均(uniform averaging);带权重平均(weighted averaging);多数投票(majority voting);知识蒸馏(knowledge distillation)。
一致性平均即每个模板产生的结果的概率直接进行平均,即
权重平均即每个模板贡献的得分是不一致的,而具体使用时权重可以是人为规定的,也可以是训练得出的;多数投票一般用于下游为分类任务时;知识蒸馏即再训练一个模型的来对原来的多个模板产出的结果进行拟合。
5.2 模板增强(prompt augmentation)
模板增强又被叫做证明学习,其目的是提供一些类似的答案模板来让网络了解你的输出应该是什么。比如对于一个「中国的首都是[Z]」的输入,改写为「英国的首都是伦敦,日本的首都是东京,中国的首都是[Z]」。当然这种方式需要解决两大问题:1)如何选择更为有效的提示;2)对选择的提示如何进行排序。
研究者发现如何选择提示样本对模型训练效果会产生极大的影响(选择不同的样本其结果可能是sota也可能是接近随机预测结果)。目前提出的一种方式是利用句向量空间,选择与输出相似的向量空间的句子作为样本。
如:Making Pre-trained Language Models Better Few-shot Learners
而即使是相同的提示,不同的排序方式也会导致结果的巨大差别。目前提出的一种方式是依据熵来对各种排序进行打分。
如:Fantastically Ordered Prompts and Where to Find Them: Overcoming Few-Shot Prompt Order Sensitivity
5.3 模板融合(prompt composition)
模板融合指的是将多个子模板任务融合为一个模板任务。比如在关系抽取任务中,其目标是抽取两个实体间的关系,可以将其改变为两个子任务:1)识别实体词;2)实体间的关系分类。
如:PTR: Prompt Tuning with Rules for Text Classification
5.4 模板分解(prompt decomposition)
对于那种需要对一个输入进行多个预测的任务,使用一个模板来直接预测所有的结果会相对困难,而如果将其拆分为多个子模板一般会更为简单。比如命名实体识别任务,需要对每个span进行进行预测,而将其拆分为分别对每个 span 进行预测就会更为简单。
如:Template-Based Named Entity Recognition Using BART
基于模板学习的训练方式,通常有两部分参数构成,其一为预训练模型本身的参数,另一部分为模板参数,选择不同的这两部分参数的更新策略会影响其下游任务在不同场景下的适用性。根据预训练模型参数是否需要微调、是否存在额外的模板参数以及模板参数是否需要微调可以将训练策略大致分为这样几类:
6.1 无模板微调(promptless fine-tuning)
即常用的使用 LM finetune 的方式,它会使得 LM 的所有参数在下游任务训练时进行微调。
其优点在于简单方便;但缺点在于在数据集较小时容易出现过拟合或者预测结果不够稳定,此外,经过下游任务 finetune 之后可能导致原模型在其他场景上出现灾难性的遗忘。
6.2 无需微调模板(tuning-free prompting)
这种方式无需微调LM参数也无需更新模板参数,他所要做的就是找到合适的模板,此外,可以可选的加入答案模板进行增强(这种方式又被称为上下文学习)。
其优点在于无需参数更新,是真正的零样本学习应用方式;其缺点同样明显,即需要为具体的任务构造模板,为了达到比较高的准确度需要大量的模板构造工程,如果采用模板增强方式需要构造大量的答案模板,同样需要大量的时间和精力。
6.3 模板微调(fixed-LM prompt tuning)
这种方式在原有语言模型的基础上引入可学习的模板,在下游任务训练过程中不更新预训练模型,仅更新模板参数。
在保全了语言模型的本身的模型能力的同时,效果往往比无需微调模板好,其应用场景多是在小样本学习上;由于其模板参数需要训练,所以往往完全不能应用于零样本学习场景,另外尽管其在小样本学习的有效性已经被验证,但效果仍然受制于数据集大小。模板微调也是需要选择初始参数和构造种子模板的,且其效果往往更为不可控。
6.4 语言模型微调(fixed-prompt LM tuning)
相较于无模板的传统 finetune 式训练方式,这种方式仍然要求模板的存在,只是其不会进行更新,仅仅同时存在于训练和预测过程中,其形式往往是自然语言文本。通过实验证明,这种方式在小样本学习上仍然可以取得可观的进步。比如在某个实验中定义了一个简单的模板——无模板,仅仅将输入和答案空间放在一起训练(形如[X][Z],[X]为输入文本,[Z]为答案空间)也获得了不错的效果。
这种训练方式给出了更为完整的任务信息,使得在小样本学习时更加有效;这种方式在不同的下游任务上效果不一定都好,且仍然需要模板设计和答案空间的设计。
6.5 语言模型和模板均微调(prompt+LM tuning)
这种方式的语言模型和模板的参数均可进行更新,除了可训练的模板似乎和常见的无模板微调方式区别不大,但加入模板使得模型在训练开始之时获得更好的辅助。
其优势在于模型具有更强的表达力,其更加适用于大量复杂数据(high-data)的训练;其劣势在于语言模型和模板的大量参数需要优化,所以在小数据样本时容易出现过拟合。
7.1 应用举例
缩写说明:
task列
CR: Commonsense Reasoning
QA: Question Answering
SUM: Summarization
MT: Machine Translation
LCP: Linguistic Capacity Probing
GCG: General Conditional Generation
CKM: Commonsense Knowledge Mining
FP: Fact Probing
TC: Text Classification
MR: Mathematical Reasoning
SR: Symbolic Reasoning
AR: Analogical Reasoning
Theory: Theoretical Analysis
IE: Information Extraction
D2T: Data-to-text
TAG: Sequence Tagging
SEMP: Semantic Parsing
EVALG: Evaluation of Text Generation
VQA: Visual Question Answering
VFP: Visual Fact Probing
MG: Multimodal Grounding
CodeGen: Code generation
prompt engineering shape列
Clo: Cloze
Pre: Prefix
answer engineering shape列
Tok: token-level
Sp: span-level
Sent: sentence-level / document-level
tuning 列
TFP: tuning-free prompting
LMT: fixed-prompt LM tuning
PT: fixed-LM prompt tuning
LMPT: prompt+LM tuning
mul-pr 列
PA: prompt augmentation
PE: prompt ensembling
PC: prompt composition
PD: prompt decomposition
7.2 常见模板
8.1 模板设计方面
1、目前的模板学习主要应用于分类和生成任务,而在其他任务上应用较少(比如信息抽取和文本分析),究其原因在于在其他任务上设计模板没有那么直观。后续发展上,或者是需要将这些任务进行任务形式的转变使其可以适用于分类和生成任务,或者需要设计更为强大的答案引擎。
2、在许多 nlp 任务中,输入可能包含各种结构化信息,比如树、图、表格等,怎样更好的在模板引擎和答案引擎中表述这些信息是很大的挑战。目前的做法主要是将一些词汇进行编码放入模板中,但是对于更为复杂的结构并未有过尝试。
3、模板学习模型的表现主要依赖于模板的选择和答案引擎的制定,目前的主流做法是先制定好答案引擎再选择模板,如何同时对模板选择和答案设计进行优化也是主要的挑战之一。
8.2 答案引擎方面
1、对于分类任务而言,当类别过多时如何合理的选择答案空间是一个特别有挑战性的问题。
2、当分类任务的答案是多字节(multi-token)时,如何有效的编码也是一个充满挑战的问题。
3、对于生成任务而言,答案往往不止一个,如何引导学习过程去学习多种答案目前还是一个巨大的问题。
8.3 训练策略方面
针对不同的任务,如何选择合适的训练策略目前也没有系统的方案,各策略到底对模型结果有何影响也是缺乏系统性的解释的。
8.4 多模板学习方面
1、模板融合作为一种有效提高效果的方案,一般来说融合的模板越多效果越好,但是其复杂度也是不断上升的,如何有效的通过蒸馏等方式降低复杂度目前还没有这方面的研究。
2、使用模板增强时往往受制于输入文本的长度,那么如何提炼更有效的增强文本以及如何对这些文本进行排序也是一个重要的研究方向。
[1] Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural Language Processing:https://arxiv.org/pdf/2107.13586.pdf
[2] Language Models as Knowledge Bases?:https://arxiv.org/pdf/1909.01066.pdf
[3] Template-Based Named Entity Recognition Using BART:https://arxiv.org/pdf/2106.01760.pdf
[4] Prefix-Tuning: Optimizing Continuous Prompts for Generation:https://arxiv.org/pdf/2101.00190.pdf
[5] The Power of Scale for Parameter-Efficient Prompt Tuning:https://arxiv.org/pdf/2104.08691.pdf
[6] How Can We Know What Language Models Know?:https://arxiv.org/pdf/1911.12543.pdf
[7] BARTScore: Evaluating Generated Text as Text Generation:https://arxiv.org/pdf/2106.11520.pdf
[8] BERTese: Learning to Speak to BERT:https://arxiv.org/pdf/2103.05327.pdf
[9] Universal Adversarial Triggers for Attacking and Analyzing NLP:https://arxiv.org/pdf/1908.07125.pdf
[10] AutoPrompt: Eliciting Knowledge from Language Models with Automatically Generated Prompts:https://arxiv.org/pdf/2010.15980.pdf
[11] Making Pre-trained Language Models Better Few-shot Learners:https://arxiv.org/pdf/2012.15723.pdf
[12] PADA: A Prompt-based Autoregressive Approach for Adaptation to Unseen Domains:https://arxiv.org/pdf/2102.12206.pdf
[13] Commonsense Knowledge Mining from Pretrained Models:https://arxiv.org/pdf/1909.00505.pdf
[14] Multimodal Few-Shot Learning with Frozen Language Models:https://arxiv.org/pdf/2106.13884.pdf
[15] Factual Probing Is [MASK]: Learning vs. Learning to Recall:https://arxiv.org/pdf/2104.05240.pdf
[16]Learning How to Ask: Querying LMs with Mixtures of Soft Prompts:https://arxiv.org/pdf/2104.06599.pdf
[17] GPT Understands, Too:https://arxiv.org/pdf/2103.10385.pdf
[18] PTR: Prompt Tuning with Rules for Text Classification:https://arxiv.org/pdf/2105.11259.pdf
[19] How Can We Know When Language Models Know? On the Calibration of Language Models for Question Answering:https://arxiv.org/pdf/2012.00955.pdf
[20] Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference:https://arxiv.org/pdf/2001.07676.pdf
[21] Automatically Identifying Words That Can Serve as Labels for Few-Shot Text Classification:https://arxiv.org/pdf/2010.13641.pdf
[22] Fantastically Ordered Prompts and Where to Find Them: Overcoming Few-Shot Prompt Order Sensitivity:https://arxiv.org/pdf/2104.08786.pdf
收藏