十、Calibrate Before Use[2021]

论文:《Calibrate Before Use: Improving Few-Shot Performance of Language Models》

  1. few-shot learning (用有限的样本来学习任务的能力)是智力的一个重要方面。最近的工作表明,大型神经语言模型可以在不进行微调的情况下进行 few-shot learning 。具体来说,当被提供以自然语言 prompt 描述的几个样本时,GPT-3 可以执行许多任务。例如,为了进行情感分析,人们可以将 GPT-3 以一个 prompt 为条件,如:

    其中前两行对应两个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% )变为接近 SOTA93%)。这种不稳定性意味着 GPT-3 的用户(这些用户通常是手动设计 prompts),不能期望持续获得良好的准确率。

    我们接下来分析一下造成这种不稳定性的原因。我们确定了语言模型的三个缺陷,这些缺陷导致它们在 few-shot learning 期间偏向于某些答案。具体而言,它们受到 majority label biasrecency bias 、以及 common token bias 的影响。

    • majority label biasrecency bias 导致模型会预测在 prompt 中经常出现、或接近 prompt 末尾的 training answer 。例如,一个以 negative training example 结束的 prompt 可能会偏向于 negative class

    • 另一方面,common token bias 导致模型更倾向于在模型的预训练数据中经常出现的答案,例如,它更倾向于 "United States" 而不是 "Saint Lucia" 。这对于目标任务来说可能是次优的。

    我们发现,这些 bias 通常会导致模型的输出分布发生偏移。因此,我们可以通过 "校准" 输出分布来抵消这些 bias 。具体来说,我们通过输入一个content-freedummy test input 来估计模型对某些答案的 bias 。例如,在上面的 prompt 中,如果我们用 "N/A" 字符串替换 "Amazing." ,模型就会预测出 62% Positive 。然后我们拟合 calibration parameters ,使 content-free input 对每个答案都有统一的分数。这个 contextual calibration 程序提供了一个良好的 calibration parameters setting ,而不需要额外的训练数据。

    将噪音输入的 prediction 分布作为校正参数,对 test inputprediction 分布进行校正。

    我们在一系列的任务上测试了 contextual calibration 的有效性。在不同的 prompt format 和样本的选择中,contextual calibration 一致地提高了 GPT-3GPT-2 的准确率(绝对提升高达 30.0% )(如下图所示)。它还使准确率在不同的 prompt 中更加稳定,从而减轻了对 prompt engineering 的需求。总的来说,contextual calibration 是一种简单的方法,它使语言模型成为更好的 few-shot learners :它使终端用户能够以相当少的努力获得更高的准确率。

  2. 相关工作:

    • Few-shot Learning with Language Model:最近的工作使用语言模型来解决 NLP 任务,例如,story cloze predictionknowledge base completion 、和 Winograd schema

      GPT-2GPT-3 表明,大型语言模型可以通过 in-context learning 从而以 few-shot 的方式解决无数的任务。我们的论文对他们的 setting 提供了一个简单的修改从而提高性能。要求语言模型补全 natural language prompt 也作为一种方法从而 "probe" language model ,例如,分析事实性的知识或常识性知识。我们的结果表明,这些 probing 方法可能低估了模型的准确率,我们建议未来的工作利用 contextual calibration 的优势。

    • NLPFew-shot Learning 的波动性:最近的工作表明,当使用 masked language model (如 BERT )进行 zero-shot learning 时,prompt 的格式会影响准确率。独立且同时进行的工作也表明,当在 few examples 上微调 masked language model 时,prompted examples的选择会影响结果。我们表明,类似的不稳定性发生在 left-to-right language modelin-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》)。

10.1 背景和实验设置

  1. 神经自回归语言模型将 tokens 的一个序列作为输入,并输出 next token的概率分布。大型神经语言模型可以使用 in-context learningzero-shot/few-shot 的方式执行任务(GPT-2, GPT-3 )。为此,一个自然语言的 prompt 被馈入模型。这个 prompt 包含三个部分:format 格式、一组prompted examplesprompted examples的排列顺序(ordering )。

    • Prompt Formatprompt format 是一个模板,由占位符(针对prompted examples和测试样本)和任务的自然语言描述(这个描述也可能不存在)组成。例如,前面章节中的 prompt format 是一个具有以下风格的模板: "Input:" input "Sentiment:" label。还有许多其他的格式,例如,我们可以把任务设定为问答任务。

    • Prompt Training Examplesprompted 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"

  2. 数据集和 prompt format :我们将数据集用于三个任务:文本分类、事实检索、信息提取。除非另有说明,我们对每个数据集都使用固定的 prompt format ,这些格式如下表所示。

    • 文本分类数据集:用于情感分析的 SST-2、用于问题分类的 TREC 、用于 textual entailmentCB、来自 SuperGLUERTE、用于话题分类的 AGNewsDBPedia

    • 事实检索数据集:LAMA 数据集。该数据集由 knowledge base 三元组 (subject, relation, object) 组成,这些三元组被放置在带有缺失 object 的模板中,例如 "Obama was born in" 。我们使用这些模板作为我们的 prompt ,并删除 missing answer 不在模板末端的样本( left-to-right 的语言模型只能解决 missing answer 在模版末尾的问题)。答案总是 single token ,我们报告了所有三元组的平均准确率。

    • 信息提取数据集:两个 slot filling 数据集,即 ATISMIT 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 作为我们的评估指标。

  3. 模型细节:我们在三种规模的 GPT-32.7B/13B/175B 参数)以及 GPT-21.5B 参数)上运行我们的实验。我们使用 OpenAIAPI 访问 GPT-3 。我们发布代码来复制我们的实验。

