论文:
《Calibrate Before Use: Improving Few-Shot Performance of Language Models》
few-shot learning
(用有限的样本来学习任务的能力)是智力的一个重要方面。最近的工作表明,大型神经语言模型可以在不进行微调的情况下进行 few-shot learning
。具体来说,当被提供以自然语言 prompt
描述的几个样本时,GPT-3
可以执行许多任务。例如,为了进行情感分析,人们可以将 GPT-3
以一个 prompt
为条件,如:
Input: Subpar acting. Sentiment: Negative
Input: Beautiful film. Sentiment: Positive
Input: Amazing. Sentiment:
其中前两行对应两个prompted examples
,最后一行是一个测试样本。为了进行预测,该模型预测的后续 token
更有可能是单词 "Positive"
或 "Negative"
。
这种 few-shot "in-context" learning
的方式很有趣,因为它表明模型可以在没有参数更新的情况下学习。而且,更重要的是,与现在标准的微调方法相比,它有许多实际的优势:
首先,它允许从业者 "快速制作" NLP
模型的原型:改变 prompt
会立即导致一个新的模型。
其次,它为机器学习模型提供了一个百分之百自然语言的接口,这使得用户(甚至那些不是技术专家的人)可以创建 NLP
系统。
最后,由于 in-context learning
在每个任务中都重复使用相同的模型,它在为许多不同的任务在 serving
时减少了内存需求和系统复杂性。
然而,尽管有这些承诺,我们表明,GPT-3
的准确率在不同的 prompts
中可能非常不稳定的。一个 prompt
包含三个部分:prompt
格式、一组prompted examples
、以及这些样本的排列组合(ordering
)。我们表明,对这些因素的不同选择会导致高度不同的准确率。例如,在情感分析 prompt
中改变prompted examples
的排列方式会使准确率从接近随机(54%
)变为接近 SOTA
(93%
)。这种不稳定性意味着 GPT-3
的用户(这些用户通常是手动设计 prompts
),不能期望持续获得良好的准确率。
我们接下来分析一下造成这种不稳定性的原因。我们确定了语言模型的三个缺陷,这些缺陷导致它们在 few-shot learning
期间偏向于某些答案。具体而言,它们受到 majority label bias
、recency bias
、以及 common token bias
的影响。
majority label bias
和 recency bias
导致模型会预测在 prompt
中经常出现、或接近 prompt
末尾的 training answer
。例如,一个以 negative training example
结束的 prompt
可能会偏向于 negative class
。
另一方面,common token bias
导致模型更倾向于在模型的预训练数据中经常出现的答案,例如,它更倾向于 "United States"
而不是 "Saint Lucia"
。这对于目标任务来说可能是次优的。
我们发现,这些 bias
通常会导致模型的输出分布发生偏移。因此,我们可以通过 "校准" 输出分布来抵消这些 bias
。具体来说,我们通过输入一个content-free
的 dummy test input
来估计模型对某些答案的 bias
。例如,在上面的 prompt
中,如果我们用 "N/A"
字符串替换 "Amazing."
,模型就会预测出 62% Positive
。然后我们拟合 calibration parameters
,使 content-free input
对每个答案都有统一的分数。这个 contextual calibration
程序提供了一个良好的 calibration parameters setting
,而不需要额外的训练数据。
将噪音输入的
prediction
分布作为校正参数,对test input
的prediction
分布进行校正。
我们在一系列的任务上测试了 contextual calibration
的有效性。在不同的 prompt format
和样本的选择中,contextual calibration
一致地提高了 GPT-3
和 GPT-2
的准确率(绝对提升高达 30.0%
)(如下图所示)。它还使准确率在不同的 prompt
中更加稳定,从而减轻了对 prompt engineering
的需求。总的来说,contextual calibration
是一种简单的方法,它使语言模型成为更好的 few-shot learners
:它使终端用户能够以相当少的努力获得更高的准确率。
相关工作:
Few-shot Learning with Language Model
:最近的工作使用语言模型来解决 NLP
任务,例如,story cloze prediction
、knowledge base completion
、和 Winograd schema
。
GPT-2
和 GPT-3
表明,大型语言模型可以通过 in-context learning
从而以 few-shot
的方式解决无数的任务。我们的论文对他们的 setting
提供了一个简单的修改从而提高性能。要求语言模型补全 natural language prompt
也作为一种方法从而 "probe" language model
,例如,分析事实性的知识或常识性知识。我们的结果表明,这些 probing
方法可能低估了模型的准确率,我们建议未来的工作利用 contextual calibration
的优势。
NLP
中 Few-shot Learning
的波动性:最近的工作表明,当使用 masked language model
(如 BERT
)进行 zero-shot learning
时,prompt
的格式会影响准确率。独立且同时进行的工作也表明,当在 few examples
上微调 masked language model
时,prompted examples
的选择会影响结果。我们表明,类似的不稳定性发生在 left-to-right language model
的 in-context learning
(即,没有微调)中。我们还显示了一个与 example ordering
有关的令人惊讶的不稳定性。此外,与过去的工作不同,我们分析了这些不稳定性发生的原因,并利用这一分析的见解来缓解这些问题。
语言模型的失败:当语言模型被用于 in-context learning
时,我们发现了失败的情况(例如,recency bias
)。过去的工作发现,当语言模型被用于文本生成时也有类似的失败。例如,神经语言模型经常重复自己(《The curious case of neural text degeneration》
)、遭受过度自信、遭受 recency bias
、喜欢通用的 response
而不是稀有文本。过去的工作通过修改模型的输出概率或生成方案来缓解这些退化,例如,显式地地防止重复(《A deep reinforced model for abstractive summarization》
)、或使用采样而不是贪婪解码(《The curious case of neural text degeneration》
)。
神经自回归语言模型将 tokens
的一个序列作为输入,并输出 next token
的概率分布。大型神经语言模型可以使用 in-context learning
以 zero-shot/few-shot
的方式执行任务(GPT-2, GPT-3
)。为此,一个自然语言的 prompt
被馈入模型。这个 prompt
包含三个部分:format
格式、一组prompted examples
、prompted examples
的排列顺序(ordering
)。
Prompt Format
:prompt format
是一个模板,由占位符(针对prompted examples
和测试样本)和任务的自然语言描述(这个描述也可能不存在)组成。例如,前面章节中的 prompt format
是一个具有以下风格的模板: "Input:" input "Sentiment:" label
。还有许多其他的格式,例如,我们可以把任务设定为问答任务。
Prompt Training Examples
:prompted examples
是用来教导语言模型如何解决手头的任务。前面章节中的 prompt
由两个prompted examples
组成;我们把这称为 "two-shot" learning
。我们也考虑 "zero-shot" learning
,即不存在任何prompted examples
。
Training Example Permutation
:当prompted examples
被使用时,prompted examples
之间有一个特定的排列方式,例如,在前面章节的 prompt
中,"Subpar acting"
的样本排在第一位。这种排列方式很重要,因为神经语言模型是以从左到右的方式更新其 hidden states
。
为了对一个输入进行预测,我们把它放入 test placeholder
中,并从语言模型中生成。例如,请看前面章节的 prompt
中的 "Amazing."
测试样本。
对于 generation
任务,我们从语言模型中贪婪地生成,直到它产生一个换行符。
对于分类任务,每个类别的概率是由分配给该类别的 label name
的概率给出的,例如,情感分类中的 "Negative"
和 "Positive"
。
数据集和 prompt format
:我们将数据集用于三个任务:文本分类、事实检索、信息提取。除非另有说明,我们对每个数据集都使用固定的 prompt format
,这些格式如下表所示。
文本分类数据集:用于情感分析的 SST-2
、用于问题分类的 TREC
、用于 textual entailment
的 CB
、来自 SuperGLUE
的 RTE
、用于话题分类的 AGNews
和 DBPedia
。
事实检索数据集:LAMA
数据集。该数据集由 knowledge base
三元组 (subject, relation, object)
组成,这些三元组被放置在带有缺失 object
的模板中,例如 "Obama was born in"
。我们使用这些模板作为我们的 prompt
,并删除 missing answer
不在模板末端的样本( left-to-right
的语言模型只能解决 missing answer
在模版末尾的问题)。答案总是 single token
,我们报告了所有三元组的平均准确率。
信息提取数据集:两个 slot filling
数据集,即 ATIS
、MIT Movies trivia10k13
。我们为每个数据集使用两个随机槽,ATIS
使用 airline
和出发日期、而 MIT Movies
使用导演姓名和电影类型。两个数据集的答案都是输入文本的 span
,例如,ATIS airline task
是在给出 "list a flight on american airlines from toronto to san diego"
的句子时预测 "american airlines"
。我们使用模型所生成的输出和 ground-truth span
之间的 Exact Match
作为我们的评估指标。
模型细节:我们在三种规模的 GPT-3
( 2.7B/13B/175B
参数)以及 GPT-2
( 1.5B
参数)上运行我们的实验。我们使用 OpenAI
的 API
访问 GPT-3
。我们发布代码来复制我们的实验。
这里研究 GPT-3
的准确率如何随着我们对 prompt
的各个方面(prompted examples
、排列组合、格式)的改变而改变。我们专注于数据集的一个子集,以简化我们的分析。在后续章节中,我们表明我们的发现在我们研究的所有数据集中都是成立的。
GPT-3
的准确率在很大程度上取决于prompted examples
选择和prompted examples
排列组合。具体来说,我们使用一个固定的 prompt format
并选择不同的随机的prompted examples
集合。对于每一组prompted examples
,我们评估所有可能的排列组合的准确率。
下图显示了 SST-2
(4-shot, GPT-3 2.7B
)的结果。令人惊讶的是,改变排列组合可能与选择何种prompted examples
一样重要,甚至更重要。例如,改变prompted examples
的排列组合可以使准确率从接近机会( 54.3%
)上升到接近 SOTA
(93.4%
)。关于对排列组合的敏感性的定性的示例,参考 Table 2
。这种对样本顺序的高度重要性与标准机器学习形成了鲜明的对比,在标准机器学习中,训练期间的样本顺序通常是不太重要的。
这种方差在更多的数据和更大的模型中持续存在:在 prompt
中添加更多的prompted examples
并不一定能减少准确率的方差。我们在下图中对三个不同的数据集扫描了不同数量的prompted examples
(红色曲线)。即使我们使用 16
个prompted examples
,方差仍然很高。此外,增加更多的prompted examples
有时会伤害准确率(例如,DBPedia
的 0-shot
到 1-shot
的平均准确率从 36.0%
下降到 25.9%
)。在使用较大的模型时,准确率的方差也会保持很高。
GPT-3
的准确率高度依赖于 prompt format
:接下来我们保持固定的prompted examples
和固定的排列组合,但改变 prompt format
。我们专注于 SST-2
,并手动设计了另外 14
种 prompt format
。这些格式包括 question-answer
模板、对话式模板、类似网页的 prompts
、以及 label names
的变化(所有格式如 Table 7
所示)。下图显示了其中 10
种格式的准确率。我们发现,有些格式平均来说比其他格式要好。然而,所有的格式在不同的训练集中仍然存在着高方差。
接下来,我们分析了为什么 GPT-3
的准确率在不同的prompted examples
、排列组合、以及 prompt format
中会有所不同。具体而言,我们表明,方差的产生是因为语言模型偏向于输出以下答案:
(1)
:在 prompt format
中频繁出现的答案(majority label bias
)。
(2)
:在 prompt
尾部出现的答案(recency bias
)。
(3)
:在预训练数据中常见的答案(common token bias
)。
Majority Label Bias
:我们发现 GPT-3
偏向于 prompt
中经常出现的答案。一个常见的情况是,当一个 text classification prompt
存在类别不平衡时,例如,在情感分类样本中更多的 Positive
样本。这表现在下图的 "unbalanced"
区域:当一个类别更高频时,GPT-3 2.7B
严重偏向于预测该类别。由于 SST-2
情感分类数据集是平衡的,这种 bias
会导致很大的准确率下降。 majority label bias
也解释了为什么我们经常观察到从 0-shot
到 1-shot
的准确率下降:我们发现下降的原因是模型经常重复这个 one training example
的类别。
majority label bias
也发生在 generation
任务中。在使用 GPT-3 2.7B
的 4-shot LAMA
的验证集上,50.2%
的模型预测是四个训练答案之一的重复(ground truth
的重复率只有 24.7%
)。总的来说,majority label bias
有助于解释为什么对prompted examples
的不同选择会严重影响 GPT-3
的准确率:它改变了 model prediction
的分布。
下图的含义:
4-shot SST-2
中,选择不同的class
组合导致不同的positive prediction
概率(纵轴)。
Recency Bias
:模型的 majority label bias
因其 recency bias
而加剧:倾向于重复那些出现在prompt
尾部的答案。Figure 4
的 "balanced"
区域表明了这一点。例如,当两个Negative
样本出现在最后时(即,"PPNN"
),该模型将严重倾向于 Negative
类别。此外,recency bias
可以超过 majority label bias
,例如,"PPPN"
训练集导致近 90%
的预测是 Negative
的,尽管 prompted examples
是 Positive
的。
recency bias
也会影响 generation
任务。对于 4-shot LAMA
,更接近 prompt
尾部的答案更有可能被模型重复。具体来说,模型对第一个、第二个、第三个和第四个prompted examples
的答案分别 "过度预测"了 8.5%
、8.3%
、14.3%
和 16.1%
。总的来说,recency bias
有助于解释为什么prompted examples
的排列顺序很重要:样本的排序严重影响了 model prediction
的分布。
Common Token Bias
:最后,我们发现 GPT-3
偏向于输出其预训练分布中常见的 tokens
,这对于下游任务的答案分布来说可能是次优的。这种情况的一个简单案例发生在 LAMA
事实检索数据集上,其中模型经常预测常见的实体(如 "America"
),而 ground-truth answer
却是一个罕见的实体。
在文本分类中,出现了一个更细微的 common token bias
的案例。回顾一下,该模型是通过生成与每个类别相关的 label name
来进行预测的。因为某些 label name
称在预训练数据中出现的频率较高,所以模型会对预测某些类别有固有的 bias
。例如,在DBPedia
(一个平衡的14-way
主题分类数据集)上,GPT-3
预测 "book"
类别的频率比 "artist"
类别高 11
倍。事实上,DBPedia label name
的频率与 GPT-3
预测其类别的概率之间存在适度的相关性(common token bias
有助于解释为什么 label names
的选择是重要的,以及为什么模型在罕见的答案上陷入困境。
bias
对模型预测的影响:我们发现,上述三种 bias
的最终结果通常是模型输出分布的 simple shift
。例如,下图直观地显示了SST-2 sentiment prompt
的这种偏移。下图中使用的 prompt
和模型的固有 bias
导致模型对于 Positive
类别经常预测出高的信心。由于默认的 50%
阈值被用来进行预测,这导致了频繁的假阳性(false positive
)。重要的是,请注意,如果我们能够最佳地设置分类阈值(在这个案例中,94%
)。
到目前为止,我们已经表明,由于 prompt bias
和模型的固有 bias
,GPT-3
偏向于某些答案。这里,我们希望通过 "校准" 模型的输出概率来纠正这一点。调整输出概率的常见技术是应用仿射变换:
其中:
对于分类任务,label name
相关联的概率的集合,重新归一化为 1.0
。
对于生成任务,first token
的在整个候选集合上的概率集合。
注意,这里是
generation
的first token
上进行调整。
在本文中,我们限制矩阵 vector scaling
,从而防止参数在 size
上(对于生成任务,这个 size
大约是 50k
)呈二次方的增长。
在 zero-shot/few-shot setting
下,主要挑战是我们没有数据来学习 data-free
程序来推断这些参数的一个 good setting
。关键的想法是,模型对某些答案的 bias
可以通过输入一个 content-free input
来估计,比如 字符串 "N/A"
。例如,考虑 two-shot prompt
:
xxxxxxxxxx
Input: Subpar acting. Sentiment: Negative
Input: Beautiful film. Sentiment: Positive
Input: N/A Sentiment:
其中 "N/A"
作为 test input
。理想情况下,GPT-3
会对这个测试输入进行评分,即 50%
为 Positive
、50%
为 Negative
。然而,模型的 bias
导致模型把这个输入打分为 61.8%
的 Positive
。请注意,这个错误是 contextual
的:对prompted examples
、排列组合、prompt
格式的不同选择将导致对 content-free input
的不同预测。
我们可以通过设置 content-free input
的 class scores
统一。我们首先得到 content-free input
的 test prediction
,我们计算 argmax
。
为什么选择这种
?现在假设 test input
就是content-free input
,那么,为单位矩阵。这意味着将 content-free input
调整为均匀分布的输出。
实现细节:这个 contextual calibration
程序增加了微不足道的计算开销,只需几行代码就能实现(计算和保存 content-free input
,存在许多好的选择,包括 "N/A"
字符串、空字符串、以及一些杂乱的 tokens
。在我们所有的实验中,我们对三种 content-free
的概率进行平均:"N/A"
、"[MASK]"
、以及空字符串。我们还可以以一种 task-specific
的方式制作 content-free input
。我们对 LAMA
进行了探索,我们用 content-free input
来代替 subject
,例如,我们用 "N/A was born in"
作为输入。
Contextual Calibration
的结果:在这里,我们评估了 contextual calibration
在我们所有的数据集和语言模型中的有效性。我们首先使用一个固定的 prompt format
,并选择prompted examples
的五个不同的随机的集合,将它们以任意的顺序放在 prompt
中。我们没有人为地平衡分类任务中prompted examples
的类别比例。我们在基线(无calibration
的标准解码)和 contextual calibration
中使用相同的prompted examples
集合。我们使用 0-8
个样本的 labeling budget
,因为使用超过 8- shot
会导致查询 OpenAI API
的成本变得过于昂贵。
结果如下表所示。Figure 1
对于一部分任务绘制了下表中的数据。
提高了平均准确率、以及 worst-case
准确率:contextual calibration
极大地提高了 GPT-3
的平均准确率、以及 worst-case
准确率,提升幅度(绝对值)高达 30.0%
。这些提高对分类任务和生成任务都适用。contextual calibration
有时还允许 GPT-3 2.7B
的性能优于 GPT-3 175B baseline
高达 19.3%
,尽管前者的体积比后者小了 50
多倍。
可以减少整个训练集的方差:Figure 6
显示了 Table 1
中所有任务的 baseline
和 contextual calibration
之间的标准差的差异。在大多数情况下,contextual calibration
大大减少了方差;在其余情况下,contextual calibration
并没有大大增加方差。
减少了从 0-shot
到 1-shot
的 drop
:对于 baseline
,有四个案例在从 0-shot
到 1-shot
的过程中出现了准确率的下降(TREC, AGNews, DBpedia, SST-2
)。我们把这种下降归因于majority label bias
。contextual calibration
在四种情况中的三种情况下消除了这种下降。
改善 GPT-2
:我们还测试了GPT-2 1.5B
(参考 Table 4
)。我们发现,与 GPT-3
一样,GPT-2
的准确率在不同的 prompt
中也有很大的差异。这表明,我们观察到的 few-shot in-context learning
的方差是语言模型的一个普遍问题。其次,contextual calibration
对 GPT-2
来说是开箱即用的,它提高了大多数任务的平均准确率并减少了方差。
提高不同格式的准确率:在我们的下一组实验中,我们使用固定的prompted examples
集并改变 prompt format
。我们使用前面讨论的SST-2
的 15
种 prompt format
。我们还通过使用 AutoPrompt
生成的 original LAMA templates
的转述,为 LAMA
中的三个随机关系(P20, P159, P19
)各创建了 15
种 prompt format
。Figure 7
是 SST-2
校准前后的结果, Figure 9
是 LAMA
的结果。contextual calibration
提高了两个数据集的平均准确率和 worst-case
准确率,并降低了 SST-2
的方差。
Contextual Calibration
消融研究:最后,我们对 contextual calibration
进行了两项分析。
我们首先分析了 contextual calibration
在推断 setting
方面的有效性。为此,我们将其准确率与 "oracle calibration"
方法进行比较,后者使用验证集来寻找最佳的对角矩阵 AGNews
上评估了这个 oracle calibration
,发现 contextual calibration
与它惊人地接近(Figure 8
)。
我们还研究了 content-free input
的选择如何影响准确率。在 Table 3
中,我们显示了 SST-2
和 AGNews
对 content-free input
的不同选择的准确率。 content-free input
的选择很重要,然而,存在许多好的选择。
校准是否消除了对 Engineer Prompt
的需要?"prompt engineering"
背后的动机是,并非所有的 prompts
都能导致同样的准确率。因此,我们应该调整 prompt
的格式和样例,以达到最佳的性能。contextual calibration
并不能消除对 engineer prompts
的需要,然而,它确实减轻了这种需要:contextual calibration
使最佳 prompts
的准确率、平均prompts
的准确率、以及worst case prompts
的准确率更加相似(以及更高)。
你应该在 Few-shot Setting
中进行微调吗?我们使用一个固定的语言模型,没有微调。如前文所述,有许多理由不进行微调:它可以实现快速的原型设计;提供一个百分之百自然语言的接口;并且在为许多不同的任务 serving
时,在内存需求和系统复杂性方面更有效率。
此外,就像没有 contextual calibration
的 in-context learning
一样,微调在 few-shot setting
中可能是不稳定的(PET
)。然而,如果这些缺点是可以接受或可以避免的,那么在某些情况下,微调可以比 in-context learning
提高准确率。未来工作的一个有趣的方向是研究 contextual calibration
和微调之间的相互作用,例如,contextual calibration
是否缓解了微调的需要,或者反之亦然?
从大的方面来看,我们的结果启发了 NLP
的 few-shot learning
的两个未来研究方向。
首先,在方法方面,我们表明,good few-shot learning
需要关注细节:诸如 calibration
等微小但重要的决定会极大地影响结果。这使得我们很难正确地开发和比较新的方法(如预训练方案或模型架构)。因此,我们希望使其他的 few-shot learning
方法更加稳健,也希望扩大我们的技术以涵盖更广泛的任务(例如,开放式 generation
的校准)。
第二,在分析方面,我们的结果强调了了解 GPT-3
从 prompt
中学到什么的必要性。该模型具有令人印象深刻的能力,可以通过更多的训练实例来提高。然而,我们表明该模型学习了一些表面的模式,如重复常见的答案。我们希望在未来的工作中能更好地理解和分析 in-context learning
的 dynamics
。
论文:
《What Makes Good In-Context Examples for GPT-3?》
尽管 GPT-3
具有强大而通用的 in-context learning
能力,但它也有一些实际的挑战/模糊之处。GPT-3
利用从训练集中随机采样的 task-relevant
样本来构建上下文。在实践中,我们观察到,GPT-3
的性能往往会随着 in-context examples
的不同选择而波动。如下表所示,在不同的 in-context examples
,经验结果的差异可能是很大的。这些结果对样本高度敏感。我们的工作旨在仔细研究这个问题,以便更深入地了解如何更好地选择 in-context examples
,以释放 GPT-3
的 few-shot
能力并进一步提高其性能。
一个粗暴的方法是在整个数据集上进行 combinatorial search
。不幸的是,这种策略在计算上是昂贵的,因此在许多情况下是不切实际的。为此,我们研究了采用不同的 in-context examples
对经验结果的影响。有趣的是,我们发现,在 embedding
空间中更接近测试样本的 in-context examples
始终能产生更强的性能(相对于更远的 in-context examples
)。受这一观察和最近 retrieval-augmented model
的成功启发,我们建议利用给定测试样本的最近邻(在所有可用的 training instances
中)作为相应的 in-context examples
。被检索到的样本与测试样本一起被提供给 GPT-3
进行最终预测。
核心思想:
few-shot examples
不是随机选择的,而是选择和test input
最相似的。根据
《Rethinking the Role of Demonstrations: What Makes In-Context Learning Work?》
的结论,即使用随机的out of distribution
输入和随机的标签的组合(这种组合甚至不是一个有效的样本)作为context
,效果也比no demostrations
要好。这个结论和本文不冲突,因为本文重点在说明:选择与test input
最相似的训练样本,要比选择随机的训练样本,在few-shot learning
中效果更好。
为了验证所提出的方法的有效性,我们在几个自然语言理解任务和自然语言生成任务上对其进行了评估,包括情感分析、table-to-text
的生成、以及开放域的问答。我们观察到,retrieval-based in-context examples
比随机采样的 baseline
更有效地释放了 GPT-3
的 few-shot
。即使 in-context examples
的数量较少,所提出的策略也能使 GPT-3
获得更强的性能。此外,我们发现,在检索过程中所采用的特定的 sentence encoders
起着关键作用。因此,我们对不同的 pre-trained encoders
进行了广泛的探索,结果表明,在 natural language matching
任务中微调的编码器在 QA
任务中作为更有效的 in-context examples selector
。详细的分析和案例研究进一步验证了所提方法的有效性。综上所述,我们在本文中的贡献如下:
据我们所知,我们迈出了第一步,了解了 GPT-3
针对不同的 in-context examples
选择的few-shot
能力。
为了缓解敏感性问题,引入了一个额外的检索模块来寻找与测试实例的语义相似的 in-context examples
,以构建其相应的输入,这大大超过了基于 random sampled examples
的 baseline
的表现。
在与任务相关的数据集上对 retrieval model
进行微调,使 GPT-3
的经验结果更加强大。
GPT-3
的性能随着可供检索的样本数量的增加而提高。
相关工作:
Pre-trained Language Models
:对于文本分类任务,引人注目的模型包括 BERT, RoBERTa, XLNet
;对于文本生成任务,值得注意的模型包括 BART, T5, mT5, XLM, GPT, GPT-2
。这些模型可以通过微调来适应许多不同的任务。
然而,GPT-3
可以适应许多下游任务,而不需要进行微调。只需给定几个 in-context examples
,GPT-3
就能迅速掌握模式,并在答案风格和内容上产生类似的答案。因此,GPT-3
可以被认为是一个模式识别器来进行 in-context learning
。人们刚刚开始尝试从不同的角度来理解 GPT-3
。正如引言部分提到的,《Measuring massive multitask language understanding》
研究 GPT-3
更能够回答哪些类别的问题。我们的工作重点是如何选择好的 in-context examples
。
基于检索的文本生成:其中心思想是将检索到的样本作为典范/原型,并对其进行一些编辑。GPT-3
在一个角度上可以被自然地视为一个通用的编辑器,适应于广泛的任务。我们的工作独特地研究了如何在不进行微调的情况下最大限度地发挥 GPT-3
的优势。例如,我们为 GPT-3
提供的 context
的语义相似度越高,该模型能产生的结果就越好。其他编辑器或生成器则没有这种能力。
用 kNN
改进 NLP
系统:
最近的一个工作方向是试图结合 nonparametric
方法来提高一个给定模型的性能。这些方法首先访问测试样本的 hidden representation
,并在数据库中寻找该测试样本的最近邻。一旦找到最近邻,最近邻的标签就被用来增强模型的预测。例如,新引入的 kNN-LM, kNN-MT, BERT-kNN
通过从 data-store
中检索最近的 next token
。
另一项相关工作是 kNN
分类模型,他们在 fine-tuned classification model
的信心较低时使用 kNN
作为 backoff
。
我们的工作与其他方法有两个关键区别:
首先,其他方法使用最近的 next token distribution
。然而,我们只使用最近的
第二,其他方法可以访问模型的参数和 embedding
,而我们无法访问。相反,我们使用其他一些独立预训练好的模型来获得sentence embedding
,以检索最近的
GPT-3
的 in-context learning
场景可以被看作是一个条件文本生成问题。具体来说,生成目标
其中:LM
表示语言模型的参数;GPT-3
中,training instances
和它们相应的标签拼接起来而创建的。如下图所示,GPT-3
被要求根据输入的三个样本从而将 "mountain"
翻译成德语版本。
对于 GPT-3
,这个生成过程是通过一个巨大的 transformer-based
的模型架构实现的。鉴于 GPT-3
模型的巨大规模,在 task-specific samples
上对其进行微调将是计算量巨大。因此,GPT-3
通常是以上述的 in-context learning
方式来利用的。事实证明,GPT-3
具有强大的 few-shot
能力,只需提供少量的 demonstrations
就可以表现得相当好。不幸的是,如 Table 1
所示,GPT
的结果往往会随着选择不同的 in-context examples
而出现明显的波动。在这里,我们旨在通过明智地选择 in-context examples
来缓解这个问题。
鉴于观察到GPT-3
的实证结果对所选择的 in-context examples
很敏感,我们从实证的角度来看看 in-context examples
的作用。以前的 retrieve-and-edit
文献通常会检索出在某些 embedding
空间中与 test source
test source
GPT-3
选择 in-context examples
。
为此,我们研究了 in-context example
和测试样本之间的距离对 GPT-3
的性能的影响。具体来说,我们在 Natural Questions: NQ
数据集上对两种 in-context example
选择策略进行了比较。对于每个测试样本,第一种方法利用最远的 10
个训练实例来构建上下文从而馈入 GPT-3
,而第二种方法则采用最近的 10
个邻居来构建上下文。我们使用 pre-trained RoBERTa-large
模型的CLS embedding
作为 sentence representation
来衡量两个句子的临近程度(使用欧氏距离)。
我们随机抽取了 100
道测试题来进行评估,下表中报告了两种不同策略的平均 Exact Match: EM
得分。可以看出,最近邻作为 in-context examples
,相对于最远的训练样本,产生了更好的结果。此外,pre-trained RoBERTa
模型作为有效的 sentence embedding
,用于检索程序。
基于上述发现,我们提出了 Knn-Augmented in-conText Example selection: KATE
,一种为 in-context learning
选择 good in-context examples
的策略。这个过程在下图中得到了可视化。
具体来说,我们首先使用某个 sentence encoder
将训练集和测试集中的 sources
转换为 vector representations
。然后,对于每个test source
sentence encoder
的 embedding
空间中的距离)。给定一些预定义的相似性度量
即,距离从近到远的排序。
之后,将 sources
与它们相应的 label
拼接起来,形成上下文 test source
GPT-3
。算法图见 Alogorithm 1
。请注意,这里可以采用不同数量的 in-context examples
,我们在后面的章节中对其影响进行消融研究。
Retrieval Module
的选择:我们的 context selection
方法的一个核心步骤是将句子映射到潜在语义空间中,这就留下了一个问题,即我们应该选择什么样的 sentence encoder
。我们在现有的 pre-trained text encoder
中进行了比较,发现它们足以检索出语义相似的句子。这些 sentence encoder
可以分为两类。
第一类包括最通用的 pretrained sentence encoder
,如 pre-trained BERT, RoBERTa, or XLNet
模型。这些模型已经在大量的无监督任务中进行了训练,并在许多自然语言任务中取得了良好的表现。相应的 embedding
包含来自原始句子的丰富语义信息。
第二类包括在特定任务或数据集上微调后的 sentence encoder
。例如,在 STS
基准数据集上训练好的 sentence encoder
应该能够比通用的 pre-trained sentence encoder
更好地评估不同问题之间的相似性。SentenceBert
已经表明,这些经过微调的编码器在句子聚类、paraphrase mining
、以及信息检索等任务上取得了很好的性能。
任务:情感分类、table-to-text generation
、问答。数据集和 data split
如下表所示。就 GPT-3 API
中的超参数而言,我们将温度设置为 0
。我们让 GPT-3
继续生成 tokens
,直到出现一个特殊的换行符 "\n"
。
温度为零使得
generation
结果的随机性更小。
用于检索的 Sentence Embedding
:为了检索语义相似的 training instances
,我们考虑如下两类的 sentence embedding
:
原始的 pre-trained RoBERTa-large
模型,记做
在任务相关的数据上微调的 RoBERTa-large
模型:
在 SNLI
和 MultiNLI
上微调的模型,记做
先在 SNLI
和 MultiNLI
上微调、然后再在 STS-B
上微调的模型,记做
值得注意的是,所有的 sentence encoder
都有相同的结构(RoBERTa-large
),唯一不同的是用于微调的具体数据集。
Sentiment Analysis
:对于情感分类,我们在 transfer setting
下选择 in-context examples
,其中一个数据集被视为训练集,评估是在另一个数据集上进行的。这种 transfer setting
是为了模拟现实世界中的情景,即我们想利用现有的 labeled dataset
来用于一个 unlabeled dataset
(一个类似的任务)。
具体来说,我们从 SST-2
训练集中选择 in-context examples
,要求 GPT-3
对 IMDB
测试集进行预测。为了探索在类似任务上微调好的 sentence encoder
是否会有利于 KATE
的性能,我们还采用了在 SST-2
训练集上微调好的 pre-trained RoBERTa-large
模型(被称为 IMDB
测试集的准确率来衡量的。由于增加更多的样本并不能进一步提高性能,所以 in-context examples
的数量被选为 3
。
Table-to-Text Generation
:给定一个 Wikipedia table
和一组 highlighted cells
,这项任务的重点是产生人类可读的文本描述。由于 ToTTo
的流行,我们利用它进行评估。我们使用 BLEU
和 PARENT
指标进行评价。ToTTo
代码库包含评估和预处理脚本。由于 GPT-3
的输入长度限制(目前 token
数量限制为 2048
个),我们增加了一个额外的预处理步骤,即删除 </cell>
和 </table>
等 closing
角括号以节省一些空间。in-context examples
的数量被设定为 2
。
Question Answering
:给定一个事实性的问题,问答任务要求模型生成正确的答案。根据先前的研究,我们使用 Exact Match: EM
得分来衡量 GPT-3
在开放领域的问答任务中的表现。EM
得分被定义为 predicted answers
与 ground-truth answer
(如果有多个 ground-truth answer
,则只需要匹配其中之一即可)完全相同的比例。匹配是在字符串规范化之后进行的,其中包括去除上下文(仅保留答案部分)和标点符号。我们在三个开放领域的 QA
基准上进行了实验: Natural Questions: NQ
、Web Questions: WQ
、Trivia Question Answering: TriviaQA
。
对于这项任务,我们为 NQ
和 WQ
挑选了最近的 64
个邻居作为 in-context examples
,为 TriviaQA
挑选了最近的 10
个邻居。对于 TriviaQA
,如果采用 64
个 in-context examples
,则超过了 2048
个 tokens
的限制。为了公平比较,我们将TriviaQA
的基线和 KATE
方法的 in-context examples
数量设定为 10
个。评估是在 NQ
和 WQ
的测试集、以及 TriviaQA
的验证集上进行的。
baseline
方法:
随机采样:对于每个测试句子,我们从训练集中随机选择 in-context examples
。我们在实验结果中称这种方法为 Random
。为了与 KATE
进行公平的比较,这个random baseline
中的 in-context examples
的数量与 KATE
相同,以确保公平的比较。在测试集上,random baseline
被重复五次,以获得平均分和相应的标准差。
k-Nearest Neighbor: kNN
:此外,为了研究 retrieval module
是否与GPT-3
的 few-shot learning
互补,我们进一步考虑 k-nearest neighbor baseline
。具体来说:
对于文本生成任务,与第一个 retrieved example
相关联的 target
predicted target
。
对于情感分析和问答任务,利用 top k retrieved examples
的 target
final prediction
是由 target
的多数投票决定的。如果出现平局的情况,我们取与测试句子最相似的例子的 target
作为预测。
为了确保公平的比较,我们在 pre-trained RoBERTa-large
模型的相同 embedding
空间下比较 baseline kNN
和 KATE
。这个基线被缩写为
情感分析:我们首先在情感分析任务上评估 KATE
。结果显示在下表中。可以看出:
相对于 random selection baseline
,KATE
始终产生更好的性能。
值得注意的是,由于采用的是同一组 retrieved in-context examples
,所以获得的结果没有方差。
对于 KATE
方法,当在 NLI
或 NLI+STSB
数据集上对 pre-trained sentence encoder
进行微调时,性能略有下降。由于IMDB
数据集和 NLI+STS-B
数据集的目标不同,这表明在不同的任务上进行微调会损害 KATE
的性能。
此外,sentence encoder
在 STS-B
数据集上被进一步微调了。 相比之下,KATE
的性能受益。
为了验证收益不仅仅来自于检索步骤,我们进一步比较了
值得注意的是,在 SST-2
数据集上对 RoBERTa-large
模型的 embedding
进行微调后,92.46
,低于
既然
的准确率高达 92.46
,是否意味着用一个优秀的pretrained sentence encoder
执行kNN
就足够了?
这些结果表明,GPT-3
模型对最终结果至关重要,而检索模块是对 GPT-3
的 few-shot
能力的补充。
Table-to-Text Generation
:我们利用 ToTTo
数据集来评估 KATE
的 table-to-text generation
任务。结果如下表所示。根据BLEU
和 PARENT
分数,KATE
方法比 random baseline
有了相当大的提高。
在更细的 scale
内,可以对 overlap
子集和 non-overlap
子集进行评估。overlap
验证子集与训练集共享大量的标题名称,而 non-overlap
验证子集则不共享任何标题名称。可以看出,KATE
方法改善了 overlap
子集和 non-overlap
子集的结果,这意味着检索模块对于如下的两种情形都有帮助:测试集遵循训练集的分布、测试集不遵循训练集的分布。
与情感分析类似,从 ToTTo
数据集和 NLI+STS-B
数据集的目标不同。从 KATE
的性能。对于 kNN baseline
,它的表现比 random selection
方法和 KATE
方法差得多,这再次表明检索过程和 GPT-3
协同工作从而取得更好的结果。
为了了解检索机制如何帮助 GPT-3
的预测,我们对 retrieved examples
进行了一个案例研究(见 Table 6
)。通过从训练集中检索相关的样本,KATE
提供了有用的关于 table
的详细信息(例如,得分、篮板、以及助攻的数量),从而给 GPT-3
以更准确的描述。另一方面,random selection
方法有幻觉的问题,所生成的序列包含了表格中不存在的信息(例如,"senior year"
和 "University of Texas"
)。
Questing Answering
:我们还在开放领域的问答任务上评估了 KATE
,如下表所示。对于问答任务,我们与一些 SOTA
的方法进行了比较,如 RAG
和 T5
。这两种方法都需要在特定的数据集上进行微调。KATE
方法再次提高了 GPT-3
在各种基准中的 few-shot prediction
的准确率。值得注意的是, fine-tuned transformer
模型作为更好的 sentence encoder
用于检索目的(与没有经过微调的 RoBERTa_large
模型相比)。
NLI
或 STS-B
数据集的微调有助于从问答数据集中检索出语义相似的问题。此外,在 NQ
和 TriviaQA
数据集上,对 STS-B
数据集的进一步微调提高了 KATE
的结果。我们还尝试减少 random
方法和 KATE
方法的 in-context examples
的数量,使其减少到 5
个,其中 KATE
的表现也优于 baseline
。因此,KATE
相对于 random baseline
的优势在少量和大量的 in-context examples
都是成立的。更多的细节可以在消融研究部分找到。
我们通过使用 top-1
最近邻来评估其他基线 64
个最近邻( TriviaQA
为 10
个最近邻)来确定答案(通过多数投票)。EM
的得分趋向于与检索 top-1
最近邻相似。这些 kNN baseline
结果再次表明,检索模块和 GPT-3
一起工作可以获得更好的性能。
为了研究为什么 retrieval examples
有帮助,我们进一步提出一个案例研究。具体来说,从 NQ
数据集中检索到的 in-context examples
如 Table 8
所示。对于第一个和第二个案例,random baseline
提供了错误的答案,因为 GPT-3
无法 recall
确切的细节。然而,KATE
选择的 in-context examples
包含正确的细节,这有利于 GPT-3
回答问题。对于第三个测试问题,random baseline
导致GPT-3
错误地将问题解释为要求一个 specific location
。与此相反,KATE
选择了相似的问题,问的是对象的起源。利用这些 specific location
,GPT-3
能够正确地解释和回答问题。
In-context Examples
数量:我们首先研究了 in-context examples
的数量对 KATE
性能的影响。具体来说,在 NQ
数据集上,我们选择了 5/10/20/35/64
个 in-context examples
,在不同的设置下,将 random baseline
和
如 Figure 3
左图所示,KATE
和 random baseline
都从利用更多的 in-context examples
中受益。然而,KATE
始终优于 random selection
方法,即使 in-context examples
数量少到 5
个。这个结果很有意思,因为在实践中,采用较少的 in-context examples
会使 GPT-3
的推理效率更高。
用于检索的训练集的大小:我们进一步研究训练集的大小如何影响 KATE
方法。在 NQ
数据集上,我们从原始训练集中创建了新的子集,其大小分别为 1k/2k/5k/10k/30k/70k
。从这些子集(而不是原始的训练集)中检索 in-context examples
。近邻的数量被设置为 64
。我们将 random selection
方法和 Figure 3
的右图。对于EM
分数也在增加。相比之下,random sampling baseline
的结果变化不大。
直观地说,随着训练集规模变大,KATE
更有可能检索到相关的 in-context examples
来帮助 GPT-3
正确地回答问题。正如我们之前在 Table 8
中显示的,retrieved in-context examples
可以为 GPT-3
提供关键的详细信息,从而帮助 GPT-3
更好地回答问题。
In-context Examples
的顺序:此外,我们还探讨了in-context examples
的顺序如何影响 KATE
的结果。如前所述,在标准设置下,retrieved in-context examples
都是有序的,其中当 NQ
数据集中 in-context examples
的顺序,并实验了三个不同的顺序。此外,我们还探索了逆序,即当
在这个特定的 NQ
数据集上,逆序表现得最好。一个可能的解释是,由于彼此相邻的 token
具有相似的 positional embedding
,将最相似的句子放在靠近测试样本的地方,可能有助于 GPT-3
利用相应信息。
然而,我们也在 WQ
和 TriviaQA
上做了实验,发现默认顺序比逆序的表现略好。因此,顺序的选择是取决于数据的。另外,可以观察到,NQ
结果之间的变化趋于相当小(与 random baseline
和 KATE
之间的差异相比),这表明 in-context examples
的顺序对 KATE
的性能没有重大影响。
论文:
《Making Pre-trained Language Models Better Few-shot Learners》
GPT-3
模型在 NLP
界掀起了狂澜,它在无数的语言理解任务上展示了令人震惊的 few-shot
能力。只需给出一个自然语言 prompt
和一些任务 demonstrations
,GPT-3
就能做出准确的预测,而无需更新其底层语言模型的任何权重。然而,虽然引人注目,GPT-3
由 175B
个参数组成,这使得它在大多数实际应用中具有挑战性。
在这项工作中,我们研究了一个更实际的场景,即我们只假设能够获得一个中等规模的语言模型,如 BERT
或 RoBERTa
,以及少量的样本(即 few-shot setting
),我们可以用它来微调语言模型的权重。这种 setting
很有吸引力,因为:
(1)
:这种模型可以在典型的 research hardware
上进行训练。
(2)
:few-shot settings
是现实的,因为通常既容易获得一些标注(如 32
个样本),又能有效地进行训练。
(3)
:参数更新通常会导致更好的性能。
受 GPT-3
研究结果的启发,我们提出了几个新的策略,将其 few-shot learning
能力扩展到我们的 setting
中,同时考虑分类问题、以及回归问题。
首先,我们遵循 prompt-based prediction
的路线。其中,prompt-based prediction
首先由 GPT
系列研发从而用于 zero-shot prediction
,最近由 PET
(PET
、PET-2
)研究从而用于微调。
prompt-based prediction
将下游任务视为一个 language modeling / masked language modeling
问题,其中模型针对给定的 prompt
(通过一个 task-specific
模板来定义)直接生成文本式的响应(见 Figure 1 (c)
)。然而,寻找正确的 prompts
是一门艺术:需要领域的专业知识、以及对语言模型内部工作原理的理解。即使投入了大量的精力,手动的 prompts
也可能是次优的。
我们通过引入 automatic prompt generation
来解决这个问题,包括一个 pruned brute-force search
来识别最佳的 working label words
、以及一个新的解码目标从而使用生成式 T5
模型自动生成模板。所有这些都只需要 few-shot
训练数据。这使我们能够低成本地获得有效的 prompts
,这些 prompts
媲美甚至超越于我们手动选择的 prompts
。
即,用语言模型来生成
prompt
的模板、verbalizer
。
第二,我们采用了将 demonstrations
作为 additional context
的想法。GPT-3
的朴素的 "in-context learning"
范式最多挑选了 32
个随机采样的样本,并将它们与 input
拼接起来。这种方法不能保证优先考虑 most informative demonstrations
,而且将不同类别的随机样本混合在一起会产生很长的上下文,很难从这个很长的上下文中学习。此外,可用demonstrations
的数量被模型的最大输入长度所限制。
我们开发了一个更精细的策略,对于每一个输入,我们每次从每个类别中随机采样一个样本,以创建多个 minimal
的 demonstration
集合。我们还设计了一种新的采样策略,将 inputs
与相似的样本来配对,从而为模型提供更加 discriminative
的 comparisons
。
即,更好地挑选
few-shot examples
。
我们提出了一个系统性的评估,用于在 8 single-sentence
和 7 sentence-pair
的 NLP
任务上分析 few-shot
性能。我们观察到,在给定少量训练样本的情况下:
(1)
: prompt-based fine-tuning
在很大程度上优于标准微调。
(2)
:我们的 automatic prompt search
方法媲美甚至超越了人工 prompts
。
(3)
:引入 demonstrations
对微调是有效的,并能提高 few-shot
性能。
这些简单而有效的方法加在一起,使我们在所评估的任务中获得了巨大的改善,与标准微调相比,我们获得了高达 30%
的绝对改善(平均改善为 11%
)。例如,我们发现 RoBERTa-large
模型在大多数二元句子分类任务中取得了约 90%
的准确率,而只依赖于 32
个训练样本。我们把我们的方法称为 better few-shot fine-tuning of language models: LM-BFF
:一种强大的、与任务无关的 few-shot learning
方法。
LM-BFF
是一种基于微调的方法,它需要微调模型从而适配给定的模版,模板是由另一个pretrained LM
来自动生成的。
相关工作:
language model prompting
:
GPT
系列推动了 prompt-based learning
的发展,我们遵循其许多核心概念。
最近的 PET
工作(PET
、PET-2
)也给了我们很大的启发,尽管他们主要关注的是 semi-supervised setting
,其中提供了大量的未标记样本。我们只使用少量的标记样本作为监督,并且还探索了 automatically generated prompts
和 fine-tuning with demonstrations
。此外,我们通过提供一个更加严格的框架从而偏离了他们的evaluation
,我们将在正文部分讨论。
最后,有大量关于 prompting
的工作用于从 pre-trained models
中挖掘知识。与这些工作不同,我们专注于利用 prompting
从而用于对下游任务进行微调。
automatic prompt search
:
PET
以及 《Automatically identifying words that can serve as labels for few-shot text classification》
探索了自动识别 label words
的方法。然而,与手工挑选的 label words
相比,这些结果都没有导致更好的性能。相比之下,我们的方法对模板和 label words
都进行了搜索,并且能够媲美甚至超越我们的人工 prompts
。
此外,还有其他一些尝试。然而这些方法要么是在有限的领域内操作,如寻找表达特定关系的模式(LPAQA
),要么需要大量的样本来进行 gradient-guided
搜索(AutoPrompt
、《Factual probing is [MASK]: Learning vs. learning to recall》
)。我们的方法旨在开发只依赖少量 annotations
的通用搜索方法。
语言模型的微调:最近的一些研究关注于更好的语言模型微调方法(《Universal language model fine-tuning for text classification》
、《Fine-tuning pretrained language models: Weight initializations, data orders, and early stopping》
、《Mixout: Effective regularization to finetune large-scale pretrained language models》
、《Revisiting few sample BERT fine-tuning》
)。这些工作主要集中在优化和正则化技术上,以稳定微调工作。在这里,我们使用了标准的优化技术,而主要是将我们的努力聚焦在更极端的 few-shot setting
中更好的 prompt-based fine-tuning
方面。我们预计,这些研究的结果在很大程度上是对我们的补充。
few-shot learning
:广义上讲,我们的 setting
也与 NLP
中的其他 few-shot learning
范式有关,包括:半监督学习(给出一组未标记样本)、元学习(给出了一组辅助任务)、few-shot learning
(给出了一个相关的中间任务)。我们偏离了这些 setting
,对可用的资源做了最小的假设:我们只假设有几个标注样本、以及一个 pre-trained language model
。我们的重点是了解在没有任何其他优势的情况下,我们能推动多远。
任务描述:在这项工作中,我们假设可以获得一个 pre-trained language model
label space
为 unseen
的测试集
对于模型选择和超参数调优,我们假设验证集 few-shot
训练集相同,即
在以下所有的实验中(除非另有说明),我们采取
Evaluation
数据集:来自 GLUE benchmark, SNLI, SST-5, MR, CR, MPQA, Subj, TREC
等数据集中的8
个 single-sentence
英语任务、7
个 sentence-pair
英语任务。具体细节如下表所示。
对于single-sentence
任务,目标是根据输入句子 positive
的。
对于 sentence-pair
任务,目标是给定一对输入句子
我们也可以交替使用 <S1>
或 (<S1>, <S2>)
来指称输入。请注意,我们主要使用 SST-2
和 SNLI
进行实验和模型开发,使其接近于真正的 few-shot setting
,至少对于我们评估的所有其他数据集而言。
评估方式:系统地评估 few-shot
的性能可能是很棘手的。众所周知,在小数据集上的微调可能存在不稳定性:在数据的新的 split
下,结果可能发生巨大变化。为了说明这一点,我们测量了 5
个不同的随机采样的 split
的平均性能。这个问题在 PET-2
中也有讨论:他们建议使用固定的训练集。我们认为,采样多个 splits
可以提供一个更鲁棒的性能度量,以及对方差的更好估计。
我们还观察到,超参数可以产生很大的差异,因此我们为每个 data sample
扫过多个超参数,并采取在该 data sample
在 setting
设置。超参数扫描空间为:学习率 batch size
1000
步,每隔 100
步在验证集上评估并选择最佳的 checkpoint
。
给定一个 masked language model
token sequence
hidden vectors
的序列 label space
correct label
的对数概率来训练 task-specific head
:
其中:
[CLS]
的隐向量 。
同样地,对于回归任务,我们可以引入 gold label
之间的 mean squared error: MSE
。在任何一种情况下,新参数的数量都是巨大的,例如,一个简单的二分类任务将为 RoBERTa-large
模型引入 2048
个新参数,这使得从少量的标注数据(例如,32
个样本)中学习具有挑战性。
解决这个问题的另一种方法是 prompt-based
的微调,其中 "auto-completing"
自然语言 prompts
的任务。例如,我们可以用包含输入 prompt
(例如,"No reason to watch it ."
)来制定一个二元情感分类任务:
并让 [MASK]
中填写"great"
(positive
)还是 "terrible"
(negative
)更合适。现在我们将这种方法正式用于分类任务和回归任务,并讨论 prompt selection
的重要性。
分类任务:令 task label space
到 masked language modeling: MLP
输入,其中 [MASK] token
,MLM
,并且预测类别
其中:[MASK]
的 hidden vector
,pre-softmax vector
,label
token
。
当有标记样本集合 pre-trained weights
pre-training
和 fine-tuning
之间的 gap
,使其在 few-shot
场景下更加有效。
虽然没有引入新的参数,但是这里需要对
进行微调,一共需要微调 个参数。但是,微调要优于从头开始训练,因为微调采用了一个更好的 initialization
(而不是随机初始化为零)。
回归任务:回归任务的配置和分类任务相同,但是回归任务将 label space
《Hyperspherical prototype networks》
的启发,我们将回归问题建模为两个点
其中:
然后我们定义
我们微调 KL
散度。
这里对回归任务做了太强的假设:
首先,回归任务是有界的。对于 “房价预测” 这种取值空间理论上无界的问题,无法解决。
其次,要求
。即,要么选择端点 、要么选择端点 。但是实际上有可能两个端点的概率都很低。
好的和坏的Manual prompts
:关键的挑战是构建模板 label words
prompt
PET
、PET-2
)都是手工制作模板和 label words
,这通常需要领域专业知识和反复试错。Table 1
总结了我们实验中为每个数据集选择的手工模板和 label words
。这些模板和 label words
是通过直觉和考虑以前文献中使用的格式来设计的。
为了更好地了解什么是好的模板或好的 label word
,我们对 SST-2
和 SNLI
进行了试点研究。Table 2
显示,不同的 prompts
会导致最终准确率的巨大差异。具体而言:
当模板固定时,label words
与 "语义类别" 的匹配度越高,最终准确率就越高(great/terrible > good/bad > cat/dog
)。在极端的情况下,如果我们交换似是而非的 label words
(例如,great/terrible
),我们会取得最差的整体表现。
此外,对于同一组 label words
,即使模板的一个小变化也会产生差异。例如,对于 SNLI
,如果我们把 [MASK]
放在最后,或者交换句子的顺序,我们观察到准确率的下降幅度超过 10%
。
上述证据清楚地强调了选择好的模板和好的 label words
的重要性。然而,搜索 prompts
是很难的,因为搜索空间可能非常大,特别是对模板而言。更糟糕的是,我们只有少量样本可以用来指导我们的搜索,这很容易造成过拟合。我们接下来将解决这些问题。
我们的目标是减少设计 prompts,
所需的人类参与,并找到比我们手动选择的更理想的设置。在这里,我们假设是一个分类任务,但回归的过程是类似的。
label words
的自动选择:我们首先研究如何在给定一个固定的模板 label word mapping
首先,一般来说是难以实现的,因为搜索空间是类别数量的指数级。
其次,容易过拟合,因为在给定少量标注样本的情况下,我们将倾向于发现虚假的相关性。
作为一个简单的解决方案,对于每一个类别 top k
的单词集合,这些单词构建了裁剪后的词表
其中:
物理含义:针对训练集中类别为
的所有样本,寻找它们最可能输出的 label words
。
为了进一步缩小搜索空间,我们并没有在 top k
,而是在裁剪后的空间中去检索。裁剪方式为:选择使得使 zero-shot accuracy
最大化的 tokens
,即 top n assignments
。 C.2
。然后,我们微调所有的 top n assignments
,并使用 rerank
以找到最佳的 assignment
。这种方法类似于PET
、PET-2
中的 automatic verbalizer search
方法,只是我们使用了一个简单得多的搜索过程(暴力搜索),并且还应用了 re-ranking
:我们发现re-ranking
对我们很有帮助。
rerank
即利用验证集来挑选最佳的assignment
。实验部分表明:
label words
的自动选择上,效果不佳。因此这个算法的意义何在?
模板的自动生成:接下来,我们研究如何从一组固定的 label words
T5
模型,一个大型的 pre-trained text-to-text Transformer
。T5
经过预训练,可以在其输入中补全 missing spans
(由 T5 mask tokens
取代,例如 <X>
或 <Y>
)。例如,给定输入 "Thank you <X> me to your party <Y> week"
,T5
被训练从而生成"<X> for inviting <Y> last <Z>"
,这意味着 "for inviting"
是 <X>
的替换,"last"
是 <Y>
的替换。这很适合于 prompt generation
:我们可以简单地从 T5
模型构建模板 tokens
数量。
这里利用语言模型来生成模板,因此这里依赖于预训练好的语言模型(如
T5
)。
给定一个输入样本 T5
模型的输入: