Prompt是什么
NLP发展的四个阶段
(1)完全有监督机器学习:word本质是特征,主要在做特征工程
(2)完全有监督深度学习:开始搞卷积和Attention
(3)预训练:预训练 --> 微调 --> 预测:无监督方法比如BERT+finetune适应下游任务
(4)提示学习:预训练 --> 提示 --> 预测:让下游任务来适应语言模型。
使用Prompt的原因:尽可能在下游任务中使用模型时与pretrain阶段的任务一致。所以重新定义下游任务,统一为pretrain语言模型任务。实现下游任务标数据驱动。
Prompt思想
上下游任务一致。
由此衍生出auto prompt、soft prompt、连续Prompt等。
比较BERT和GPT
(1)BERT在finetune让数据驱动参数变化
(2)GPT使用Prompt让语言通顺,pretrain也是使用通顺的语料。预训练语言模型的知识当当丰富,没有必要为利用它而重构。
Cloze Prompt VS Prefix Prompt
Cloze Prompt:对应Prompt在句中,pretrain用自回归语言模型解决生成任务。
Prefix Prompt:对应Prompt在句末,pretrain用自编码语言模型解决掩码任务。
Hard Prompt: Discrete Prompt
(1)搜索空间是离散的。需要算法工程师在下游任务上具备丰富的经验以及了解原预训练模型的底层概念。
(2)一般的hard prompt准确率会不如fine-tuning的SOTA,不同的Prompt对模型的影响非常大(提示的长度、词汇的位置,一点Prompt的微笑差异也能造成效果的巨大差异)
需要如下的要求:
- 设计一个合适的提示模板,创造一个完形填空的题目。
- 设计一个合适的填空答案,创造一个完形填空的选项。
Step1:构造Prompt。
Step2:构造MASK token映射。
AutoPrompt
Motivation:由于Prompt的设计强依赖于人为因素,Prompt几个字都能导致模型效果有巨大变化。为了减少人工设计的去『构造Prompt』和『构造MASK token映射』,提出了AutoPrompt。
分类
(1)Prompt Mining:从巨大的语料库中进行挖掘,比如输入与输出之间的高频词作为模板构建元素。
(2)Prompt Paraphrasing:参考文本数据增强方法,可以做seed Prompt的同义词替换,跨语种翻译等。
(3)Gradient-based Search:从候选词中选择一些作为Prompt并参与训练,根据梯度下降对选择词重新排列组合。?
(4)Prompt Generation:通过文本生成模型直接生成一个Prompt
(5)Prompt Scoring:根据语言模型对所有候选Prompt打分,选择一个最高分的Prompt使用上述Hard Prompt方法会输出可被人类理解的句子。
步骤
去除人工设计带来的变数,自动执行下面两步。【没看懂】
Step1: 构造Prompt,选择loss下降最大的Prompt token,先给定mask映射词,也就是:[CLS] {sentence} [T] [T] [T] [MASK]. [SEP]
,先用假设的[T]
,获取[MASK]
,再用得到的[MASK]
映射,用数据驱动选择[T]
。
Step2:构造MASK token映射,使用上下文的MASK token的output embedding作为x,与label训练一个logistic,logistic得分高的向量更能表示label。使用上下文MASK token的output token的embedding给打分函数,取得分top-k。
举个例子
- 关系抽取任务
- 预测
Dante was born in [T] [T] [T] [T] [Mask]
中[MASK]
的遮蔽部分。[T]
是用来引导模型的触发词(trigger word)。触发词就是 Prompt 信息,这些触发词可以提升语言模型的分类能力。 - 【掩码】直接追加到文本后面、让语言模型去预测。预测多个词语比较困难,因此将所有的类别表示为单个token;只预测客体(Dante was born in [Mask]),不预测主体(In [Mask] Dante was born)和关系。
- 【触发词】trigger word:Prompt信息,触发词可以直接提升语言模型在下游任务中的能力。
代表论文
https://arxiv.org/pdf/2010.15980
AUTOPROMPT: Eliciting Knowledge from Language Models with Automatically Generated Prompts
https://gitcode.com/ucinlp/autoprompt
Main points
预训练语言模型(LMs)在预训练后能够捕获多种知识类型,但直接评估这些知识存在难度。
AUTOPROMPT是一个自动化的提示生成方法,用于评估预训练LMs中的知识。
AUTOPROMPT使用梯度引导搜索来创建有效的提示,无需手动努力。
该方法通过结合原始输入和触发词,并使用模板来形成提示。
通过边缘化相关的标签词,可以从MLMs中提取类别概率。
在情感分析和自然语言推理(NLI)任务中,AUTOPROMPT生成的提示在没有微调的情况下表现出色。
在事实检索任务中,AUTOPROMPT生成的提示比手动和挖掘方法创建的提示更有效。
在关系提取任务中,MLMs使用AUTOPROMPT生成的提示可以比现有的监督关系提取模型更有效地提取知识。
AUTOPROMPT在低数据环境下可能比微调更有效,并且在实际应用中具有存储和部署上的优势。
尽管AUTOPROMPT是一个有用的工具,但它在某些情况下可能难以提取特定的现象,并且生成的提示可能缺乏可解释性。
问题与方案
问题:
- 文档主要解决的问题是如何有效地从预训练语言模型(LMs)中提取知识。尽管这些模型在预训练后表现出色,但直接评估它们在预训练阶段学到的知识类型(如语言知识、事实知识、常识或特定任务知识)存在难度。
方案:
- 为了解决这个问题,研究者们开发了AUTOPROMPT,一个自动化方法,用于为多种任务创建提示(prompts),这些提示基于梯度引导搜索来生成。
核心步骤
AUTOPROMPT的核心步骤可以解释如下:
- 任务输入与模板结合:首先,确定任务的原始输入数据,并选择一个模板来构建提示。例如,在情感分析任务中,原始输入可能是电影评论。
- 触发词的初始化与学习:在提示中,使用一组初始化为[MASK]的触发词。这些触发词在后续步骤中会被更新,以提高模型预测正确类别的概率。
- 梯度引导的搜索:利用基于梯度的搜索策略来迭代更新触发词。这个过程涉及到计算词汇表中每个词与当前触发词交换后对标签似然性的影响,并选择最有可能提高似然性的词来替换触发词。
- 生成最终提示:通过上述步骤,最终生成一个能够引导语言模型准确预测任务类别的提示。
举例来说,如果任务是情感分析,原始输入可能是一句电影评论。AUTOPROMPT会使用一个模板,比如“[sentence] is really [MASK].”,并将触发词如“atmosphere”、“dialogue”等嵌入到模板中,形成如“[sentence] is really atmosphere dialogue [MASK].”的提示。然后通过梯度引导搜索来优化这些触发词,最终得到一个能够准确预测情感类别的提示。
结论
- 研究结果表明,使用AUTOPROMPT生成的提示可以有效地从预训练的掩码语言模型(MLMs)中提取知识,而且与手动创建的提示相比,不需要额外的参数或微调,有时甚至能达到与最新监督模型相当的性能。此外,研究还发现AUTOPROMPT在低数据环境下比微调有更好的性能,并且在实际应用中提供了一些优势,比如不需要存储大量的模型检查点。
关键论述
"These tokens are initialized to [MASK] tokens, and then iteratively updated to maximize the label likelihood over batches of examples." 这句话说明了触发词最初被设置为[MASK]标记,然后通过迭代更新以最大化标签似然性。
"Formally, at each step, we compute a first-order approximation of the change in the log-likelihood that would be produced by swapping the jth trigger token with another token in the vocabulary." 这里描述了计算过程,即在每一步中计算交换第j个触发词与词汇表中的另一个标记所产生的对数似然变化的一阶近似。
"Then we identify a candidate set of the top-k tokens estimated to cause the greatest increase:" 这句话指出了如何确定一组候选词,这组词是预计能带来最大增加的前k个标记。
"In this paper, we introduce AUTOPROMPT—an automated method for generating prompts for any task, illustrated in Figure 1. Given a task, e.g., sentiment analysis, AUTOPROMPT creates a prompt by combining the original task inputs (e.g. reviews) with a collection of trigger tokens according to a template." 这句话概述了AUTOPROMPT自动化生成任务提示的方法,它通过结合原始任务输入和触发词来创建提示。
"The same set of trigger tokens is used for all inputs, and is learned using a variant of the gradient-based search strategy proposed in Wallace et al. (2019)." 这里提到了触发词集合对所有输入都是相同的,并且是使用基于梯度的搜索策略的变体学习的。
"The prompt is constructed by taking the original task inputs—a collection of one or more sequences of tokens (e.g., the review in Figure 1)—and mapping them to a sequence of tokens using a template." 这句话说明了提示的构建过程,它涉及将原始任务输入(一个或多个token序列)映射到使用模板的token序列。