10.2 准确率在不同的 Prompts 之间差异很大

  1. 这里研究 GPT-3 的准确率如何随着我们对 prompt 的各个方面(prompted examples、排列组合、格式)的改变而改变。我们专注于数据集的一个子集,以简化我们的分析。在后续章节中,我们表明我们的发现在我们研究的所有数据集中都是成立的。

  2. GPT-3 的准确率在很大程度上取决于prompted examples选择和prompted examples排列组合。具体来说,我们使用一个固定的 prompt format 并选择不同的随机的prompted examples集合。对于每一组prompted examples,我们评估所有可能的排列组合的准确率。

    下图显示了 SST-24-shot, GPT-3 2.7B )的结果。令人惊讶的是,改变排列组合可能与选择何种prompted examples一样重要,甚至更重要。例如,改变prompted examples的排列组合可以使准确率从接近机会( 54.3% )上升到接近 SOTA93.4%)。关于对排列组合的敏感性的定性的示例,参考 Table 2。这种对样本顺序的高度重要性与标准机器学习形成了鲜明的对比,在标准机器学习中,训练期间的样本顺序通常是不太重要的。

  3. 这种方差在更多的数据和更大的模型中持续存在:在 prompt 中添加更多的prompted examples并不一定能减少准确率的方差。我们在下图中对三个不同的数据集扫描了不同数量的prompted examples(红色曲线)。即使我们使用 16prompted examples,方差仍然很高。此外,增加更多的prompted examples有时会伤害准确率(例如,DBPedia0-shot1-shot 的平均准确率从 36.0% 下降到 25.9% )。在使用较大的模型时,准确率的方差也会保持很高。

  4. GPT-3 的准确率高度依赖于 prompt format :接下来我们保持固定的prompted examples和固定的排列组合,但改变 prompt format 。我们专注于 SST-2 ,并手动设计了另外 14prompt format 。这些格式包括 question-answer 模板、对话式模板、类似网页的 prompts 、以及 label names 的变化(所有格式如 Table 7 所示)。下图显示了其中 10 种格式的准确率。我们发现,有些格式平均来说比其他格式要好。然而,所有的格式在不同的训练集中仍然存在着高方差。

10.3 是什么导致了高方差?

  1. 接下来,我们分析了为什么 GPT-3 的准确率在不同的prompted examples、排列组合、以及 prompt format 中会有所不同。具体而言,我们表明,方差的产生是因为语言模型偏向于输出以下答案:

    • (1):在 prompt format 中频繁出现的答案(majority label bias )。

    • (2):在 prompt 尾部出现的答案(recency bias )。

    • (3):在预训练数据中常见的答案(common token bias)。

  2. Majority Label Bias:我们发现 GPT-3 偏向于 prompt 中经常出现的答案。一个常见的情况是,当一个 text classification prompt 存在类别不平衡时,例如,在情感分类样本中更多的 Positive 样本。这表现在下图的 "unbalanced" 区域:当一个类别更高频时,GPT-3 2.7B 严重偏向于预测该类别。由于 SST-2 情感分类数据集是平衡的,这种 bias 会导致很大的准确率下降。 majority label bias 也解释了为什么我们经常观察到从 0-shot1-shot 的准确率下降:我们发现下降的原因是模型经常重复这个 one training example 的类别。

    majority label bias 也发生在 generation 任务中。在使用 GPT-3 2.7B4-shot LAMA 的验证集上,50.2% 的模型预测是四个训练答案之一的重复(ground truth 的重复率只有 24.7% )。总的来说,majority label bias 有助于解释为什么对prompted examples的不同选择会严重影响 GPT-3 的准确率:它改变了 model prediction 的分布。

    下图的含义:4-shot SST-2 中,选择不同的 class组合导致不同的 positive prediction 概率(纵轴)。

  3. Recency Bias:模型的 majority label bias 因其 recency bias 而加剧:倾向于重复那些出现在prompt 尾部的答案。Figure 4"balanced" 区域表明了这一点。例如,当两个Negative 样本出现在最后时(即,"PPNN" ),该模型将严重倾向于 Negative 类别。此外,recency bias 可以超过 majority label bias ,例如,"PPPN" 训练集导致近 90% 的预测是 Negative 的,尽管 34prompted examplesPositive 的。

    recency bias 也会影响 generation 任务。对于 4-shot LAMA ,更接近 prompt 尾部的答案更有可能被模型重复。具体来说,模型对第一个、第二个、第三个和第四个prompted examples的答案分别 "过度预测"了 8.5%8.3%14.3%16.1% 。总的来说,recency bias 有助于解释为什么prompted examples的排列顺序很重要:样本的排序严重影响了 model prediction 的分布。

  4. 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 预测其类别的概率之间存在适度的相关性(r=0.67)。总的来说,common token bias 有助于解释为什么 label names 的选择是重要的,以及为什么模型在罕见的答案上陷入困境。

  5. bias 对模型预测的影响:我们发现,上述三种 bias 的最终结果通常是模型输出分布的 simple shift 。例如,下图直观地显示了SST-2 sentiment prompt 的这种偏移。下图中使用的 prompt 和模型的固有 bias 导致模型对于 Positive 类别经常预测出高的信心。由于默认的 50% 阈值被用来进行预测,这导致了频繁的假阳性(false positive )。重要的是,请注意,如果我们能够最佳地设置分类阈值(在这个案例中,p(Positive)=0.68),那么分类器将是高度准确的(在验证集上是 94% )。

10.4 Contextual Calibration

  1. 到目前为止,我们已经表明,由于 prompt bias 和模型的固有 biasGPT-3 偏向于某些答案。这里,我们希望通过 "校准" 模型的输出概率来纠正这一点。调整输出概率的常见技术是应用仿射变换:

    (1)q^=softmax(Wp^+b)

    其中:W 为待学习的权重矩阵,b 为待学习的偏置向量,p^ 为原始的概率,q^ 为新的概率。

    • 对于分类任务,p^ 是与每个 label name 相关联的概率的集合,重新归一化为 1.0

    • 对于生成任务,p^ 是针对 first token 的在整个候选集合上的概率集合。

      注意,这里是 generationfirst token 上进行调整。

    在本文中,我们限制矩阵 W 为对角矩阵,即所谓的 vector scaling,从而防止参数在 p^size 上(对于生成任务,这个 size 大约是 50k )呈二次方的增长。

  2. zero-shot/few-shot setting 下,主要挑战是我们没有数据来学习 W,b 。因此,我们提出一个创新的data-free 程序来推断这些参数的一个 good setting 。关键的想法是,模型对某些答案的 bias 可以通过输入一个 content-free input来估计,比如 字符串 "N/A"。例如,考虑 two-shot prompt

    其中 "N/A" 作为 test input 。理想情况下,GPT-3 会对这个测试输入进行评分,即 50%Positive50%Negative 。然而,模型的 bias 导致模型把这个输入打分为 61.8%Positive 。请注意,这个错误是 contextual 的:对prompted examples、排列组合、prompt 格式的不同选择将导致对 content-free input 的不同预测。

    我们可以通过设置 Wb 来纠正这个错误,使 content-free inputclass scores 统一。我们首先得到 content-free inputp^,记做 p^cf。然后我们设置 W=diag(p^cf)1b为全零向量。为了进行 test prediction ,我们计算 Wp^test+0,并取其 argmax

    为什么选择这种 W ?现在假设 test input 就是 content-free input,那么 Wp^test+0=I ,为单位矩阵。这意味着将 content-free input 调整为均匀分布的输出。

  3. 实现细节:这个 contextual calibration 程序增加了微不足道的计算开销,只需几行代码就能实现(计算和保存 p^cf、调整输出概率)。对于 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" 作为输入。

    实现代码:https://www.github.com/tonyzhaozh/few-shot-learning

  4. 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 中所有任务的 baselinecontextual calibration 之间的标准差的差异。在大多数情况下,contextual calibration 大大减少了方差;在其余情况下,contextual calibration 并没有大大增加方差。

    • 减少了从 0-shot1-shotdrop:对于 baseline,有四个案例在从 0-shot1-shot 的过程中出现了准确率的下降(TREC, AGNews, DBpedia, SST-2 )。我们把这种下降归因于majority label biascontextual calibration 在四种情况中的三种情况下消除了这种下降。

    • 改善 GPT-2 :我们还测试了GPT-2 1.5B(参考 Table 4 )。我们发现,与 GPT-3 一样,GPT-2 的准确率在不同的 prompt 中也有很大的差异。这表明,我们观察到的 few-shot in-context learning 的方差是语言模型的一个普遍问题。其次,contextual calibrationGPT-2 来说是开箱即用的,它提高了大多数任务的平均准确率并减少了方差。

    • 提高不同格式的准确率:在我们的下一组实验中,我们使用固定的prompted examples集并改变 prompt format 。我们使用前面讨论的SST-215prompt format。我们还通过使用 AutoPrompt 生成的 original LAMA templates 的转述,为 LAMA 中的三个随机关系(P20, P159, P19 )各创建了 15prompt formatFigure 7SST-2 校准前后的结果, Figure 9LAMA 的结果。contextual calibration 提高了两个数据集的平均准确率和 worst-case 准确率,并降低了 SST-2 的方差。

  5. Contextual Calibration 消融研究:最后,我们对 contextual calibration 进行了两项分析。

    • 我们首先分析了 contextual calibration 在推断 W 的良好 setting 方面的有效性。为此,我们将其准确率与 "oracle calibration"方法进行比较,后者使用验证集来寻找最佳的对角矩阵 W 。我们在 AGNews 上评估了这个 oracle calibration ,发现 contextual calibration 与它惊人地接近(Figure 8)。

    • 我们还研究了 content-free input 的选择如何影响准确率。在 Table 3 中,我们显示了 SST-2AGNewscontent-free input 的不同选择的准确率。 content-free input 的选择很重要,然而,存在许多好的选择。

10.5 讨论

  1. 校准是否消除了对 Engineer Prompt 的需要?"prompt engineering" 背后的动机是,并非所有的 prompts 都能导致同样的准确率。因此,我们应该调整 prompt 的格式和样例,以达到最佳的性能。contextual calibration 并不能消除对 engineer prompts 的需要,然而,它确实减轻了这种需要:contextual calibration 使最佳 prompts 的准确率、平均prompts 的准确率、以及worst case prompts 的准确率更加相似(以及更高)。

  2. 你应该在 Few-shot Setting 中进行微调吗?我们使用一个固定的语言模型,没有微调。如前文所述,有许多理由不进行微调:它可以实现快速的原型设计;提供一个百分之百自然语言的接口;并且在为许多不同的任务 serving 时,在内存需求和系统复杂性方面更有效率。

    此外,就像没有 contextual calibrationin-context learning 一样,微调在 few-shot setting 中可能是不稳定的(PET)。然而,如果这些缺点是可以接受或可以避免的,那么在某些情况下,微调可以比 in-context learning 提高准确率。未来工作的一个有趣的方向是研究 contextual calibration 和微调之间的相互作用,例如,contextual calibration 是否缓解了微调的需要,或者反之亦然?

  3. 从大的方面来看,我们的结果启发了 NLPfew-shot learning 的两个未来研究方向。

    • 首先,在方法方面,我们表明,good few-shot learning 需要关注细节:诸如 calibration 等微小但重要的决定会极大地影响结果。这使得我们很难正确地开发和比较新的方法(如预训练方案或模型架构)。因此,我们希望使其他的 few-shot learning 方法更加稳健,也希望扩大我们的技术以涵盖更广泛的任务(例如,开放式 generation 的校准)。

    • 第二,在分析方面,我们的结果强调了了解 GPT-3prompt 中学到什么的必要性。该模型具有令人印象深刻的能力,可以通过更多的训练实例来提高。然而,我们表明该模型学习了一些表面的模式,如重复常见的答案。我们希望在未来的工作中能更好地理解和分析 in-context learningdynamics

十一、KATE [2021]

论文:《What Makes Good In-Context Examples for GPT-3?》

  1. 尽管 GPT-3 具有强大而通用的 in-context learning 能力,但它也有一些实际的挑战/模糊之处。GPT-3 利用从训练集中随机采样的 task-relevant 样本来构建上下文。在实践中,我们观察到,GPT-3 的性能往往会随着 in-context examples 的不同选择而波动。如下表所示,在不同的 in-context examples ,经验结果的差异可能是很大的。这些结果对样本高度敏感。我们的工作旨在仔细研究这个问题,以便更深入地了解如何更好地选择 in-context examples ,以释放 GPT-3few-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-3few-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 examplesbaseline 的表现。

    • 在与任务相关的数据集上对 retrieval model 进行微调,使 GPT-3 的经验结果更加强大。

    • GPT-3 的性能随着可供检索的样本数量的增加而提高。

  2. 相关工作:

    • Pre-trained Language Models:对于文本分类任务,引人注目的模型包括 BERT, RoBERTa, XLNet ;对于文本生成任务,值得注意的模型包括 BART, T5, mT5, XLM, GPT, GPT-2。这些模型可以通过微调来适应许多不同的任务。

      然而,GPT-3 可以适应许多下游任务,而不需要进行微调。只需给定几个 in-context examplesGPT-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 中检索最近的 k 个邻居来生成 next token

      • 另一项相关工作是 kNN 分类模型,他们在 fine-tuned classification model 的信心较低时使用 kNN 作为 backoff

      我们的工作与其他方法有两个关键区别:

      • 首先,其他方法使用最近的 k 个邻居来修改模型的 next token distribution 。然而,我们只使用最近的 k 个邻居来改变上下文。

      • 第二,其他方法可以访问模型的参数和 embedding ,而我们无法访问。相反,我们使用其他一些独立预训练好的模型来获得sentence embedding ,以检索最近的 k 个邻居。

11.1 方法

11.1.1 GPT-3 用于 In-Context Learning

  1. GPT-3in-context learning 场景可以被看作是一个条件文本生成问题。具体来说,生成目标 y 的概率是以上下文 C 为条件,其中 C 包括 k 个样本、以及源 x 。因此,对应于源 x 的预测 y 可以表示为:

    (2)pLM(yC,x)=t=1Tp(ytC,x,y<t)

    其中:LM 表示语言模型的参数;C={x1,y1,x2,y2,,xk,yk} 为上下文字符串。在 GPT-3 中,C 是通过将 ktraining 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 来缓解这个问题。

11.1.2 In-Context Examples 的影响

  1. 鉴于观察到GPT-3 的实证结果对所选择的 in-context examples 很敏感,我们从实证的角度来看看 in-context examples 的作用。以前的 retrieve-and-edit 文献通常会检索出在某些 embedding 空间中与 test source x 接近的邻居样本。这些邻居样本和 test source x 经常有语义上的或词汇上的相似性。这暗示了我们如何为 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 ,用于检索程序。

11.1.3 kNN-augmented In-Context Example Selection

  1. 基于上述发现,我们提出了 Knn-Augmented in-conText Example selection: KATE ,一种为 in-context learning 选择 good in-context examples 的策略。这个过程在下图中得到了可视化。

    具体来说,我们首先使用某个 sentence encoder 将训练集和测试集中的 sources 转换为 vector representations 。然后,对于每个test source x ,我们从训练集检索其最近的 k 个邻居 {x1,x2,,xk}(根据 sentence encoderembedding 空间中的距离)。给定一些预定义的相似性度量 d (如余弦相似性),邻居的排序方式是:当 i<j 时满足 d(xi,x)d(xj,x)

    即,距离从近到远的排序。

    之后,将 ksources 与它们相应的 label 拼接起来,形成上下文 C={x1,y1,x2,y2,,xk,yk},并进一步将其与 test source x 一起发送给 GPT-3 。算法图见 Alogorithm 1 。请注意,这里可以采用不同数量的 in-context examples ,我们在后面的章节中对其影响进行消融研究。

  2. 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、以及信息检索等任务上取得了很好的性能。

11.2 实验

  1. 任务:情感分类、table-to-text generation、问答。数据集和 data split 如下表所示。就 GPT-3 API 中的超参数而言,我们将温度设置为 0 。我们让 GPT-3 继续生成 tokens ,直到出现一个特殊的换行符 "\n"

    温度为零使得 generation 结果的随机性更小。

  2. 用于检索的 Sentence Embedding:为了检索语义相似的 training instances,我们考虑如下两类的 sentence embedding

    • 原始的 pre-trained RoBERTa-large 模型,记做 KATEroberta

    • 在任务相关的数据上微调的 RoBERTa-large 模型:

      • SNLIMultiNLI 上微调的模型,记做 KATEnli

      • 先在 SNLIMultiNLI 上微调、然后再在 STS-B 上微调的模型,记做 KATEnli+sts-b

    值得注意的是,所有的 sentence encoder 都有相同的结构(RoBERTa-large ),唯一不同的是用于微调的具体数据集。KATEroberta 使用的是欧氏距离,而 KATEnliKATEnli+sts-b 使用的是余弦相似度。

    • Sentiment Analysis:对于情感分类,我们在 transfer setting 下选择 in-context examples ,其中一个数据集被视为训练集,评估是在另一个数据集上进行的。这种 transfer setting 是为了模拟现实世界中的情景,即我们想利用现有的 labeled dataset 来用于一个 unlabeled dataset (一个类似的任务)。

      具体来说,我们从 SST-2 训练集中选择 in-context examples,要求 GPT-3IMDB 测试集进行预测。为了探索在类似任务上微调好的 sentence encoder 是否会有利于 KATE 的性能,我们还采用了在 SST-2 训练集上微调好的 pre-trained RoBERTa-large 模型(被称为 KATEsst-2)。性能是由整个 IMDB 测试集的准确率来衡量的。由于增加更多的样本并不能进一步提高性能,所以 in-context examples 的数量被选为 3

    • Table-to-Text Generation:给定一个 Wikipedia table 和一组 highlighted cells ,这项任务的重点是产生人类可读的文本描述。由于 ToTTo 的流行,我们利用它进行评估。我们使用 BLEUPARENT 指标进行评价。ToTTo 代码库包含评估和预处理脚本。由于 GPT-3 的输入长度限制(目前 token 数量限制为 2048 个),我们增加了一个额外的预处理步骤,即删除 </cell></table>closing 角括号以节省一些空间。in-context examples 的数量被设定为 2

    • Question Answering:给定一个事实性的问题,问答任务要求模型生成正确的答案。根据先前的研究,我们使用 Exact Match: EM 得分来衡量 GPT-3 在开放领域的问答任务中的表现。EM 得分被定义为 predicted answersground-truth answer(如果有多个 ground-truth answer,则只需要匹配其中之一即可)完全相同的比例。匹配是在字符串规范化之后进行的,其中包括去除上下文(仅保留答案部分)和标点符号。我们在三个开放领域的 QA 基准上进行了实验: Natural Questions: NQWeb Questions: WQTrivia Question Answering: TriviaQA

      对于这项任务,我们为 NQWQ 挑选了最近的 64 个邻居作为 in-context examples ,为 TriviaQA 挑选了最近的 10 个邻居。对于 TriviaQA ,如果采用 64in-context examples ,则超过了 2048tokens 的限制。为了公平比较,我们将TriviaQA 的基线和 KATE 方法的 in-context examples 数量设定为 10 个。评估是在 NQWQ 的测试集、以及 TriviaQA 的验证集上进行的。

  3. baseline 方法:

    • 随机采样:对于每个测试句子,我们从训练集中随机选择 in-context examples 。我们在实验结果中称这种方法为 Random 。为了与 KATE 进行公平的比较,这个random baseline 中的 in-context examples的数量与 KATE 相同,以确保公平的比较。在测试集上,random baseline 被重复五次,以获得平均分和相应的标准差。

    • k-Nearest Neighbor: kNN:此外,为了研究 retrieval module 是否与GPT-3few-shot learning 互补,我们进一步考虑 k-nearest neighbor baseline。具体来说:

      • 对于文本生成任务,与第一个 retrieved example 相关联的 target y1 被认为是测试样本的 predicted target

      • 对于情感分析和问答任务,利用 top k retrieved examplestarget {y1,,yk},其中 final prediction 是由 k target 的多数投票决定的。如果出现平局的情况,我们取与测试句子最相似的例子的 target 作为预测。

      为了确保公平的比较,我们在 pre-trained RoBERTa-large 模型的相同 embedding 空间下比较 baseline kNNKATE 。这个基线被缩写为 kNNroberta

11.2.1 实验结果

  1. 情感分析:我们首先在情感分析任务上评估 KATE 。结果显示在下表中。可以看出:

    • 相对于 random selection baselineKATE 始终产生更好的性能。

    • 值得注意的是,由于采用的是同一组 retrieved in-context examples ,所以获得的结果没有方差。

    • 对于 KATE 方法,当在 NLINLI+STSB 数据集上对 pre-trained sentence encoder 进行微调时,性能略有下降。由于IMDB 数据集和 NLI+STS-B 数据集的目标不同,这表明在不同的任务上进行微调会损害 KATE 的性能。

      此外,KATEnli+sts-b 的表现比 KATEnli 差,因为 sentence encoderSTS-B 数据集上被进一步微调了。 相比之下,KATEsst-2 获得了最好的准确率,表明在相似的任务上进行微调可以使 KATE 的性能受益。

    • 为了验证收益不仅仅来自于检索步骤,我们进一步比较了 KATErobertakNNroberta 。结果发现,kNNroberta 方法的性能类似于随机猜测。当检索一个邻居或三个邻居时,这一观察结果是一致的。

      值得注意的是,在 SST-2 数据集上对 RoBERTa-large 模型的 embedding 进行微调后,kNNsst-2 的准确率为 92.46 ,低于 KATEsst-2 获得的准确率。

      既然 kNNsst-2 的准确率高达 92.46,是否意味着用一个优秀的 pretrained sentence encoder 执行 kNN 就足够了?

    这些结果表明,GPT-3 模型对最终结果至关重要,而检索模块是对 GPT-3few-shot 能力的补充。

  2. Table-to-Text Generation:我们利用 ToTTo 数据集来评估 KATEtable-to-text generation 任务。结果如下表所示。根据BLEUPARENT 分数,KATE 方法比 random baseline 有了相当大的提高。

    在更细的 scale 内,可以对 overlap子集和 non-overlap 子集进行评估。overlap 验证子集与训练集共享大量的标题名称,而 non-overlap 验证子集则不共享任何标题名称。可以看出,KATE 方法改善了 overlap 子集和 non-overlap 子集的结果,这意味着检索模块对于如下的两种情形都有帮助:测试集遵循训练集的分布、测试集不遵循训练集的分布。

    与情感分析类似,从 KATErobertaKATEnliKATEnli+sts-b ,性能略有下降。这是由于 ToTTo 数据集和 NLI+STS-B 数据集的目标不同。从 KATEnliKATEnli+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" )。

  3. Questing Answering:我们还在开放领域的问答任务上评估了 KATE ,如下表所示。对于问答任务,我们与一些 SOTA 的方法进行了比较,如 RAGT5 。这两种方法都需要在特定的数据集上进行微调。KATE 方法再次提高了 GPT-3 在各种基准中的 few-shot prediction 的准确率。值得注意的是, fine-tuned transformer 模型作为更好的 sentence encoder 用于检索目的(与没有经过微调的 RoBERTa_large 模型相比)。

    KATEnliKATEnli+sts-bKATEroberta 的基础上进行了改进,因为对 NLISTS-B 数据集的微调有助于从问答数据集中检索出语义相似的问题。此外,在 NQTriviaQA 数据集上,对 STS-B 数据集的进一步微调提高了 KATE 的结果。我们还尝试减少 random 方法和 KATE 方法的 in-context examples 的数量,使其减少到 5 个,其中 KATE 的表现也优于 baseline 。因此,KATE 相对于 random baseline 的优势在少量和大量的 in-context examples 都是成立的。更多的细节可以在消融研究部分找到。

    我们通过使用 top-1 最近邻来评估其他基线 kNNroberta 。我们还探索使用 64 个最近邻( TriviaQA10 个最近邻)来确定答案(通过多数投票)。EM 的得分趋向于与检索 top-1 最近邻相似。这些 kNN baseline 结果再次表明,检索模块和 GPT-3 一起工作可以获得更好的性能。

    为了研究为什么 retrieval examples 有帮助,我们进一步提出一个案例研究。具体来说,从 NQ 数据集中检索到的 in-context examplesTable 8 所示。对于第一个和第二个案例,random baseline 提供了错误的答案,因为 GPT-3 无法 recall 确切的细节。然而,KATE 选择的 in-context examples 包含正确的细节,这有利于 GPT-3 回答问题。对于第三个测试问题,random baseline 导致GPT-3 错误地将问题解释为要求一个 specific location 。与此相反,KATE 选择了相似的问题,问的是对象的起源。利用这些 specific locationGPT-3 能够正确地解释和回答问题。

11.2.2 分析和消融研究

  1. In-context Examples 数量:我们首先研究了 in-context examples 的数量对 KATE 性能的影响。具体来说,在 NQ 数据集上,我们选择了 5/10/20/35/64in-context examples ,在不同的设置下,将 KATEnli+sts-brandom baselineKATEroberta 进行比较。

    Figure 3 左图所示,KATErandom baseline 都从利用更多的 in-context examples 中受益。然而,KATE 始终优于 random selection 方法,即使 in-context examples 数量少到 5 个。这个结果很有意思,因为在实践中,采用较少的 in-context examples 会使 GPT-3 的推理效率更高。

  2. 用于检索的训练集的大小:我们进一步研究训练集的大小如何影响 KATE 方法。在 NQ 数据集上,我们从原始训练集中创建了新的子集,其大小分别为 1k/2k/5k/10k/30k/70k 。从这些子集(而不是原始的训练集)中检索 in-context examples 。近邻的数量被设置为 64 。我们将 KATEnli+sts-brandom selection 方法和 KATEroberta 进行比较,结果见 Figure 3 的右图。对于KATErobertaKATEnli+sts-b 来说,随着用于检索的训练集大小的增加,EM 分数也在增加。相比之下,random sampling baseline 的结果变化不大。

    直观地说,随着训练集规模变大,KATE更有可能检索到相关的 in-context examples 来帮助 GPT-3 正确地回答问题。正如我们之前在 Table 8 中显示的,retrieved in-context examples 可以为 GPT-3 提供关键的详细信息,从而帮助 GPT-3 更好地回答问题。

  3. In-context Examples 的顺序:此外,我们还探讨了in-context examples 的顺序如何影响 KATE 的结果。如前所述,在标准设置下,retrieved in-context examples 都是有序的,其中当 i<j 时满足 d(xi,x)d(xj,x)。这里,我们随机地改变了 NQ 数据集中 KATEnli+sts-b 方法的 in-context examples 的顺序,并实验了三个不同的顺序。此外,我们还探索了逆序,即当 i>j 时满足 d(xi,x)d(xj,x),结果如下表所示。

    在这个特定的 NQ 数据集上,逆序表现得最好。一个可能的解释是,由于彼此相邻的 token 具有相似的 positional embedding ,将最相似的句子放在靠近测试样本的地方,可能有助于 GPT-3 利用相应信息。

    然而,我们也在 WQTriviaQA 上做了实验,发现默认顺序比逆序的表现略好。因此,顺序的选择是取决于数据的。另外,可以观察到,NQ 结果之间的变化趋于相当小(与 random baselineKATE 之间的差异相比),这表明 in-context examples 的顺序对 KATE 的性能没有重大影响。

十二、LM-BFF[2021]

论文:《Making Pre-trained Language Models Better Few-shot Learners》

  1. GPT-3 模型在 NLP 界掀起了狂澜,它在无数的语言理解任务上展示了令人震惊的 few-shot 能力。只需给出一个自然语言 prompt 和一些任务 demonstrationsGPT-3 就能做出准确的预测,而无需更新其底层语言模型的任何权重。然而,虽然引人注目,GPT-3175B 个参数组成,这使得它在大多数实际应用中具有挑战性。

    在这项工作中,我们研究了一个更实际的场景,即我们只假设能够获得一个中等规模的语言模型,如 BERTRoBERTa ,以及少量的样本(即 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 ,最近由 PETPETPET-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 的数量被模型的最大输入长度所限制。

      我们开发了一个更精细的策略,对于每一个输入,我们每次从每个类别中随机采样一个样本,以创建多个 minimaldemonstration 集合。我们还设计了一种新的采样策略,将 inputs 与相似的样本来配对,从而为模型提供更加 discriminativecomparisons

      即,更好地挑选 few-shot examples

    我们提出了一个系统性的评估,用于在 8 single-sentence7 sentence-pairNLP 任务上分析 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 来自动生成的。

  2. 相关工作:

    • language model prompting

      • GPT 系列推动了 prompt-based learning 的发展,我们遵循其许多核心概念。

      • 最近的 PET 工作(PETPET-2)也给了我们很大的启发,尽管他们主要关注的是 semi-supervised setting ,其中提供了大量的未标记样本。我们只使用少量的标记样本作为监督,并且还探索了 automatically generated promptsfine-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 。我们的重点是了解在没有任何其他优势的情况下,我们能推动多远。

12.1 Problem Setup

  1. 任务描述:在这项工作中,我们假设可以获得一个 pre-trained language model L ,我们希望在一个任务 D 上对 L 进行微调,其中任务 Dlabel spaceY 。对于这个任务,我们只假设任务的训练集 Dtrain 中每个类别有 K 个训练样本。这样,训练样本总数为 Ktot=K×|Y| ,训练集为Dtrarin={(xini,yi)}i=1Ktot。然后,我们的目标是开发与任务无关的学习策略,这些策略可以很好地泛化到 unseen 的测试集 (xintest,ytest)Dtest

    对于模型选择和超参数调优,我们假设验证集 Ddev 的大小与 few-shot 训练集相同,即 |Ddev|=|Dtrain|。这个区别是很重要的:使用较大的验证集会带来显著的优势(如下表所示),并颠覆了我们的最初目标:从有限数据中学习。

    在以下所有的实验中(除非另有说明),我们采取 L=RoBERTa-largeK=16

  2. Evaluation 数据集:来自 GLUE benchmark, SNLI, SST-5, MR, CR, MPQA, Subj, TREC 等数据集中的8single-sentence 英语任务、7sentence-pair 英语任务。具体细节如下表所示。

    • 对于single-sentence 任务,目标是根据输入句子 xin=x1 进行预测,例如电影评论是否是 positive 的。

    • 对于 sentence-pair 任务,目标是给定一对输入句子 xin=(x1,x2) 并预测它们之间的关系。

    我们也可以交替使用 <S1>(<S1>, <S2>) 来指称输入。请注意,我们主要使用 SST-2SNLI 进行实验和模型开发,使其接近于真正的 few-shot setting ,至少对于我们评估的所有其他数据集而言。

  3. 评估方式:系统地评估 few-shot 的性能可能是很棘手的。众所周知,在小数据集上的微调可能存在不稳定性:在数据的新的 split 下,结果可能发生巨大变化。为了说明这一点,我们测量了 5 个不同的随机采样的 DtrainDdev split 的平均性能。这个问题在 PET-2 中也有讨论:他们建议使用固定的训练集。我们认为,采样多个 splits 可以提供一个更鲁棒的性能度量,以及对方差的更好估计。

    我们还观察到,超参数可以产生很大的差异,因此我们为每个 data sample 扫过多个超参数,并采取在该 data sampleDdev 上获得最佳性能的 setting 设置。超参数扫描空间为:学习率 {105,2×105,5×105}batch size {2,4,8};采用早停机制;训练 1000 步,每隔 100 步在验证集上评估并选择最佳的 checkpoint

12.2 Prompt-based 微调

  1. 给定一个 masked language model L ,我们首先将输入 xin 转换为一个 token sequence x~,然后语言模型 Lx~ 映射为 hidden vectors 的序列 {hkRd}。在标准的微调过程中,我们通常取 x~single=[CLS]x1[SEP]x~pair=[CLS]x1[SEP]x2[SEP] 。对于具有 label space Y 的下游分类任务,我们通过最大化 correct label 的对数概率来训练 task-specific head

    (3)softmax(Woh[CLS])

    其中:

    • h[CLS]Rd[CLS] 的隐向量 。

    • WoR|Y|×d 为待学习的权重矩阵。

    同样地,对于回归任务,我们可以引入 woRd ,并优 woh[CLS]gold label 之间的 mean squared error: MSE 。在任何一种情况下,新参数的数量都是巨大的,例如,一个简单的二分类任务将为 RoBERTa-large 模型引入 2048 个新参数,这使得从少量的标注数据(例如,32 个样本)中学习具有挑战性。

    解决这个问题的另一种方法是 prompt-based 的微调,其中 L 直接被设置为 "auto-completing" 自然语言 prompts 的任务。例如,我们可以用包含输入 x1prompt (例如,"No reason to watch it ." )来制定一个二元情感分类任务:

    (4)xprompt=[CLS] x1 It was [MASK]. [SEP]

    并让 L 决定在 [MASK] 中填写"great"positive )还是 "terrible"negative )更合适。现在我们将这种方法正式用于分类任务和回归任务,并讨论 prompt selection 的重要性。

  2. 分类任务:令 M:YVtask label spaceL 的词表的映射。对于每个 xin ,令 xprompt=T(xin) 为一个 masked language modeling: MLP 输入,其中 xprompt 包含一个 [MASK] tokenT 为模板函数。通过这种方法,我们将我们的分类任务视为一个 MLM,并且预测类别 yY 的概率为:

    (5)p(yxin)=p([MASK]=M(y)xprompt)=exp(wM(y)h[MASK])yYexp(wM(y)h[MASK])

    其中:h[MASK]Rd[MASK]hidden vectorwvRdvVpre-softmax vectorMlabel y 映射到单个 token

    当有标记样本集合 {(xin,y)} 时,可以对 L 进行微调从而使交叉熵损失最小。值得注意的是,这种方法重用了 pre-trained weights wv 而没有引入任何新的参数。它还减少了 pre-trainingfine-tuning 之间的 gap ,使其在 few-shot 场景下更加有效。

    虽然没有引入新的参数,但是这里需要对 wv 进行微调,一共需要微调 |Y|×d 个参数。但是,微调要优于从头开始训练,因为微调采用了一个更好的 initialization (而不是随机初始化为零)。

  3. 回归任务:回归任务的配置和分类任务相同,但是回归任务将 label space Y 视为一个有界的区间 [vl,vu] 。受到 《Hyperspherical prototype networks》 的启发,我们将回归问题建模为两个点 ylyu 之间的插值,其中这两个点的取值分别为 vl,vu 。例如,我们可以把之前的情感分析任务表述为区间 [0,1] 的回归问题。这样一来,我们可以把 y 表达为一个混合模型:

    (6)y=vl×p(ylxin)+vu×p(yuxin)

    其中:p(yuxin) 为取值为 yu 的条件概率;p(ylxin)=1p(yuxin)

    然后我们定义 M:{yl,yu}V ,并且模型 p(yuxin) 为:

    (7)p(yuxin)=p([MASK]=M(yu)xprompt)=exp(wM(yu)h[MASK])y{yl,yu}exp(wM(y)h[MASK])

    我们微调 L 从而最小化 p(yuxin)yvlvuvl 之间的 KL 散度。

    这里对回归任务做了太强的假设:

    • 首先,回归任务是有界的。对于 “房价预测” 这种取值空间理论上无界的问题,无法解决。

    • 其次,要求 p(ylxin)+p(yuxin)=1 。即,要么选择端点 yl 、要么选择端点 yu 。但是实际上有可能两个端点的概率都很低。

  4. 好的和坏的Manual prompts :关键的挑战是构建模板 Tlabel words M(Y) ,我们把这两者合称为 prompt P 。以前的工作(PETPET-2)都是手工制作模板和 label words ,这通常需要领域专业知识和反复试错。Table 1 总结了我们实验中为每个数据集选择的手工模板和 label words 。这些模板和 label words 是通过直觉和考虑以前文献中使用的格式来设计的。

    为了更好地了解什么是好的模板或好的 label word ,我们对 SST-2SNLI 进行了试点研究。Table 2 显示,不同的 prompts 会导致最终准确率的巨大差异。具体而言:

    • 当模板固定时,label words 与 "语义类别" 的匹配度越高,最终准确率就越高(great/terrible > good/bad > cat/dog )。在极端的情况下,如果我们交换似是而非的 label words (例如,great/terrible ),我们会取得最差的整体表现。

    • 此外,对于同一组 label words ,即使模板的一个小变化也会产生差异。例如,对于 SNLI ,如果我们把 [MASK] 放在最后,或者交换句子的顺序,我们观察到准确率的下降幅度超过 10%

    上述证据清楚地强调了选择好的模板和好的 label words 的重要性。然而,搜索 prompts 是很难的,因为搜索空间可能非常大,特别是对模板而言。更糟糕的是,我们只有少量样本可以用来指导我们的搜索,这很容易造成过拟合。我们接下来将解决这些问题。

12.3 Automatic Prompt Generation

  1. 我们的目标是减少设计 prompts, 所需的人类参与,并找到比我们手动选择的更理想的设置。在这里,我们假设是一个分类任务,但回归的过程是类似的。

  2. label words 的自动选择:我们首先研究如何在给定一个固定的模板 T 的情况下,构建一个 label word mapping M ,使其在微调后对 Ddev 的准确率最大化。然而,直接搜索所有可能的分配存在两个问题:

    • 首先,一般来说是难以实现的,因为搜索空间是类别数量的指数级。

    • 其次,容易过拟合,因为在给定少量标注样本的情况下,我们将倾向于发现虚假的相关性。

    作为一个简单的解决方案,对于每一个类别 cY ,我们使用初始化的 L 从而基于单词的条件概率来获得 top k 的单词集合,这些单词构建了裁剪后的词表 VcV。换句话说,令 DtraincDtrain 为所有的类别为 c 的样本的子集,我们选择 Vc 为:

    (8)TopkvV{xinDtrainclogPL([MASK] = vT(xin))}

    其中:PLL 的输出概率分布。

    物理含义:针对训练集中类别为 c 的所有样本,寻找它们最可能输出的 label words

    为了进一步缩小搜索空间,我们并没有在 V 中检索 top k ,而是在裁剪后的空间中去检索。裁剪方式为:选择使得使 Dtrainzero-shot accuracy 最大化的 ntokens ,即 top n assignmentsnk 都是超参数,见论文附录 C.2 。然后,我们微调所有的 top n assignments ,并使用 Ddev 进行 rerank 以找到最佳的 assignment 。这种方法类似于PETPET-2 中的 automatic verbalizer search 方法,只是我们使用了一个简单得多的搜索过程(暴力搜索),并且还应用了 re-ranking :我们发现re-ranking 对我们很有帮助。

    rerank 即利用验证集来挑选最佳的 assignment

    实验部分表明:label words 的自动选择上,效果不佳。因此这个算法的意义何在?

  3. 模板的自动生成:接下来,我们研究如何从一组固定的 label words M(Y) 中自动生成一组多样化的模板 {T}。为了解决这个具有挑战性的问题,我们建议使用 T5 模型,一个大型的 pre-trained text-to-text TransformerT5 经过预训练,可以在其输入中补全 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 :我们可以简单地从 Dtrain 中获取输入句子,让 T5 模型构建模板 T ,而不需要为其指定预定的 tokens 数量。

    这里利用语言模型来生成模板,因此这里依赖于预训练好的语言模型(如 T5 )。

    给定一个输入样本 (xin,y)Dtrain ,我们考虑以下简单的转换,记做 Tg(xin,y) ,用于制定 T5模型的输入:

    (9)<S1>⟶<X>M(y)<Y><S1><S1>⟶<S1><X>M(y)<Y><S1><S2>⟶<S1><X>M(y)<Y><S2>