十七、FLAN[2021]

论文:《Finetuned Language Models Are Zero-Shot Learners》

  1. 大型语言模型,例如 GPT-3 ,已经显示出在 few-shot learning 方面表现出色。然而,它们在 zero-shot learning 方面并不成功。例如,GPT-3 在阅读理解、问答、和自然语言推理等任务的 zero-shot 表现要比 few-shot 表现差得多。其中一个潜在原因是,在没有 few-shot 示例的情况下,模型很难在与预训练数据格式不相似的 prompts 上表现良好。

    在本文中,我们探索了一种简单的方法来提高大型语言模型的 zero-shot 性能,从而扩大它们的受众范围。我们利用一种直觉,即自然语言处理任务可以通过自然语言指令来描述,例如, “这部电影评论的情感是积极的还是消极的?”,或者 “将 ‘Hello’ 翻译成文”。我们采用了一个包含 137B 参数的 pretrained 语言模型,并进行指令微调 instruction tuning :在超过 60NLP 数据集的混合样本上对模型进行微调,这些数据集通过自然语言指令来表达。我们将得到的模型称为 FLAN ,即 Finetuned Language Net

    为了评估 FLAN 在未见过的任务上的 zero-shot 性能,我们根据任务类型将 NLP 数据集分组成 clusters ,并保留每个 cluster 用于评估,同时在其它所有 clusters 上对 FLAN 进行指令微调。例如,如 Figure 1 所示,为了评估 FLAN 在执行自然语言推理任务的能力,我们在其他一系列 NLP 任务上(如,常识推理、翻译、情感分析)上对模型进行指令微调。由于这个设置确保 FLAN 在指令微调中没有见过任何自然语言推理任务,我们随后评估其在 zero-shot 自然语言推理上的能力。

    我们的评估结果显示,FLAN 显著提高了 base 137B-parameter modelzero-shot 性能。FLANzero-shot性能在我们评估的25 个数据集中有 20 个优于拥有 175B 参数的 GPT-3zero-shot性能,甚至在 ANLIRTEBoolQAI2-ARCOpenbookQAStoryCloze 等任务上远远超过了 GPT-3few-shot 表现。在消融研究中,我们发现在指令微调中增加 task clusters 的数量可以提高对 unseen 任务的性能,并且指令微调的好处只在足够大的模型规模下显现出来。

    指令微调的效果并不总是好的,如果下游任务和语言建模预训练目标相同时,指令微调是无效的、甚至是降低性能的。

    指令微调是一种简单的方法,如 Figure 2 所示,它结合了 pretrain–finetuneprompting 范式的吸引人的特点,通过使用 finetuning 的监督来改善语言模型对推理时文本交互的响应。我们的实证结果展示了语言模型通过纯粹的指令来执行任务的有希望的能力。用于加载用于 FLAN 的指令微调数据集的源代码可在 https://github.com/google-research/flan 公开获取。

  2. 相关工作:我们的工作涉及多个广泛的研究领域,包括 zero-shot learningpromptingmulti-task learning 以及用于NLP applications 的语言模型。我们在一个扩展的相关工作部分(附录 D )中描述了这些广泛领域的先前工作,这里我们描述了两个范围较窄、与我们的工作关系最密切的子领域。

    • 我们要求模型对指令作出响应的方式类似于 QA-based task ,其目的是通过将 NLP 任务视为上下文中的问答来统一这些任务。尽管这些方法与我们的方法非常相似,但它们主要关注的是multi-task learning 而不是 zero-shot learning ,并且正如 《Pre-train, prompt, and predict: A systematic survey of prompting methods in natural language processing》所指出的,它们通常不是基于 pretrained 语言模型中的现有知识的动机。

      此外,从模型规模和任务范围两方面来看,我们的工作超过了 《Description based text classification with reinforcement learning》《Meta-tuning language models to answer prompts better》 等最近的研究。

    • 语言模型的成功导致了对模型遵循指令能力的初步研究。

      • 最近, 《Natural Instructions: Benchmarking generalization to new tasks from natural language instructions》few-shot 示例对具有 140M 参数的 BART 进行了指令微调,并在 unseen 任务上评估其 few-shot 能力,这与我们的 few-shot instruction tuning 结果类似。这一有希望的结果(以及 《Crossfit: A few-shot learning challenge for cross-task generalization in NLP》 的一个结果,虽然没有像我们一样强调指令),表明在一组任务上进行微调可以提高对 unseen 任务的 few-shot 性能,即使在较小的模型规模下也是如此。

      • T0 以与我们类似的设置对 T5 进行微调,发现 zero-shot learning 在具有 11B 参数的模型中可以得到改善。

      • 在与我们模型规模类似的情况下,OpenAIInstructGPT 模型通过微调和强化学习进行训练,以产生更受人类评分者青睐的输出(《Training language models to follow instructions with human feedback》)。

17.1 模型

  1. 指令微调的动机是提高语言模型对 NLP 指令的响应能力。其思想是通过使用 supervision 来教导语言模型执行通过指令来描述的任务,使语言模型学会遵循指令,即使是对于 unseen 任务也能做到如此。为了评估在 unseen 任务上的性能,我们将数据集按任务类型分成 clusters ,并保留每个 task cluster 进行评估,同时在其余所有 clusters 上进行指令微调。

  2. 任务和模板:由于从头创建一个包含多个任务的指令微调数据集需要耗费大量资源,我们将学术界社区中现有的数据集转化为指令格式。我们聚合了 62 个公开可用的文本数据集,这些数据集都可以在 TensorFlow Datasets 上找到,包括语言理解任务和语言生成任务,并将它们合并为一个混合体。 Figure 3 展示了这些数据集,每个数据集都被归类到 12task clusters 中,同一 cluster 中的数据集属于相同的任务类型。每个数据集的描述、大小和示例可在附录 G 中找到。

    对于每个数据集,我们手动编写了十个 unique 的模板,这些模板使用自然语言指令来描述该数据集的任务。尽管十个模板的大部分都描述了原始任务,为了增加多样性,对于每个数据集,我们还包括最多三个 "turned the task around" 的模板(例如,对于情感分类,我们包括了要求生成电影评论的模板)。然后,我们对 pretrained 语言模型在所有数据集的混合体上进行指令微调,每个数据集中的样本都按照该数据集的随机选择的指令模板进行格式化。 Figure 4 展示了一个自然语言推理数据集的多个指令模板。

     

  3. Evaluation Splits:我们对 FLAN 在指令微调中 unseen 任务的表现非常感兴趣,因此定义什么算作 unseen 任务是至关重要的。一些先前的工作通过不允许相同的数据集出现在训练中来定义 unseen 任务,但我们使用了一个更保守的定义,利用了 Figure 3 中的 task clusters 。在这项工作中,只有当在指令微调过程中没有看到 D 所属的 task cluster 中的数据集时,我们才将数据集 D 视为评估时的 unseen 任务。例如,如果 D 是一个 entailment 任务,那么在指令微调中没有出现过任何 entailment 数据集,而我们对所有其他的 task clusters 进行了指令微调。因此,要评估 ctask clusters 上的 zero-shot FLAN ,我们进行了 c 个模型的指令微调,其中每个模型将保留一个不同的 task cluster 从而用于评估。

  4. Options 的分类任务:给定任务的输出空间可以是几个类别(分类任务)或自由文本(生成式任务)。由于 FLAN 是一个 decoder-only 语言模型的指令微调版本,它自然会以自由文本的形式进行响应,因此在生成式任务中不需要进一步的修改。

    对于分类任务,先前的工作(GPT-3 )使用了一种 rank classification 方法,例如,只考虑两个输出( "yes" 和" no" ),将概率较高的那个作为模型的预测结果。虽然这个过程在逻辑上是正确的,但它存在不完美之处,因为答案的概率分布可能在表达每个答案的方式上存在不希望的分布(例如,大量的替代方式说 "yes" 可能会降低分配给 "yes" 的概率)。因此,我们在分类任务的末尾添加了一个 options 后缀,其中我们将单词 "OPTIONS" 添加到分类任务的末尾,并附上该任务的输出类别列表。这样,模型在响应分类任务时就知道哪些选择是期望的。 Figure 1 中的 NLI 示例和常识示例显示了 options 的例子。

    这不同于将 label 映射到 target words ,这里是将 label space 主动地添加到了输入中。

    这相当于让模型做选择题(而不是填空题)。

  5. 训练细节:

    • 模型架构和预训练:在我们的实验中,我们使用了 LaMDA-PT ,一个包含 137B 参数的稠密的、从左到右的 decoder-only transformer language model 。该模型在一系列 web 文档(包括带有计算机代码的文档)、对话数据、以及维基百科上进行预训练,使用 SentencePiece library 将文本 tokenize2.49T BPE tokens ,词表规模 32k 。预训练数据中约有 10% 为非英语数据。请注意,LaMDA-PT 只进行了语言模型的预训练(与针对对话来微调的 LaMDA 相比)。

    • 指令微调过程:FLANLaMDA-PT 的指令微调版本。我们的指令微调流程将所有数据集混合在一起,并从每个数据集中随机抽样。为了平衡不同数据集的大小,我们将每个数据集的训练样本数限制为 30k ,并遵从了 examples-proportional mixing schemeT5 ),最大 mixing rate3k 。我们使用具有 3e-5 学习率的 Adafactor 优化器对所有模型进行了 30kgradient steps 的微调, batch size = 8192 tokens 。微调中使用的输入序列长度和目标序列长度分别为 1024256 。我们使用 packingT5 )将多个训练样本组合成单个序列,使用特殊的 EOS tokeninputstargets 分开。这个指令微调过程在具有 128 coresTPUv3 上大约需要 60 小时。对于所有的评估,我们报告训练 30k stepsfinal checkpoint 的结果。

      因为是 zero-shot,所以这里没有通过验证集来选择 checkpoint

17.2 实验

17.2.1 主要结果

  1. 我们在自然语言推理、阅读理解、闭卷问答、翻译、常识推理、共指消解、以及 struct-to-text 等任务上评估了 FLAN 。如前所述,我们通过将数据集分组为 task clusters ,并 hold out 每个 cluster 以供评估,同时在其他所有 task clusters 上进行指令微调(即每个 evaluation task cluster 使用不同的 checkpoint )。对于每个数据集,我们评估所有模板的性能均值,这代表了在典型自然语言指令下的期望性能。由于有时可以使用验证集进行 manual prompt engineeringGPT-3 ),对于每个数据集,我们还使用在验证集上性能最佳的模板来获得测试集性能。

    为了进行比较,我们报告了 LaMDA-PT 使用与 GPT-3 相同的 promptszero-shotfew-shot 结果(因为 LaMDA-PT 在没有指令微调的情况下不适用于自然指令)。该 baseline 提供了指令微调对性能提升的直接消融研究。指令微调显著提高了 LaMDA-PT 在大多数数据集上的性能。

    我们还展示了 GPT-3 175BGLaM 64B/64E 在的 zero 性能,这些结果是根据各自的论文报告得出的。

    • 根据验证集上的最佳模板,zero-shot FLAN25 个数据集中有 20 个超过了 zero-shot GPT-3 ,甚至在 10 个数据集上超过了GPT-3few-shot 性能。

    • 根据验证集上的最佳模板,zero-shot FLAN19 个可用数据集中有 13 个超过了 zero-shot GLaM ,而在 19 个数据集中的 11 个超过了 one-shot GLaM

  2. 总体而言,我们观察到指令微调对于自然语言指令化的任务(如 NLIQA 、翻译、struct-to-text 等)非常有效,而对于直接以语言建模形式构建的任务,指令微调的效果较小,因为指令在这些任务中会很大程度上重复(例如,常识推理任务和共指消解任务以填写不完整的句子或段落的形式进行)。Figure 5 是自然语言推理、阅读理解、闭卷问答、以及翻译任务的结果摘要。

    • 自然语言推理(NLI):在五个 NLI 数据集上, FLAN 的性能远远超过所有基准模型。正如 GPT-3 原始论文所指出的,GPT-3NLI 上表现不佳的原因之一可能是 NLI 的样本在无监督训练集中不太可能以自然方式出现,因此以作为句子续写的方式表达起来会很别扭。对于 FLAN ,我们将 NLI 表述为更自然的问题形式:"Does <premise> mean that <hypothesis>?" 从而获得了更高的性能。

    • 阅读理解:在阅读理解任务中,FLANMultiRCOBQA 上优于基准模型。在BoolQ 上,FLAN 大幅优于 GPT-3 ,而 LaMDA-PTBoolQ 上已经取得了很高的性能。

    • 闭卷问答:对于闭卷问答任务,FLAN 在所有四个数据集上优于 GPT-3 。与 GLaM 相比,FLANARC-eARC-c 上表现更好,在 NQTQA 上略低一些。

    • 翻译:类似于 GPT-3LaMDA-PT 的训练数据约有 90% 是英语,并包含一些其他语言的文本,这些文本并不是专门用来训练机器翻译的。我们还在 GPT-3 论文中评估的三个数据集上评估 FLAN 的机器翻译性能:WMT'14French–English 数据集,以及 WMT'16German-English 数据集和 Romanian–English 数据集。

      GPT-3 相比,FLAN 在所有六个评估上优于 zero-shot GPT-3 ,但在大多数情况下不如 few-shot GPT-3 。类似于 GPT-3FLAN在翻译成英语方面表现出色,并与监督翻译基准模型相媲美。然而,从英语翻译成其他语言的结果相对较弱,这是可以预料的,因为 FLAN 使用了 English sentencepiece tokenizer ,并且大部分预训练数据是英语。

    • 其它任务:尽管我们看到了上述任务类别的强大结果,但指令微调的一个局限性是它并未改善许多语言建模任务的性能(例如,以补全句子的形式构建的常识推理任务或共指消解任务)。对于七个常识推理和共指消解任务(详见附录中的 Table 2 ),FLAN 仅在其中三个任务上优于 LaMDA-PT 。这个负面结果表明,当下游任务与原始的语言建模预训练目标相同时(即在指令很大程度上是冗余的情况下),指令微调是无用的。

      最后,我们在附录中的 Table 1Table 2 中报告了情感分析、转述检测(paraphrase detection )、以及 struct-to-text 的结果,以及 GPT-3 结果不可用的其他数据集。通常情况下,zero-shot FLAN 优于 zero-shot LaMDA-PT ,并且与 few-shot LaMDA-PT 相当或更好。

17.2.2 消融分析

  1. Instruction tuning clusters 数量:在第一个消融实验中,我们研究了指令微调中使用的任务数量和 task clusters 数量对性能的影响。在这个设置中,我们将 NLI 、闭卷问答、以及常识推理作为 evaluation clusters ,并使用剩下的七个 task clusters 进行指令微调。我们展示了使用一个到七个 instruction tuning clusters 的结果,其中 task clusters 按照每个 cluster 中任务数量递减的顺序添加。Figure 6 展示了这些结果。

    • 正如预期的那样,当我们添加更多的 task clusters 和任务到指令微调中时,三个 held-out clusters 的平均性能都有所提高(除了情感分析 cluster ),从而证实了我们提出的指令微调方法在新任务的 zero-shot 性能上的优势。

    • 此外,有趣的是,在我们测试的七个 task clusters 中,性能似乎没有达到饱和状态,这意味着通过添加更多 task clusters 到指令微调中,性能可能会进一步提高。

    值得注意的是,这个消融实验不能让我们得出关于哪个 instruction tuning cluster 对每个 evaluation cluster 贡献最大的结论,尽管我们看到 sentiment analysis cluster 的附加价值很小。

  2. Scaling Laws:正如 GPT-3 原始论文所展示的,对于更大的模型,语言模型的 zero-shotfew-shot 能力显著提高,我们接下来探究指令微调的好处如何受到模型规模的影响。使用前面消融实验中的相同 cluster split ,我们评估了参数为 422M, 2B, 8B, 68B, 137B 的模型上指导微调的效果。在 Figure 7 中展示了这些结果。

    • 我们可以看到,在约 100B 参数的两个模型中,指导微调显著提高了 held-out tasks 的性能,这与我们论文中的先前结果一致。

    • 然而,对于 8B 及更小规模的模型,在 held-out tasks 上的表现却令人深思:指导微调实际上对 held-out tasks 的性能产生了负面影响。对于这一结果,一个可能的解释是对于小规模模型来说,在指令微调过程中学习的 40 个任务填满了整个模型容量,导致这些模型在新任务上的表现较差。根据这一潜在解释,对于更大规模的模型,指令微调填满了部分模型容量,同时教会这些模型如何遵循指令,使它们能够利用剩余容量来泛化到新任务上。

  3. 指令的作用:在最后的消融研究中,我们探讨了指令在微调过程中的作用,因为一种可能性是性能提升完全来自多任务微调,模型即使没有指令也可以表现得很好。因此,我们考虑了两种没有指令的微调设置。

    • no template 设置中,模型只接收输入和输出(例如,对于翻译任务,输入是 "The dog runs.",输出是 "Le chien court.")。

    • dataset name 设置中,每个输入都以任务和数据集的名称开头(例如,对于翻译成法语的任务,输入是 "[Translation: WMT’14 to French] The dog runs.")。

    我们将这两种消融配置与 FLAN 的微调过程进行比较,其中 FLAN 使用了自然语言指令(例如,"Please translate this sentence to French: 'The dog runs.'")。我们针对 Figure 5 中的四个 held-out clusters 进行评估。

    • 对于 no template 设置,我们在zero-shot 推理过程中仍使用了 FLAN 的指令。因为如果我们不使用模板,模型将不知道执行哪个任务。

    • 对于仅使用数据集名称进行微调的模型,我们在zero-shot 推理过程中分别报告了使用 FLAN 指令、以及使用数据集名称的 zero-shot 性能。

    Figure 8 显示了结果:这两种消融配置的性能都显著低于 FLAN ,这表明在处理 unseen 任务的 zero-shot 性能中,使用指令是至关重要的。

  4. few-shot 示例的指令:到目前为止,我们专注于在 zero-shot setting 中进行指令微调。在这里,我们研究了在推理时有 few-shot 示例可用时如何使用指令微调。

    few-shot setting 的格式基于 zero-shot 格式。对于某个输入 x 和输出 y ,令 instruct(x) 表示 zero-shot 指令。那么,在给定 kfew-shot 示例 (xi,yi)i=1k 和新输入 x 的情况下,few-shot setting 的指令格式为 instruct(x1)y1instruct(x2)y2instruct(xk)ykinstruct(x),其中 表示字符串连接,拼接时插入了分隔符 token 。在训练和推理时,示例从训练集中随机选择,并且示例的数量限制为 16 个,并且总序列长度小于 960 tokens 。我们的实验使用与 ”主要结果“ 章节相同的任务划分和评估过程,因此仅在推理时使用 unseen 任务的 few-shot 示例。

    注意:训练时并没有使用 few-shot ,而是 zero-shot

    Figure 9 所示,与zero-shot FLAN 相比,few-shot 示例改善了所有 task clusters 的性能。示例对于输出空间较大/复杂的任务特别有效,例如 struct-to-text 、翻译、以及闭卷问答,这可能是因为示例有助于模型更好地理解输出格式。此外,对于所有task clustersfew-shot FLAN 的标准差较低,表明对 prompt engineering 的敏感性降低了。

  5. 指令微调促进 prompt tuning:根据我们之前观察到的指令微调改善了模型对指令的响应能力的情况,我们可以得出这样的结论:如果 FLAN 更顺从地执行 NLP 任务,那么当使用 soft prompts (放在输入之前的连续变量,这些变量通过 prompt tuning 进行优化)进行推理时,它也应该表现出更好的性能。作为进一步的分析,我们根据前面的 cluster splits ,为每个 SuperGLUE 任务训练continuous prompts ,以便在对任务 T 进行 prompt-tuning 时,指令微调过程中没有看到与 T 属于同一 cluster 的任务。我们的 prompt setting 设置遵循 《The power of scale for parameter-efficient prompt tuning》 的过程,只是我们使用了长度为 10prompt ,权重衰减为 1e-4 ,并且在注意力分数上没有使用 dropout ;我们在初步实验中发现,这些改变提高了 LaMDA-PT 的性能。

    Figure 10 显示了这些 prompt tuning 实验的结果,包括在使用完全监督训练集的情况下、以及在仅有 32 个训练示例的低资源环境中的情况。我们可以看到:

    • 在所有情景下,FLANLaMDA-PT 更适合进行 prompt tuning

    • 在许多情况下,特别是在低资源设置中,对 FLAN 进行 prompt tuning 可以比对 LaMDA-PT 进行 prompt tuning 获得甚至 10% 以上的改进。

    这个结果以另一种方式展示了指令微调如何导致更适合执行 NLP 任务的 checkpoint

17.3 讨论

  1. 大规模语言模型的多样能力引起了对专家模型(每个任务一个模型)和通用模型(一个模型用于多个任务)之间权衡的关注,这对我们的研究具有潜在的影响。尽管人们可能认为 labeled 数据在改进专家模型方面具有最自然的作用,但指令微调展示了如何利用 labeled 数据帮助大型语言模型执行许多 unseen 任务。换句话说,指令微调对跨任务泛化的积极影响表明, task-specific training 是通用语言建模的补充,并激发了对通用模型进一步研究的动机。

  2. 我们研究的局限性:

    • 任务分配到 clusters 中存在一定的主观性(尽管我们尽量使用文献中公认的分类),而且我们只探索了通常只有一句话的相对简短的指令的使用(与给予众包工作者的详细指令相比)。

    • 对于我们的评估来说,个别示例可能出现在模型的预训练数据中(预训练数据包括 Web 文档),但在事后分析中(附录 C ),我们并未发现数据重叠显著影响结果的任何证据。

    • 最后,FLAN 137B 的规模使其成本较高。

  3. 指令微调的未来工作可以包括收集/生成更多的 task clusters 进行微调、进行跨语言实验、使用 FLAN 生成用于训练下游分类器的数据,并使用微调改善模型在 bias 和公平性方面的行为(《Process for adapting language models to society (palms) with values-targeted datasets》

十八、T0[2021]

论文 《Multitask Prompted Training Enables Zero-Shot Task Generalization》

  1. 最近的工作表明,大型语言模型表现出对新任务进行合理的 zero-shot generalization的能力(GPT-3《What changes can large scale language models bring? intensive study on hyperclova: Billions-scale korean generative pretrained transformers》)。尽管只是在 language modeling objectives 上进行了训练,这些模型在它们没有被显式地训练过的新任务上可以表现得相对较好,例如回答一段话的问题或进行摘要。

    一个有影响力的假设是,大型语言模型对新任务的泛化是多任务学习的隐式过程的结果(GPT-2 )。作为学习预测 next word 的副产品,语言模型被迫从其预训练语料库中包含的隐式任务的 mixture 中学习。例如,通过对网络论坛的通用文本进行训练,一个模型可能隐式地学习问答任务的格式和结构。这使得大型语言模型有能力泛化到以自然语言的 prompts 所呈现的 held-out tasks ,超越了先前关于泛化到 held-out datasets 的多任务研究(《Unifiedqa: Crossing format boundaries with a single QA system》《Crossfit: A few-shot learning challenge for cross-task generalization in nlp》)。然而,这种能力需要一个足够大的模型,并且对其 prompts 的措辞很敏感(《True few-shot learning with language models》《Calibrate before use: Improving few-shot performance of language models》《Prompt programming for large language models: Beyond the few-shot paradigm》)。

    此外,这种多任务学习到底有多隐式,也是一个悬而未决的问题。考虑到近期语言模型预训练语料库的规模,我们有理由期待一些常见的自然语言处理任务会以显式的形式出现在其预训练语料库中,从而直接在这些任务上训练模型。例如,有许多网站只是包含了一些关于普通问题和答案的列表,这正是闭卷问答任务的监督训练数据(《How much knowledge can you pack into the parameters of a language model?》)。我们假设,预训练中的这种多任务监督(multitask supervision )在 zero-shot generalization 中发挥了很大的作用。

    在本文中,我们专注于以有监督的和大规模多任务的方式显式地训练语言模型。我们的方法是使用由自然语言的 prompts 中指定的一组不同任务组成的 training mixture 。我们的目标是:诱导模型在不需要大规模的情况下更好地泛化到 held-out tasks ,以及对 prompts 的措辞选择更加鲁棒。为了将大量的自然语言任务转换成 prompted 形式,我们为结构化的数据集使用了一种简单的模板语言。我们开发了一个接口从而从公共贡献者那里收集 prompt ,促进了 large multitask mixture with multiple prompts per dataset 的收集(《Promptsource: An integrated development environment and repository for natural language prompts》)。然后,我们在任务的一个子集上训练 T5 encoder-decoder model 的变体(T5《The power of scale for parameter-efficient prompttuning》),然后在未被模型训练的任务和 prompts 上评估模型。

    我们的实验研究了两个问题:

    • 首先,multitask prompted training 是否能提高对 held-out tasks 的泛化性?

    • 第二,在更广泛的prompts 上进行训练是否能提高对 prompt 措辞的鲁棒性?

    对于第一个问题,我们发现多任务训练能够实现 zero-shot task generalization ,我们的模型在 11held-out datasets 中的 9 个数据集上与 GPT-3 的性能相匹配或超过,尽管它比 GPT-316 倍。我们还表明,在 BIG-bench 基准的 14 个任务中,该模型在 13 个任务上比大型 baseline 语言模型有提高。

    对于第二个问题,我们发现,在每个数据集上训练更多的 prompts ,可以持续地提高中位数,并减少在 held-out tasks 上的性能方差。对来自更多数据集的 prompts 进行训练也普遍提高了中位数,但并没有一致地降低方差。

    T0 也是基于指令微调的,这和 FLAN 非常类似。

  2. 相关工作:

    • 在这项工作中,我们将语言模型预训练中的隐式多任务学习与显式多任务学习(《Multitask learning》)区分开来,其中,显式多任务学习是将多个任务混合到一个监督训练过程中的技术。用多任务学习训练的模型早已被证明在 NLP 中具有更好的性能(《A unified architecture for natural language processing: deepneural networks with multitask learning》)。由于不同的任务有不同的输出,应用多任务学习需要一个共享的格式,各种格式已经被使用(《A joint many-task model: Growing a neural network for multiple NLP tasks》《The natural language decathlon: Multitask learning as question answering》)。一些多任务的工作还探索了用大型预训练模型对新的数据集进行 few-shot generalizationzero-shot generalization (例如,《Exploring and predicting transferability across NLP tasks》《Crossfit: A few-shot learning challenge for cross-task generalization in nlp》)。

    • 自然语言 prompting 是将 NLP 任务以自然语言的格式重新格式化到对应于 natural language input 的方法。text-to-text pretrained models 的发展(如 T5 )使得 prompts 成为多任务学习的一个特别有用的方法。例如:

      • 《Unifiedqa: Crossing format boundaries with a single QA system》20 个问答数据集改编为 question: ... (A)... (B)... (C)... context: ... 的单一prompt

      • 而后来的工作,如 《Adapting language models for zero-shot learning by meta-tuning on dataset and prompt collections》《Entailment as few-shot learner》 将一系列数据集分别转换为单个 boolean QA prompt 、或单个NLI prompt

      虽然有效,但这些 single-prompt 方法通常不能泛化到新的 prompts 或新的任务,其中这些新的 prompts 或新的任务无法在 single-prompt 的固定的格式中表达。

    • 更加通用的是:

      • PET 以及 GPT-3 将使用 prompts 作为所有 NLP 任务的通用方法加以推广。

      • 《Natural instructions: Benchmarking generalization to new tasks from natural language instructions》将这种方法进一步扩展到多任务设置中,对 61 个狭义定义的任务(如 question generationincorrect answer generation )的 prompts 进行训练,这些任务改编自 9 个数据集的众包指令;而我们对 62 个数据集和 NLP 文献中传统定义的 12 个任务进行训练并衡量泛化性。此外,他们的 prompts 除了指令之外还包括 labeled examples ,而我们则专注于 zero-shot generalization

      • 最后,FLAN同时进行的工作与我们有类似的研究问题,尽管我们在几个实质性的方面有所不同,例如,prompt 多样性、模型规模、held-out-task scheme 。我们将详细讨论我们的差异。

    • 最后,在解释 prompts 的成功时,主要的假设是:模型学会了将 prompts 理解为 task instructions ,这有助于它们泛化到 held-out tasks 。然而,这种成功在多大程度上取决于 held-out tasks 的语义意义已经受到挑战(《Do prompt-based models really understand the meaning of their prompts?》《Cutting down on prompts and parameters: Simple few-shot learning with language models》)。因此,在这项工作中,我们对 prompts 为什么支持泛化仍然保持未知( agnostic )。我们只宣称,prompts 作为多任务训练的自然格式,从经验上支持泛化到 held-out tasks

18.1 衡量泛化到 Held-Out 任务的泛化性

  1. 我们首先假设 NLP 数据集被划分为任务。我们用 "任务" 一词来指代由一组特定数据集测试的通用 NLP 能力。为了评估对新任务的 zero-shot generalization ,我们在任务的一个子集上进行训练,并在一组 held-out 任务上进行评估。

    不幸的是,NLP 任务的分类是模糊的,尤其是当人们试图分离出一种独特的 skill 时。例如,许多数据集评估常识性知识,一些多任务工作(如 GPT-3FLAN)将常识性知识定义为一个独立的任务。然而,常识数据集差别很大,从 innate knowledge 和小学科学到 DIY 指令、美国文化规范、以及研究生水平的定理(详细讨论见附录 D.1 )。

    注意到按任务分组是一种不完美的启发式方法,我们在组织我们的任务分类学时,偏向于根据任务格式,而不是根据文献中的惯例所要求的技能。我们从这些论文中收集所有的数据集,并排除那些非英语的数据集(这也排除了编程语言、以及结构化的注释,如 parse trees )、或者如果它们需要特殊的领域知识(例如,生物医学)。这就产生了 12 个任务和 62 个数据集,这些数据集在我们的 training mixtureevaluation mixture 中都有 publicly contributed promptsFigure 2 ),截至目前。所有的实验都使用 Hugging Face datasets library 中的数据集。

  2. 为了测试 zero-shot generalization ,我们保留了四个任务的所有组成数据集:自然语言推理(natural language inference: NLI) 、共指解析(coreference resolution)、句子补全(sentence completion )、词义消岐(word sense disambiguation )。

    我们选择自然语言推理作为 held-out task ,因为人类也会将自然语言推理作为 held-out task 从而进行 zero-shot generalize : 大多数人从来没有被明确地训练从而对一个 premise sentence 是否蕴含或违背一个 hypothesis sentence 进行分类,但他们发现不经过训练就能直观地执行这项任务(《Anlizing the adversarial natural language inference dataset》)。出于同样的原因,我们也保留共指解析和词义消岐。我们进一步 hold out 句子补全任务,因为它可能与 NLI 过于相似(附录 D.2 详细讨论了这一点)。

    此外,我们不在 GPT-3 用于评估的任何数据集上训练我们的 main model ,这样我们的主要结果将是一个公平的 zero-shot 比较。我们还验证了这些任务的数据没有通过预训练语料库而被泄露(附录 E )。

  3. 最后,我们对 BIG-bench 的数据集的一个子集进行了进一步的评估。BIG-bench 是最近的一个社区驱动的基准,用于创建一个多样化的困难任务集合来测试大型语言模型的能力。BIG-bench 的子集包括一个 language-oriented 的任务的选择,BIGbench 的维护者已经为其准备了初步结果,这些任务构成了 T5 tokenizer 的词汇范围(即只包含英语文本,没有表情符号或其他特殊字符)。所有来自 BIG-bench 的任务都是新任务,并且在我们的训练中被 held out

18.2 统一的 Prompt 格式

  1. 所有的数据集都是以自然语言提示的形式交给我们的模型,以实现 zero-shot experimentation 。为了方便编写大量的 prompts 信息,我们开发了一种 templating language 和一个应用程序,使其能够轻松地将不同的数据集转换为 prompts

    我们将一个 prompt 定义为由一个 input template 、一个 target template 、以及一系列关联的 target template 组成。模板是一个函数,该函数针对 input sequencestarget sequencesdata example 映射为自然语言。实际上,模板允许用户将带任意文本与数据字段、元数据、以及其他用于渲染和格式化原始字段的 code 相混合。例如,在一个 NLI 数据集的情况下,example 将包括 PremiseHypothesisLabel 等字段。一个 input templateIf {Premise} is true, is it also true that {Hypothesis}?,而一个 target template 可以定义为 label 选项 {Choices[label]}。这里 Choicesprompt-specific metadata ,由选项 yes, maybe, no组成,对应的标签是 entailment (0), neutral (1), contradiction (2)。其他元数据记录了额外的属性,如评价指标。如 Figure 3 所示,每个 data example 都被具体化为许多不同的 prompt templates

  2. 为了开发 prompts ,我们建立了一个 interface ,用于在数据集上交互式地编写 prompts 。我们在学术界公开呼吁用户贡献 prompts 。隶属于 8 个国家 24 个机构的 36 位贡献者参与了进来。由于我们的目标是训练一个对 prompt format 具有鲁棒性的模型,并且,因为什么使得 prompt 有效的问题仍未悬而未决,我们鼓励贡献者在他们的 prompt 风格上保持开放,并创造一组多样化的 prompts 。主要的标注准则是,prompts 需要符合语法,并能被一个没有任务经验的流利的英语使用者所理解。此外,需要显式的计数或数字索引的 prompts 被删除,从而支持自然语言的变体。例如,不是预测从段落中提取答案的 span 的索引,而是期待模型复制 span 的文本。有了这些最低限度的限制,我们鼓励 prompt 作者使用正式的和创造性的 prompts 以及各种关于数据的排序。

  3. 大多数 prompts 直接对应于原始任务的一个版本,我们也允许这种 prompts:改变原始任务的顺序(例如,从摘要中生成一个文档)。这种 non-original-task prompts 包括在我们的 training mixtures 中,以提高多样性,但它们没有在评估中报告,因为它们偏离了原始数据集报告的指标和基线。

    即,根据 output 来预测 input

  4. prompting language 和工具的细节在附录 C《Promptsource: An integrated development environment and repository for natural language prompts》 中给出,而 prompts 本身在附录G 中给出。我们收集了英语数据集的 prompts ,排除了包含潜在有害内容或非自然语言(如编程语言)的数据集。我们把这个集合称为 Public Pool of Prompts: P3 。截至目前,P3 包含 177 个数据集的 2073prompts (平均每个数据集有 11.7 prompts )。实验中使用的 prompts 都来自P3 (除了 BIG-bench ,它的 prompts 由其维护者提供)。

18.3 实验

  1. 模型:我们在自然语言 prompted 数据集的 multi-task training mixture 上对预训练模型进行了微调。我们的模型使用一个 encoder-decoder 架构:输入文本被馈入编码器,target text 由解码器产生。

    我们训练的所有模型都是基于 T5 。由于 T5 的预训练目标是生成 tokens ,而且是只生成那些已从输入文本中删除的 tokens ,它与 prompted datasets 的自然文本生成格式不同。因此,我们使用 《The power of scale for parameter-efficient prompt tuning》LM-adapted T5 model (简称 T5+LM ),该模型是在标准的 language modeling objective 上对 C4100B 额外 tokens 上进行训练后产生的。

  2. 训练:我们的主力模型,T0 ,是 Table 5 中详述的 multitask mixture 上训练的。此外,T0+ 是相同的模型,具有相同的超参数,只是在加入了 GPT-3 的评估数据集的 mixture 上训练。最后,T0++ 进一步将 SuperGLUE 加入到 training mixture 中(除了 RTECB ),这使得 NLIBIG-bench 任务成为唯一被 held-out 的任务。

    上述的 T0 变体都是由 11B 参数版本的 T5+LM 初始化的。为了研究 scaling 的效果,并帮助资源较少的研究人员,我们还训练了T0(3B) ,它与 T0 具有相同的 training mixture ,但是从 3B 参数版本的 T5+LM 初始化的(结果报告在附录 F )。

    我们通过选择在训练数据集的 validation splits 上产生最高分的 checkpoint 来进行 checkpoint selection 。这仍然满足了 true zero-shot《True few-shot learning with language models》)的设置,因为我们不使用任何 held-out tasks 中的任何样本来选择最佳 checkpoint

    我们通过合并和混洗所有训练数据集的所有样本来组装我们的 multitask training mixture 。这相当于从每个数据集中按照数据集中的样本数量的按比例采样。然而,我们每个训练数据集中的样本数量相差两个数量级。因此,我们遵循 T5 使用的策略,将任何超过 500k 个样本的数据集视为有 500k/num_templates 的样本,从而用于采样,其中 num_templates 是为该数据集创建的模板数量。

    考虑到每个数据集被应用到 num_templates 个模版上,因此数据集总共生成了 n×numTemplates 个样本,n 为数据集的原始大小。

    我们将 input 序列和 target 序列分别截断为1024 tokens256 tokens 。遵循 T5 的做法,我们使用 packing 的方式将多个训练样本合并成一个序列,以达到最大序列长度。我们使用 1024 个序列的 batch size (对应于每个 batch 包含 220 个总输入 tokens )和 Adafactor 优化器。遵循微调 T5 的标准做法,我们使用 1e-3 的学习率和 0.1dropout rate

  3. 评估:我们在 11 个数据集上评估了4 个传统 NLP 任务的 zero-shot generalization :自然语言推理、共指解析、词义消岐、句子补全;以及 BIG-bench14 个新任务。除非另有说明,否则我们报告的是 validation splits 的性能。所有报告的数据集都使用准确率作为其衡量指标。

    对于涉及从几个选项中选择正确完成的任务(如多个选项的问答题),我们遵循 GPT-3 的做法,使用 rank classification 来评估我们的模型:我们计算 fine-tuned model 下每个目标选项的对数似然,并选择具有最高对数似然的选项作为预测。为了简单起见,我们不对目标选项的对数似然进行长度归一化处理。

    我们不通过比较不同的 promptsvalidation splits 上的表现来进行 prompt selection《True few-shot learning with language models》强调了这种策略如何从 validation splits 中泄露信息,这使得评价不是 "true" zero-shot。对于一个给定的数据集,我们报告了该数据集所有 prompts 的性能中值、以及它们的四分位数范围( Q3 -Q1 ),从而衡量模型对 prompts 措辞的鲁棒性。

    注意, checkpoint selection 是在训练数据集的 validation splits 上进行的,它不同于这里的 validation splits

  4. 泛化到 heldout tasks:我们的第一个研究问题是,multitask prompted training 是否能提高对 heldout tasks 的泛化能力。 在 Figure 4 ,我们将 T0 与我们的 T5+LM 基线在四个 heldout tasks 上进行比较。我们的方法在所有的数据集上都比我们的基线有明显的提高,这表明 multitask prompted training 比只用相同的模型和 prompts 的语言建模训练有好处。

    接下来,我们将 T0 与截至目前可用的最大的语言模型的 zero-shot 性能进行比较,即各种 GPT-3 模型,最高可达 175B 参数。请注意,GPT-3 论文中报告的是单个 prompt 的性能,而我们报告的是 P3 中所有 prompts 的性能的中位数和四分位数范围。我们发现,T011held-out datasets 中的 9 个上与所有 GPT-3 模型的性能媲美或超过。值得注意的是,T0GPT-3 都没有在 NLI 任务上训练,但是 T0 在所有的 NLI 数据集上的表现都超过了 GPT-3 ,而我们的 T5+LM 基线没有超越 GPT-3 。对于其他 held-out tasks 的大多数数据集来说,情况也是如此。两个例外是 WinograndeHellaSwag 数据集,我们在后续讨论。

    为了在更多的 held-out tasks 上评估我们的模型,我们在 BIG-bench 的一个子集上评估了 T0, T0+, T0++zero-shotBIG-bench 的任务涵盖了我们的训练任务中没有包括的各种新技能,例如推断 objects 序列的顺序、解决逻辑网格谜题,以及将真实的陈述与常见的错误概念区分开来。BIG-bench 的维护者为每个数据集提供了一个 prompt ,我们用它将我们的模型与一系列由谷歌训练并由 BIG-bench 维护者评估的初步诊断基线模型进行比较。这些模型是在一个标准的 language modeling objective 上训练的 decoder-only Transformer 语言模型,模型大小不一。我们发现,除了 StrategyQA 之外,至少有一个 T0 变体在所有任务上的表现超过了所有的基线模型(Figure 5 )。在大多数情况下,我们模型的性能随着训练数据集数量的增加而提高(即T0++ 优于 T0+T0+ 优于T0)。

  5. prompt 鲁棒性:我们的第二个研究问题是,在更广泛的 prompts 上进行训练是否能提高对 prompts 措辞的鲁棒性。我们对每个数据集的平均 prompts 数量(p )和训练期间使用的数据集的数量(d )的影响进行了两个消融实验。

    • 每个数据集更多 prompts 的效果:在这个分析中,我们固定 d ,并将 T0 与具有不同 p 的模型进行比较。

      T0 是在一些没有映射到数据集原始任务的 prompts 上训练的,例如 "given an answer, generate a plausible question" 。包括这些 prompts 的结果是 p 平均为 8.03 (这与我们的主力 T0 模型相对应)。我们将 T0p=1 (每个数据集随机选择一个 original-tasks prompts )、p=5.7 (所有数据集的所有 original-tasks prompts )和 p=0 (对应于没有任何 prompted trainingT5+LM )的模型进行比较。我们用相同的超参数和相同的步骤数来训练所有模型。

      Figure 6 显示:

      • 即使每个数据集只有一个 promptheld-out tasks 性能也能比 non-prompted baseline 有很大的改善,尽管 p=1 时的 spreadQ1Q3 之间的四分位数范围)并没有一致地改善。

      • 同时,进一步将 p1 增加到 5.7 ,确实在中位数(8/11 个数据集上增加)和 spread7/11 个数据集上减少)方面都有额外的改善。这加强了我们的假设,即在每个数据集上训练更多的 prompts 会导致更好的和更鲁棒的泛化到 held-out tasks

      • 最后,我们发现 T0 包含了所有的 prompts (包括那些不对应于数据集原始任务的 prompts ),进一步改善了中位数(9/11 个数据集上增加)和 spread8/11 个数据集上减少),表明对 non-original-task prompts 的训练也是有益的。

    • 来自更多数据集的 Prompts 的效果:这里我们固定 p 为所有可用的 prompts,并将 d39 增加到 4955 (分别对应 T0, T0+, T0++)。Figure 7 显示:

      • 随着 d39 增加到49 ,所有 5 个被 held-out datasets 的中位性能都在增加。然而,5 个数据集中只有 1 个数据集的 spread 有所减少。

        对于一些数据集(如 ANLI ),这是一个伪命题,因为一些 prompts 总是表现得很差,所以当其他 prompts 改善时,spread 被拉大了。然而,对于其他的数据集(如 CB ),spread 确实随着 T0+ 而减少。

      • d49 增加到 55 时,所有数据集的中位数性能再次增加,但spread 只对 5 个数据集中的 2 个减少了。虽然还需要进一步调查,但看来增加 d 并不能使模型对 prompts 的措辞更加鲁棒。

  6. 比较 T0GPT-3 的鲁棒性:由于 GPT-3 只报告了每个数据集的一个 prompt ,没有标准差,我们通过 OpenAIAPIRTE 上评估 GPT-3 ,使用我们评估 T0 的相同的 10prompts ,从而估计 GPT-3 对不同措辞的 prompts 的鲁棒性。其中一个模板与 GPT-3 报告的 prompts 相同,其准确率为 58.8% ,低于 GPT-3 报告的 63.5% 。然而,所有其他 9prompts 都产生了大致随机猜测的性能,准确率中值为 52.96% ,四分位数范围为 1.28% 。这些结果表明,相比 GPT-3T0 可能对 prompt formulation 更加鲁棒。

    这是可以理解的,因为 T0 被微调从而更适合这些 prompts

18.4 讨论

  1. 与我们的工作同时, 《Finetuned language models are zero-shot learners》提出了 FLAN ,它采用相同的方法:通过 multitask prompted training 来实现 zero-shot generalization 。利用与我们类似的混合数据集,他们训练了多个 decoder-only 的语言模型,每个模型都有一个 held-out task (比方说,我们专注于用多个 held-out tasks 训练一个模型,以评估该模型对不同任务的泛化能力)。与 FLAN 相比:

    • T0CBRTE 上的 zero-shot 性能更好、在 Story ClozeCOPA 上类似、而在 WinograndeANLI 上更糟。

    • T0++CB, RTE, COPA 上的表现优于 FLAN ,在 Winogrande, ANLI 上的表现与 FLAN 相当。

    值得注意的是,尽管 T0T0++FLAN10 倍以上(11B vs. 137B 的参数),但还是达到了这个性能。

    T0FLANWinogrande, HellaSwag 上的表现都不如 GPT-3 ,对此,FLAN 猜想,对于像共指消解这样可以被格式化为补全一个不完整的句子的任务,在 prompts 中添加任务指令 "基本上是多余的"。根据这个猜想,我们按照 FLANGPT-3 的做法,对这两个数据集进行了不带指令的重新评估,发现它在 HellaSwag 上的表现从中位数 33.65% 提高到 57.93% ,与 FLAN 的表现相匹配。然而,对于 Winogrande ,使用 FLANprompts 而不带指令,并没有带来实质性的变化(准确率为 62.15% )。

    令人惊讶的是, FLAN 用一个与 T011B 参数)规模相当的模型( 8B 参数)进行消融,发现在 multitask prompted training 后,held-out tasks 的性能会下降,而我们发现 multitask prompted training 至少可以提高小到 3B 参数的模型的性能( Figure 8 )。我们确定了模型之间的两个关键差异,可以解释这种不一致:

    • 首先,我们使用了一个 encoder-decoder 模型,该模型在被训练成标准语言模型之前,用不同的目标(masked language modeling )进行了预训练,最后在 multitask mixture 上进行了微调。我们注意到,masked language modeling 已多次被证明是一种明显更有效的预训练策略(T5《Cloze-driven pretraining of self-attention networks》BERT)。

    • 其次,我们的 prompts 在长度和创造性方面更有质量上的多样性。例如,考虑我们对 Quora Question Pairs: QQP 的一个 prompt (转述识别): I’m an administrator on the website Quora. There are two posts, one that asks "question1" and another that asks "question2". I can merge questions if they are asking the same thing. Can I merge these two questions? 。我们假设,这种多样性可能会产生具体的影响。例如,它可以解释为什么 FLAN 提出的消融结果中,增加 prompts 的数量对性能的影响可以忽略不计,而我们在增加更多的 prompts 时却观察到了改进。我们把对这些差异的影响的全面调查留给未来的工作。

十九、MetaPrompt[2021]

论文:《Prompt Programming for Large Language Models: Beyond the Few-Shot Paradigm》

  1. 最近大规模自监督语言模型(如 GPT-3 )的兴起,以及它们在下游任务上的成功,使我们离 task-agnostic 的人工智能系统的目标又近了一步。然而,尽管这类模型具有明显的力量,但目前控制它们执行特定任务的方法却极为有限。为了正确评估其能力并从这些模型中提取有用的工作,需要新的方法。

    GPT-3 之前,评估和使用这类模型的标准方法涉及对任务数据集的一部分进行微调(《Universal language model fine-tuning for text classification》)。GPT-3 在没有微调的情况下在各种任务上取得了 SOTA 的性能,只使用了 few-shot prompts ,其中 prompts 提供了少量的任务示例作为输入的一部分馈入到训练好的模型。然而,虽然 few-shot format 足以揭示这些任务的惊人表现,但我们认为,在从自监督的语言模型中提取特定的 learned behaviors 方面,prompting 可能比 fine-tuningfew-shot format 更有效。

    我们认为,与原始 GPT-3 论文的标题(即,Language models are few-shot learners)所暗示的对 few-shot format 的普遍解释相反,GPT-3 在运行期间往往不是真正从 few-shot examples 中学习任务。与其说是指令(instruction),不如说该方法的主要 function 是:在模型现有的 learned tasks 空间中进行任务定位(task location )。这可以从 alternative prompts 的有效性中得到证明,其中在没有示例或指令的情况下,这些 alternative prompts 可以激发与 few-shot format 相当或更好的表现。

    这促使我们采取新的方法,显式地追求 task locationgoal 。我们建议探索更通用的 prompt programming 方法,特别是将任务意图(task intention )和任务结构传达给自监督模型的技术,其中自监督模型的训练模态是自然语言。

    在很大程度上,自监督语言模型被训练来逼近的 ground truth function 就是人类的写作方式。因此,为了与语言模型进行交互和控制,我们应该从人类使用的自然语言的角度来考虑。除了一些注意事项外,我们希望找到一些我们预期人类补全的 prompts ,通过文本补全的方式来完成目标任务。

    在本文中,我们研究了 few-shot paradigm ,并发现它的性能可以被简单的 0-shot prompts 相匹配或超过。我们探讨了成功的 0-shot prompts 的性质,并通过自然语言符号学的视角提出了 prompt programming 的通用方法。我们展示了一些新颖的 prompts ,这些 prompts 迫使语言模型在作出裁决之前将问题分解成若干部分;我们还介绍了 metaprompt programming 的概念,这种方法将编写 task-specific prompt 的工作交给语言模型本身。最后,我们讨论了如何将这些想法纳入现有的和未来的 benchmarks ,使得我们能够更好地探测(probe)大型语言模型的能力。

    就是类似于 COT 的思想来引导模型自动生成 few-shot examples

  2. 相关工作:最近的文献工作集中在,使用机器学习的传统应用方法来控制自然语言的生成,例如:

    • 调节 output 的新架构(《CTRL: A Conditional Transformer Language Model for Controllable Generation》《GeDi: Generative Discriminator Guided Sequence Generation》)。

    • 更先进的采样技术(《Hierarchical Neural Story Generation》《The Curious Case of Neural Text Degeneration》)。

    • 基于梯度的 prompts 优化(《AutoPrompt: Eliciting Knowledge from Language Models with Automatically Generated Prompts》《Prefix-Tuning:Optimizing Continuous Prompts for Generation 》)。

    • 特定任务的adapter networks《Zero-shot Learning by Generating Task-specific Adapters》)。

    关于这些最新方法的综述见 《Controllable Neural Text Generation》。过去的工作还探索了通过为每个任务动态地选择最相关的示例来改进 few-shot paradigm《Multi-Step Inference for Reasoning Over Paragraphs》《Making Pre-trained Language Models Better Few-shot Learners》

    相比之下,关于自然语言的 0-shotprompt programming 方法的工作很少被正式化。相反,成功的 prompt programming 技术主要是在 OpenAI's API and AI Dungeon 的用户的博客和社交媒体上分享。

    由于大多数 prompt programming 的探索采取了分散的形式,我们在这里汇编所有相关的贡献是不可行的。相反,我们给出了一个简短的、非详尽的探索,这些探索已经超越了 few-shot paradigm

    • 《GPT-3 Creative Fiction》GPT-3 的能力做了最全面的综述,他演示了 GPT-3 写小说、写诗歌、写海豹突击队,以及执行 PDF 清理等任务。他写了大量关于他使用 GPT-3 工作的直觉,也写了他的 prompt programming 方法。

    • 《GPT-3: Using Fiction to Demonstrate How Prompts Impact OutputQuality》 写过关于 prompt 提供的上下文对写作质量的影响。

    • 《You Can Probably Amplify GPT3 Directly》 写过关于通过对话引导 GPT-3 从而将问题分解成多个步骤来放大 GPT-3 的数学能力。

    • 推特用户 KaryoKleptid 也发布了类似的实验(《Seems to work》《Teaching GPT-3 to do a brute force ’for loop’ checking answers》),使用对话来 prompt GPT3 (通过 AI Dungeon )将问题分解成多个步骤并遵循暴力检查等程序,在数学问题上取得了令人印象深刻的结果。

    我们的工作综合并扩展了这些探索所开创的方法,代表了向正式确定有效的自然语言 prompt programming 技术迈出了适度一步。

19.1 调研 few-shot prompting

  1. GPT-3 在有 0-shot prompts1-shot promptsn-shot prompts 的任务上进行了评估。当提供更多的示例时,GPT-3 的表现一直很好,0-shot 的表现往往不到 n-shot 的一半。对这一结果的常见解释是,GPT-3 在运行时从示例中学习,这使得它的表现比提供较少或没有示例时更好(《Language models are few-shot learners》)。

    然而,随着示例数量的增加,性能的提高可以用另一种方式来解释。与其说从示例中学习如何执行任务,不如说这些示例只是用来指导 GPT-3 解决什么任务,并鼓励它在回答中遵循 prompt 的结构。

    例如,对于某些任务(如翻译任务),少量的样本不足以学习关于该任务的任何实质性内容。相反,GPT-3 必须主要地(如果不是完全地)依靠其 trained weights 中所包含的源语言和目标语言的词汇知识和语法知识。我们将明确表明,这些 prompts 主要是引导模型访问现有的知识,而不是将这些任务视为 few-shot learning 。我们通过研究示例(训练样本)是否有必要,从而来做到这一点。

  2. 0-shot prompts 的成功:由于预算和时间的限制,我们只探讨了一个简单的例子,即一个 French-to-English 的翻译任务。我们发现,0-shot prompts 可以匹配甚至超过标准的 few-shot 的性能。我们在 Table 1 中的结果显示,GPT-3 论文中所报告的 0-shot accuracy 甚至可以通过微小的 prompt engineering 而得到实质性的改善。最重要的是,Figure 1 中极其简单的 prompt ,只包括两种语言的名称和一个冒号,比原始 GPT-3 论文中的 10-shot prompt 表现得更好。

    事实上,我们发现 GPT-3 论文中大多数表现最差的 0-shot prompts 都是如此,特别是问答任务的 benchmarks 。许多 prompts 可以很容易地通过简单的格式改变而得到改善,从而使 prompt 更接近人类写的自然语言。因此,GPT-30-shot 性能被大大低估了。

    纠正这种 confusion 是很重要的,可以更准确地了解模型能力的性质,以便我们可以更好地学习控制它。事实上,GPT-3 有大量 functions ,这些 functions 无需在运行期间被学习;这使得 0-shot prompting 具有很大的灵活性,并鼓励探索更通用的 prompt programming 方法。

  3. Examples 并不总是有用的:在我们的实验中,简单的 colon promptFigure 1 )的 1-shot 的表现明显比 0-shot 更差。通过检查 GPT-3 在这个任务上的输出,我们发现性能下降是由于 1-shot 示例的语义污染造成的。这是认为示例的语义与任务有关(比如说,示例被解释为连续叙述的一部分),而不是把示例当作 categorical guide 。事实上,我们发现,在各种任务中,对于普遍的 low-shot prompts 都存在这个现象。

    这种来自 few-shot examples 的污染效应已经被成功地用于提高 GPT-3 的性能,通过为每个任务选择 in-context examples《Multi-Step Inference for Reasoning Over Paragraphs》)。

19.2 Prompt Programming

  1. 重写 prompt 可以使语言模型的表现发生重大变化。这就促使我们提出了一个问题: 是否有一种方法,我们可以遵循该方法来制作更有可能产生预期行为的 prompts

    对于语言模型(它的输入和输出都是自然语言)的 prompt engineering ,可以理解为自然语言的编程。然而,自然语言是不确定的,比传统的编程语言要复杂得多。在本节中,我们将对自然语言编程的理论和方法进行讨论。

19.2.1 语言的 dynamics

  1. 为了理解如何 prompt 一个自回归语言模型,我们必须首先考虑模型被训练的背景、以及模型所近似的 function

    GPT-3 是在一个自监督的环境下,对数百 GB 的自然语言进行训练的。自监督是一种无监督学习的形式,其中 ground truth labels 来自数据本身。在 GPT-3case 中,分配给每个样本的 ground truth label 只是原始数据源中的 next token 。那么,GPT-3 所近似的 ground truth function 就是决定原始数据中 next tokenunderlying dynamic 。这个 function ,与GPT-3 不同,并不是一个黑盒子,但它是巨大的、难以解决地复杂。它是人类语言的 function ,因为它已经被人类使用并记录在书籍、文章、博客和互联网评论中。

    一个预测语言 dynamics 的系统必然包括人类行为和物理世界的模型(《Building AGI Using Language Models》)。语言的 dynamics 并没有脱离文化的、心理的和物理的背景;它不仅仅是一种语法的甚至语义的理论。在这个意义上,语言不是一个抽象的概念,而是一个与人类相关的 reality 的所有方面纠缠在一起的现象。dynamic 必须预测语言的实际使用情况,这包括(比如)预测理论物理学家之间的对话。对语言进行建模,和对 reality (该 reality 可能影响语言流动)的每一个方面进行建模一样困难。

    显然,GPT-3 并没有完美地学习到 ground truth function ,否则现在的世界看起来会非常不同。然而,它已经在明显的程度上接近了它,这一点从它不仅能够形成语法句子,而且能够连贯地采用文化参考和隐喻,并对复杂的心理的和物理的环境进行建模(《GPT-3 Creative Fiction》)。那么,prompt programming 的问题是重要的,因为语言的 dynamics 是重要的。

    如果我们要预测一个给定的由人类撰写的文本段落如何继续下去,我们将需要对作者的意图进行建模,并纳入有关该文本段落所指的世界性知识。逆问题(寻找一个 prompt,该 prompt 能够产生一个或一类 continuations )也涉及相同的考虑:就像说服(persuasion )的艺术一样,它需要高层次的心理学概念,如语气、暗示、联想、记忆、风格、可信度、以及模糊性。

    这就促使我们采用拟人化的方法进行 prompt programming ,因为建模 GPT-3 如何对一个 prompt 做出反应涉及到对虚拟的 human writer(s) 的建模。拟人化的方法与模型的拟人化是不同的。GPT-3dynamics 需要对人类进行复杂的预测,但它的行为在几个重要方面与人类不同。在本文中,我们将讨论其中的两个方面:

    • 它不像单个的人类作者,而是许多作者的叠加,这促使我们采用减法方法从而用于 prompt programming

    • tokens 之间发生大量 silent reasoning 的情况下,其预测 dynamics 的能力受到限制,这一限制可由 prompting 技术部分地克服。

  2. 本节的主旨是,为自监督的语言模型制定精确的 prompt programming 理论,与写下可观察现实的物理学的 Hamiltonian (非常困难)属于同一难度等级。然而,人类还是有优势可以有效地进行 prompt programming ,因为我们已经进化了,并花了一生的时间学习与手头的 dynamics 相关的启发式方法。prompt programming 是用自然语言编程,它为我们提供了大量我们熟悉但没有名字的 functions 。我们需要学习一种新的方法论,但方便的是,我们已经学会了最困难的基础。prompt programming 的艺术在于:使我们现有的知识适应关于与自回归语言模型互动的特殊性。

    随后,我们介绍了一些方法和框架,我们发现这些方法和框架有助于制作有效的 prompts 。这些方法可以而且应该并行地应用,就像它们在所有形式的人类话语中交织在一起一样。一般来说,强化所需行为的冗余度越多越好,这可以说是由 few-shot format 的有效性所证明的。

    由于我们的经验主要来自与 GPT-3 的互动,在下面的章节中,我们直接和间接地提到了 GPT-3 的能力和行为。然而,我们相信这些方法可以推广到 prompting 任何在大规模人类撰写的语料库上训练的自回归语言模型。

19.2.2 直接的任务规范:构建 signifier

  1. pre-GPT-3 模型由于其对世界和人类概念的建模有限,在理解任务的抽象描述方面的能力要小得多。GPT-30-shot prompts 上的令人印象深刻的表现表明了直接任务规范(task specification )的新的可能性领域。

    直接任务规范是一个 0-shot prompt ,它告诉模型执行一些该模型已经知道如何做的任务。直接任务规范包括为任务构建一个 signifiersignifier 是一种模式,它决定了预期的行为。直接任务规范可以是任务的名称,如 "翻译";也可以是一个复合描述,如 "重新表述这个二部图,使二年级学生能够理解它,通过强调在现实世界的应用";也可以纯粹是上下文,如 Figure 1 中简单的冒号 prompt 。在这些情况下,signifier 都没有解释如何完成任务、或提供预期行为的示例;相反,它显式地或隐式地调用它认为语言模型已经学会的 functions

    直接任务规范可以监督无穷无尽的隐式样本,就像一个无限序列的闭式表达式(closed-form expression),使得它们非常强大和紧凑。例如,"translate French to English" 这句话监督于所有可能的法语短语到英语的映射所构成的集合。

  2. 一个大型的语言模型,像一个人一样,也学会了一些行为,在这些行为上如何构建一个直接的 signifier 是不太明显的。通过示范(demonstration )和代理(proxy )的任务规范可能是激发这些行为的可行的替代策略。

19.2.3 通过示范的任务规范

  1. few-shot examples 对于任务规范是有效的,因为具有不同参数的 function 的连续重复模式是自然语言中常见的。与以前的模型不同,GPT-3 鲁棒地学习了语言的这一属性,并且能够在示例从所有上下文中移除的情况下应用它。与直接规范一样,通过示范来规范任务也是 GPT-3 的一种可能性。

    有些任务用示例来传达是最有效的,比如当任务需要一个 be-spoke 的格式时,描述示例的语言比描述任务本身所需的 meta-language 更容易理解。

    需要注意的是,与微调不同的是,few-shot 中的"training examples" 是作为一个整体来处理的,不一定会被解释为并行的和独立的。informative context 或大量的示例可以帮助缓解 Examples don’t always help 中提到的 few-shot 的问题。例如,一个prompt 可以将示例嵌入到一个上下文中,使上下文清楚地表明这些示例是一个 function 的独立实例,而不是一个应该被推断的序列模式。一般来说,无论是从人的角度还是从语言模型的角度,示例在上下文中都是更有效的和更有信息量的。

19.2.4 通过记忆性代理的任务规范

  1. 人类交流中使用的另一种方法是代理或类比(analogy ),其中一个记忆性的概念(memetic concept ),如一个人物或特性被用作一个意图的代理,后者可能是相当复杂的或细微的。GPT-3 显示了对类比的细微理解。通过代理的规范在机制上类似于直接规范,只是 signifier 从记忆空间/文化意识中提取行为,而不是直接命名行为。

    例如,你可以问圣雄甘地、安-兰德、埃利泽-尤德考克斯,而不是直接指定回答道德问题的确切标准或使用示例。每个人不仅会有复杂的偏见,而且会对问题的内容做出假设,这可能需要几段文字来证明或描述。GPT-3 对知名人物的模拟能力和抽取文化信息的能力远远超过了大多数人的能力(《GPT-3 Creative Fiction》),所以这种方法对编码复杂的(尤其是开放式的)任务特别有用。由于 GPT-3 很适合在叙事的上下文中进行嵌入,叙事中的无限自由度也可以用来进一步塑造行为。

    另一个有效代理的例子是上演老师和学生之间的对话。假设你想和 GPT-3 讨论一些事情,你关心的是它应该非常彻底地、简单地解释事情,并在你错误的时候指出来。你可以说 "be very thorough, explain things simply, and point out if I’m wrong" ,但这也可能导致一个幽默的对话,即它总是说你错了,并对你的不理解越来越恼火。更可靠的做法是将讨论呈现为学生和老师之间的讨论,这是一种典型的情况,在这种情况下,所需的属性已经隐含在其中,并且由于记忆的强化,更有可能保持稳定。

19.2.5 作为约束行为的 Prompt Programming

  1. GPT-3 这样的语言模型的朴素的拟人化的失败方式是这样的:对 prompt 产生的概率分布不是某个人延续该 prompt 的方式的分布,而是任何一个人都可以延续该 prompt 的方式的分布。一个上下文模糊的 prompt 可能会以相互不连贯的方式继续下去,就像由不同的人在任何合理的上下文中延续 prompt 一样。

    GPT-3 这样的大型生成模型的全能性意味着,如果有各种可能延续 prompt 的方式(包括所有人类操作者不愿意的方式),它将以多种方式对 prompt 做出反应。因此,从约束行为的角度来处理 prompt programming 是很有帮助的:我们希望 prompt 不仅与所需的延续一致,而且与不需要的延续不一致。

    考虑一下下面的 prompt

    这种 prompt 在限制可能的延续到预定任务方面做得很差。最常见的失败模式是,模型的输出不是英语,而是另一个法语句子。在法语句子后面添加一个换行符将增加下一个句子是英语翻译的几率,但是下一个句子仍然有可能是法语,因为 prompt 中没有任何内容可以排除一个多行短语成为 translation subject 。将 prompt 的第一行改为 "Translate this French sentence to English" 将进一步提高可靠性;在法语句子周围加上引号也是如此,但也可能输出通过引号包围的一段法语(比如,作为法语对话的一部分)。最可靠的是创建一个句法约束,其中任何合理的延续只能是预期的行为,就像 Figure 1 的简单冒号 prompt 、以及 Figure 2 master translator prompt

    这个简单的例子是为了 frame 一个对 prompt programming 的动机至关重要的问题:什么样的 prompt 会导致预期的行为,而且只导致预期的行为?many-shot prompts 的成功可以通过这个角度来重塑:如果 prompt 由一个函数的众多实例组成,那么延续很可能是这个函数的另一个实例;而如果只有一个或几个实例,那么继续符合模式的可能性就较小。

19.2.6 封闭式问题的序列化推理

  1. 对于需要推理的任务来说,prompts 以求真模式(truth-seeking patterns )指导语言模型的计算是至关重要的。

    如果问题迫使裁决由模型的延续的第一个 token 来决定,那么计算将受限于单次前向传递。可以合理地预期,某些任务可能在单次传递中难以计算,但如果将其分解为可单独处理的子任务,则可以解决问题。

    当人类被给予一个封闭式测试时,通常期望在确定答案之前, subjectworking memory 或草稿纸上进行计算。看不见的计算可能涉及重新表述问题、概述一个过程、排除答案选项、或将隐式信息转化为显式形式。当我们强迫模型在单次前向传递中产生答案时,我们剥夺了它进行类似的 "working memory"或 "草稿空间"(scratch space ) 的能力,这些能力可以进行这种操作。

    与其开放式的延续所暗示的强大理解能力和广博知识相比,GPT-3 在封闭式问题上的表现并不出色。例如,在这个多任务数据集(《Measuring massive multitask language understanding》)上,它在某些部分的得分几乎只是随机猜测的水平。我们怀疑这部分是由于这种格式迫使在延续的第一个 token 上做出决策。

  2. 封闭式评估是必要的,因为当前的方法不支持在大型数据集上进行评估,也无法对使用开放式问题的模型进行直接比较。然而,为了更好地了解模型的能力,我们寻求更能反映系统全部能力的评估方法。我们不必改变基准测试,而是可以改变语言模型与其互动的方式。

    这个问题在之前的研究中已经被认识到,之前的研究试图通过使用专门的神经网络架构来实现串行推理(《Low-resource generation of multi-hop reasoning questions》《Multi-step Reasoning via Recurrent Dual Attention for Visual Dialog》)。我们努力通过仅使用prompt programming 来达到同样的效果。

    对于像 GPT-3 这样的 Transformer 模型,利用 "草稿空间" 的潜在方法包括逐步过程、自我批评(辩论)、以及通过详细阐述问题来激活正确答案的关联性。已经证明,能够让 GPT-3 将数学问题分解为多步骤的 prompts 是有效的(《You Can Probably Amplify GPT3 Directly》《Seems to work》)。这些演示涉及到人类通过交互式引导 GPT-3 的程序。

    需要 human-in-the-loop 限制了此类基准测试和大规模应用的适用性,但是我们提出,对于许多任务来说,在通过 extending reasoning 来扩大 GPT-3 的能力方面,人类互动和 task-specific prompts 都不是严格必要的,因为 GPT-3 已经了解许多程序和元程序(meta- procedures )用于演绎地处理问题。在这些情况下,prompt programming 的作用再次是 signify 序列推理任务。例如,"For a problem like this,",这样的种子通常足以指示模型考虑任务的类别并将其分析为各个组成部分。

  3. extending reasoning 时,要避免过早做出决策是至关重要的,否则所有后续计算只会为已经选择的决策进行合理化,而不会提高决策准确性的概率。例如,"Let’s consider each of these answer choices" 这样的 prompt 有助于引导推理的流程朝正确的方向发展。

    放松对立即决策的限制引入了额外的控制挑战:我们希望延迟决策,但仍然需要以可程序化的形式被检索。动态响应长度使得推理过程何时结束变得不确定;也不能保证决策会以预期的形式或压根就没有决策。每当语言模型对其自身的 prompt 做出贡献(连续的自回归步骤而无需干预),就存在偏离预期任务的风险。

    可以通过停止生成并插入类似于 Thus, the correct answer isprompt fragment 来强制产生一个闭合形式的决策。但是,在插入之前要生成多长时间?在本文的例子中,我们通过使用 GPT-3 来解决这个问题,在每个 generated token 之后计算 multi-part promptnext segment 的条件概率。在 segment"Thus, the correct answer is" 的情况下,其反事实的可能性信号指示了程序是否已经结束。当这个信号达到最大值时,我们插入该 segment 来强制产生一个决策。

    一种限制偏离的方法是使用 fill-in-the-blank prompt templategenerated sections较短,从而保持模型的正确性,同时保持广泛适用性(Figure 6 )。这对于控制双向 Transformer 模型(如 BERT )尤其有前景。

19.2.7 Metaprompt Programming

  1. prompt programming 的最大局限性在于:针对特定类型任务来设计 prompt 的困难性、以及缺乏自动化方法来设计 promptprompt programming 需要人力投入大量时间,因为 task-agnostic prompts 往往比针对特定任务的 prompts 效果要差得多。这促使我们创建自动化方法来生成 task-specific prompts 。先前的研究尝试使用独立的模型生成有效的 prompts《A Call for Clarity in Reporting BLEU Scores》)。

    相反,我们提出通过 metaprompts 来利用语言模型本身。metaprompt 是一种概括更一般意图的种子,当与其他信息(如任务的问题)结合时,会展开成具体的 prompt

    metaprompt 可以是一个短语,比如 "This problem asks us to",它通过提示问题的意图,为解决问题的步骤提供连续的解释。另外,metaprompt 可以采用 fill-in-the-blank template 的形式,它限制了响应沿着预定的过程,但允许模型填写问题特定的细节。

    metaprompt 示例(Figure 3 ~ 5 )是使用 GPT-3OpenAIAPI 生成的(engine=davinci, temperature=0 )。在这些示例中,metaprompt 充当特定问题的 "wrapper"。任务问题是 unformatted 的,metaprompts 以粗体显示,由 GPT-3 生成的文本以蓝色显示。

    这就是 Chain of Thought Prompting: COT 的思想。只是 COT 用于 zero-shot,而这里用于生成示例从而进一步用于 few-shot

19.3 未来方向

  1. 本文是探索性的,是对未来研究 prompt programming 理论和创建自动化 prompting 方法的呼吁。

    prompt programming 是一个新生的、高度相关的研究领域,需要跨学科的知识和方法。我们正在进入一个新的人机交互模式,任何精通自然语言的人都可以成为一个程序员。我们希望看到 prompt programming 本身成长为一门学科,并成为理论研究和定量分析的对象。

  2. 解耦 meta-learningtask location:前面讨论的 French-to-English 翻译中使用的评分方法(BLEU )仅对大型数据集给出平均分数。我们没有分析得分分布的其他信息。在我们的实验中,我们发现 0-shot 失败(使用 OpenAIzero-shot prompt )通常是灾难性的。也就是说,翻译任务甚至没有被尝试。例如,我们注意到模型会继续用法语输出另一个句子,或者输出空白或下划线,好像答案应该由学生填写。

    假设这些示例是在执行 task location ,这表明如果将灾难性的失败从分数中去除,0-shot prompts64-shot prompts 的性能将变得更加相似,如果不是相等的。此外,我们怀疑 1-shot prompts 的性能会明显低于 0-shot prompts64-shot prompts ,这是由前面讨论的内容泄漏、以及错误概括等现象引起的。

  3. benchmarking 的新方法:更通用和强大的语言模型使得更广泛的基准测试方法成为可能和必要。

    • 隔离灾难性的失败:我们建议在可能区分任务失败的尝试、以及任务未被尝试的情况下,基准测试报告中同时提供有灾难性失败、以及没有灾难性失败的得分。这提供了关于性能不完美的潜在原因的信息,并有助于识别可能没有可靠传达任务的 prompts

    • 用于评估的 metaprompts :开发有效的 meta-prompt templates 将允许在封闭式的问题上进行大规模的自动化评估,同时仍然允许一定程度的开放式推理。这对于测试自回归语言模型在超越简单的事实记忆(fact recall )之外的推理能力(例如解决数学问题和物理问题)是至关重要的。

      由于依赖于多个自回归步骤,metaprompts 固有地伴随着脱轨的风险。一个 meta-prompt 的可靠性和有效性必须在它可能适用的一系列任务上进行评估,最好是在一系列模型上进行评估。应进一步探索控制脱轨的技术,如 fill-in-the-blank templates

    • 用于评估的语言模型:随着语言模型变得越来越强大,使用其他语言模型评估对开放式基准问题的回答质量变得可行。对于许多任务(例如 NP-complete 问题),验证解决方案的正确性要比产生正确的解决方案更容易。例如,我们观察到,GPT-3 更可靠地注意到一个段落是否奇怪或包含错误,相比较于它能够生成没有错误的非奇怪段落。

    • 游戏:由于复杂的语言模型有能力创建虚拟环境的世界模型,我们建议使用基于文本的游戏作为复杂能力的测试。可以使用预先编写的基于文本的游戏来测试世界建模和代理的各个维度,例如 problem solving 、信息收集和社交智能(包括欺骗)。虚拟环境可以用于测试语言模型的世界模型的质量和一致性,例如对象持久性、或准确预测玩具环境中事件的物理后果或社交后果的能力。

      设计可靠地探索预期能力的游戏需要先进的 prompt programming 技术。随着人工智能系统在有效代理方面的增加,设计虚拟游戏将对安全评估能力变得越来越关键。

二十、Scratchpad[2021]

论文:《Show Your Work: Scratchpads for Intermediate Computation with Language Models》

  1. 基于 Transformer 的大型语言模型表现出令人惊讶的能力,包括生成代码从而解决简单编程问题的能力(《Evaluating large language models trained on code》《Program synthesis with large language models》)。然而,这些模型在进行 multi-step 算法的计算时很吃力,尤其是那些需要精确推理和无限制计算的算法。例如,GPT-3 在对超过三位数的数字进行 few-shot 加法时很吃力(《Language models are few-shot learners》)。同样,大型语言模型也很难预测 Python 代码的运行结果,即使是模型能够解决的编程任务的 Python 代码(《Program synthesis with large language models》)。同样,标准的递归神经网络和图神经网络在预测带有循环的简单程序的输出时,也不能系统地进行泛化(《Learning to execute programs with instruction pointer attention graph neural networks》)。因此,语言模型在某种程度上可以编写代码,但似乎不能准确地表达他们所编写的代码的语义,因为他们不能预测代码的执行。这促使人们研究能够进行算法推理(algorithmic reasoning )的网络(《Neural turing machines》《Learning to execute》《Learning to execute programs with instruction pointer attention graph neural networks》)。准确表示程序语义的神经网络可以实现各种下游任务,包括程序合成(《Robustfill: Neural program learning under noisy》)、程序分析(《Learning to represent programs with graphs》)和其他算法推理任务(《Neural algorithmic reasoning》)。

    为什么大型语言模型会在算法推理任务中挣扎?我们认为,这至少部分是由于 Transformer 架构应用于这些任务的方式的局限性:模型被要求在一次 forward pass 中执行这些任务。考虑到固定的层数和固定的计算时间,该模型无法在产生输出之前根据问题的难度调整计算量。之前的工作(《Adaptive computation time for recurrent neural networks》《Pondernet: Learning to ponder》)已经探索了显式地允许动态选择计算时间从而用于不同子任务的神经架构。在这项工作中,我们提出了一种不同的方法,该方法可以利用现有的 Transformer 架构和大型的 few-shot-capable 语言模型:我们修改了 task design 而不是修改模型或修改训练程序。

    我们的建议很简单: 允许模型在产生最终答案之前产生一个任意的 intermediate tokens 序列,我们称之为 scratchpad 。例如,在加法问题上,scratchpad 包含一个标准的 long addition 算法的中间结果(见 Figure 2 )。为了训练模型,我们将算法的中间步骤编码为文本并使用标准的监督训练。

    本文贡献:

    • 我们为 Transformers 引入了"scratchpad" 的概念,从而使其在不修改底层架构的情况下更好地进行复杂的离散计算。

    • 我们表明,scratchpad 帮助 Transformers 学会在微调的环境中执行 long addition ,特别是它们改善了对更大的问题实例的 out-of-distribution generalization

    • 我们还发现,scratchpad 帮助 Transformers 完成了一个更高层次的任务:多项式求值。这一点在 few-shot 环境下和微调环境下都是如此。

    • 最后,我们转到一个更普遍的背景,并表明,训练 Transformers 逐行发出带有局部变量标注的 full program traces ,极大地提高了他们在特定输入上执行给定的计算机程序的结果预测的能力。这一应用在某种意义上取代了其他的应用。

    当在微调的场景下应用时,需要人工为每个样本撰写 scratchpad,这个代价有点高。当在 few-shot learning 场景下应用时,只需要为每一类任务撰写一个 prompt,但是效果更差。

  2. 相关工作:

    • 本文的任务可以看作是对大型语言模型的一种探索性的批评,即它们在多大程度上只是依赖文本上的表面的统计关联,而没有学习语义知识或世界知识(《Climbing towards NLU: On meaning, form, and understanding in the age of data》)?对此,《Implicit representations of meaning in neural language models》提供证据表明,pre-trained 语言模型确实构建了它们在文本中所描述的情况的语义的近似 representations

      在程序方面,《Program synthesis with large language models》 通过探索 MBPP 上的 learning to execute task 来接近这个问题,我们文章中考虑了这个问题。这个任务背后的想法是探索用于生成代码的神经模型是否也能执行它。虽然这项工作发现现有的模型在执行结果的预测方面表现不佳,但我们表明,增加一个 scratchpad 可以使这些模型表现得更好。

    • learning to execute 方面的工作考虑了:现成的递归神经网络或更专门的架构是否具有inductive bias 从而足够适合执行和推理任意代码。neural algorithm induction 的相关问题引起了人们的极大兴趣。这项工作提出了新的神经架构,其灵感来自于计算的理论模型,其 inductive bias 使模型更容易学习 algorithm induction 任务。有几种 algorithm induction 的方法专门为序列模型添加了自适应计算时间。具体而言,universal transformer: UT 包括自适应计算时间,并在 algorithm inductionlearning to execute 任务上进行评估(《Universal transformers》)。相比之下,scratchpad 是一种简单的方式,既可以提供具有自适应计算时间的 transformer 模型,也可以提供关于如何使用该额外计算的监督,而不需要修改底层架构。

    • algorithm induction 也与 pre-trained 模型有关。《Pretrained transformers as universal computation engines》表明 Transformer 在某种程度上可以被用作通用计算引擎,通过对自然语言进行预训练,并在非语言任务(包括简单的 algorithm induction 任务)上微调一小部分权重。最后,语义解析的监督方法可以预测 database query 的文本,然后执行该 query 来回答自然语言问题。

20.1 方法

  1. 在这项工作中,我们考虑两个相关的问题:algorithm inductionlearning to execute 。这两个问题的目标都是让神经网络学会模仿一个函数 f ,这个函数是 "算法性的" 是指:从 input-output 行为上,它可以由一个简短的程序来表示,比如加法或多项式求值。

    • neural algorithm induction 中,目标是学习单个算法,每个训练样本给出单个输入和预期的输出,输入和输出以字符串表示。因此,训练数据是 D={xi,f(xi)}i=1N

    • 对于 learning to execute ,我们希望模型能在一些输入上产生程序(以源代码来表示)的结果。如果每个 πi 是程序 fi 的源代码,那么训练数据就是 D={(πi,xi,fi(xi))}i=1N。每个 fi 有多个 input-output 样本是很常见的,但为了简化符号,我们省略这个。

      这意味着多个算法,每个算法对应一个源代码 πi

  2. 本文的主要观点是,为了解决一个给定的算法任务,我们只需将算法的 intermediate steps 编码为文本,并训练模型将其发射到一个 buffer ,我们称之为 "scratchpad" 。例如,让我们考虑学习 long additionalgorithmic induction 任务。为了教一个模型学会 29 + 57 ,一个训练样本可能看起来像 Figure 2 中的文字,其中明确写出了 long addition 算法的步骤。

    learning to execute 任务也可以用类似的方式进行编码,只是现在我们在 inputscratchpad 、以及预期输出之前加上了源代码 πiFigure 1 显示了一个 learning to execute 任务的训练样本。

    在训练时,模型将被提供 input 以及 target 从而用于标准的 likelihood-based 训练。在测试时间,模型将只被提供 input,并被要求预测目标,例如,通过 beam searchtemperature sampling 。原则上,任何序列模型都可用于此。在这项工作中,我们选择使用 decoder-only Transformer 语言模型,但其他序列模型也可能是有效的,如 encoder-decoder 模型( T5 ),或 RNN

  3. 添加一个 scratchpad 有几个潜在的优势:

    • 首先,该模型具有自适应的计算时间,也就是说,它现在可以根据任务在给定输入条件下的复杂性,在必要的时候处理信息。

      越复杂的任务,其 intermediate steps 越大,那么计算时间越长。

    • 第二,模型可以将其计算的中间状态存储在 scratchpad buffer 中,并通过关注其上下文来引用它。这消除了在 activations 中存储所有中间状态的需要。

    • 第三,通过迫使模型通过从生成模型中采样来输出具体的中间状态,我们旨在减少 small errors 的传播和复合,因为中间状态被量化为 token embeddings

    • 最后,检查模型的 scratchpad output 可以帮助我们识别常见的错误,并通过修改 scratchpad 的格式来纠正它们。我们发现这种解释错误的能力在这项工作中很有用。

  4. 在所有的实验中,我们使用了 pre-trained dense decoder-only Transformer 语言模型,规模从 2M137B 参数不等。这些模型在网络文档和对话数据上进行了预训练,并与 《Program synthesis with large language models》 使用的模型相对应。

20.2 实验

20.2.1 加法

  1. 作为第一个任务,我们考虑整数加法。baseline 加法任务将两个数字作为输入,目标是它们的总和。比如说:

    我们通过在 target 中包括 long addition 算法的中间步骤来实现 scratchpad ,如 Figure 2 所示。我们在具有 1 ~ 8 个数字的输入的整数加法问题上训练几个模型。然后我们对 in-distribution 加法问题(最多 8 位数的输入)和 out-of-distribution 加法问题( 9 位数和 10 位数的输入)进行性能测试。这些模型在 100K 个样本上进行了微调了 5K 步,batch size = 32in-distribution 测试样本有 10k 个,对于每个 out-of-distribution 任务都有 1K 个测试样本。我们研究了性能与模型大小的关系,模型规模从 2M1B 参数。我们将模型性能与 baseline 进行比较,其中 baseline 不包含 scratchpad

  2. 结果: Figure 3 比较了 scratchpad 算法和 baseline 的性能。我们看到:

    • 在超过临界模型规模的情况下,模型能够使用 scratchpad 解决加法任务,而没有 scratchpad 来训练的模型即使在最大的模型规模下也无法做到这一点。

    • out-ofdistribution 的任务( 9 位数加法、10 位数加法)中,我们发现没有scratchpad 来训练的模型完全失败,而用 scratchpad 来训练的模型随着模型大小的增加而显示出持续的改进。

20.2.2 多项式求值

  1. 接下来我们专注于一个稍微 higher-level 的任务:多项式求值。受 《Analysing mathematical reasoning abilities of neural models》 中 "多项式评估" 子问题的启发,我们生成了一个阶次小于或等于 3 的多项式数据集,其系数为整数,输入被限制在 [10,10] 的范围。我们还将输出限制在 [1000,1000] 的范围内。我们生成一个由 10000 个多项式组成的训练数据集、以及一个大小为 2000 的测试数据集。 Figure 4 显示了这个任务的一个示例的 scratchpad target ,多项式的每一项都被独立地求值。

    和上一节一样,我们将直接执行的结果与使用 scratchpad execution 的结果进行比较。在这个实验中,我们使用一个 137B 参数的 pre-trained decoder-only 模型在 few-shot setting 下进行评估,因为以前的工作表明,非常大的模型可能能够以 3 位或更少的位数的 few-shot 来执行加法和乘法(GPT-3 )。我们在 few-shot prompt 中使用 n=4 个示例问题。

    我们还用一个 8B 参数的模型在训练集上微调了 2000 步来评估fine-tuning setting 。这两项评估的结果都显示在 Table 1 中。我们发现,无论在 few-shot 还是在微调的 setting 下,scratchpad execution 都明显优于直接执行。

20.2.2 执行 Python 程序

  1. 我们已经表明, scratchpad 可以帮助 algorithm induction ,也就是说,它们可以帮助模型在 direct algorithm-specific supervision 下学习实现特定的算法。但是,需要为每个新任务手工设计中间状态是次优的。在本节中,我们评估了模型是否可以通过执行任意代码来学习实现一种新的算法。为了测试这种能力,我们沿用了 《Program synthesis with large language models》 的问题设置,其中要求语言模型预测在给定输入上执行给定 Python 程序的结果。语言模型在这项任务中表现不佳,即使是在那些模型能够解决的编程任务的程序上(即,语言模型能够补全该程序的代码)也是如此。在这里,我们展示了 scratchpad 技术可以极大地提高语言模型执行程序的能力。

    • Direct execution prediction:我们的主要 baseline《Program synthesis with large language models》 探讨的直接执行预测程序。向模型展示一个函数的源代码,并要求模型预测在特定输入上运行该函数的输出。例如,Figure 1 中的函数将一个字符串 s 和一个字符 ch 作为输入,并从字符串 s 中删除字符 ch 的第一个实例和最后一个实例。这个任务的 direct execution prompt 和目标显示在 Figure 1"Direct Execution Prediction" 框中。如果模型正确地输出了目标字符串,那么这个任务就被认为在这个情况下得到了解决。

    • Execution prediction via scratchpad tracing:如上所述,direct execution prediction要求模型在单个 forward pass 中正确输出整个函数的执行结果。在 《Program synthesis with large language models》 的研究中,direct execution predictionPython 程序上表现不佳。因此,我们设计了一个执行任务的 scratchpad formulation ,其中模型通过首先预测程序执行期间计算的中间状态序列从而来预测程序的输出。

      形式上,我们训练模型来预测一个交替的序列:被执行的源代码行的顺序、每一行执行后的局部变量的状态。我们称这个对象为program’s trace ,它允许我们跟踪控制流(所执行的操作的序列)、以及每个操作后的状态变化。我们将 trace 表示为一个字符串,其中复制代码行,并将状态信息表示为一个 JSON 字典。例如,Figure 1 中的 "Scratchpad Tracing" 框包含了上面讨论的函数的 tracing prompttrace target

      具体来说,对于每一个要被 traced 的函数,其 prompt 是由两部分拼接而成:

      • 打印 function definition 得到的字符串。

      • 一行字符串表示在特定的输入上调用该函数:output = fn_name(input_value) ,其中 fn_nameinput_value 被替换成相应的函数名和输入值。

      Figure 1 中,注意 remove_Occ("PHP", "P") 的正确输出是如何显示在 trace 的最后一行,并分配给变量 "output" 。如果最后一行中分配给变量 output 的值与目标输出值(这里是 "output": "P" )的语义相符,则认为该 tracing example 具有正确的执行输出。如果所有给定的 input-output 样本都能正确执行,我们就认为一个任务是正确执行的。

      我们还可以通过以下方式测试 model predictionground truth trace 之间是否存在 "trace exact match" :将 trace 中的每个状态与 ground truth trace 中的相应状态进行语义地比较、将预测的源代码行的序列与 ground truth sequence 进行比较。

  2. 实验设置:作为一个概念验证,我们首先表明 scratchpad tracing 极大地提高了合成 Python 数据上的执行性能。然后,我们在 《Program synthesis with large language models》 的人类编写的 Python 问题上比较了 scratchpad tracingdirect execution 。我们发现,一种新的数据增强技术,即使用模型生成的程序作为额外的训练数据,可以显著提高真实数据上的 tracing 性能,然而这种增强技术会损害 direct execution 的性能。最后,我们表明,从其他来源纳入 tracing data 可以进一步提高 tracing 性能,这表明这里探索的 scratchpad tracing 技术可以很好地扩展更多数据。

    Python 代码的所有实验中,我们使用了一个具有大约 137B 参数的 Transformer 模型,上下文窗口大小为 1024 tokensgeneration 限制为 512 tokens 。除非另有说明,所有的微调运行都使用了 batch size = 8182 tokens3e-5 的学习率,模型推理是在解码温度 T=0 的情况下进行的(相当于贪婪解码)。

a. 在合成的 Python 程序上 Scratchpad 击败 Direct Execution
  1. 在我们的第一个实验中,我们在简单的合成 Python 程序上测试了我们的模型的 few-shot 和微调的执行能力。这为我们的 tracing 技术提供了一个概念验证。

    我们使用了从 《Learning to execute programs with instruction pointer attention graph neural networks》 修改的合成Python 程序数据集。这些程序包括小整数(0、1、2)、简单的 while 循环和if 语句。我们构建了一个合成程序的语料库,以模仿《Program synthesis with large language models》MBPP 数据集的规模,其中有 400 个训练程序、100 个验证程序和 200 个测试程序。对于每个程序,从 0 ~ 9 的范围内采样三个随机整数输入。

    我们测试了在 few-shot 和微调条件下的 direct executionscratchpad tracing 。对于 few-shot 实验, prompts 包含三个以前的 tracing 问题的示例,如附录 C 所示;对于微调实验,我们对模型进行微调,使其在 training split 上收敛,这是由验证集的困惑度来判断的。

    对于 few-shot scratchpad 实验,我们注意到模型不会将变量名 output 分配给 trace 中的 final value ,而是继续使用 v0 (函数 f 中返回的变量名)作为 final output line 的变量名。因此,我们修改了 accuracy 标准,从检查 trace 的最后一行的output 的值是否正确,改为检查 v0 的值是否正确。(在朴素的评分标准下, few-shot tracing accuracy 大致为零。)这种行为的一个例子见附录 D

  2. 结果:Table 2 显示了我们在合成 Python 问题上的结果。不管是在 few-shot 还是微调的情况下,scratchpad tracing 技术都能在 200 个测试问题上带来更高的 overall execution accuracy 。微调对 scratchpad tracing 技术的性能改善也比 direct execution 的改善要大。

b. 在真实的 Python 程序上 Scratchpad 击败 Direct Execution
  1. 在我们的第二组实验中,我们探索了与在真实数据上 direct execution 相比,scratchpad execution 的表现如何。我们的主要评估数据集是 MBPP 数据集。MBPP1000 个编程问题组成,每个问题包含一个自然语言规范、一个ground-truthPython 程序和三个 input-output 测试案例。这些程序涉及使用很多类型的计算,包括整数类型、字符串类型、浮点数类型、字典类型、元组类型等,并包括许多语言特征和控制流结构,如循环、comprehensions 、库导入、API 调用和递归。MBPP 数据集的 evaluation split 包含 500 个任务。为了分离出 generation window size 的影响,我们对这些任务的子集报告了所有的评估指标,对于这些任务来说,ground-truth trace 针对所有的这三个input-output examples 符合模型的 generation window 。这就留下了 212 个测试任务的一个子集。对于基于 Transformer 的模型来说,增加 generation window lengthcontext window length 是一个重要的问题,但我们认为它是正交的,并把它留给未来的工作。

  2. 在极低数据量的情况下性能很差:在我们对 MBPP 数据的第一次实验中,我们在 374 个训练任务(每个任务有 3 个样本 ,所以总体上有 1122 个样本)上训练一个 scratchpad tracing 模型。我们放弃了所有超过 context window 的训练样本。我们将总体执行结果与在同样的 374 个训练任务上训练的 direct execution 模型进行比较。Table 3 中标记为"MBPP" 的列显示了这个实验的结果。scratchpad execution 模型和 direct execution 模型都没有取得良好的性能( output 准确率分别为 5%10% ),而 direct execution 的性能优于scratchpad execution

  3. 采样的程序是很好的 scratchpad 训练数据:接下来,我们采用了一种数据增强技术来增加训练数据集的规模: 如 《Program synthesis with large language models》 所述,我们首先使用预训练好的 137B 模型在 374MBPP 训练任务上运行 few-shot synthesis 。对于每个任务,我们在温度 T=0.5 时从模型中采样并记录 80 个候选程序 {Ps}。然后,我们可以使用候选程序 Ps 、任务的原始三个输入 {xi}i=1,2,3、以及在原始三个输入上运行候选程序所产生的三个新输出 {yi,new}i=1,2,3 来创建一个新的 execution 数据点,其中 yi,new=Ps(xi)。我们丢弃任何执行结果为错误的候选程序。请注意,yi,new 的输出可能等于也可能不等于原始输出,这取决于被生成的程序 Ps 所进行的计算。 因此,与原始数据集相比,这个被增强的 direct execution 数据集既有额外的新程序、又有新的输出。

    我们可以通过 tracing 每个候选程序 Ps 在每个 xi 上的执行情况,为我们的 scratchpad execution 模型创建一个类似的 tracing 数据集。这个过程产生了更大的 tracing and execution 数据集,有 17K 个新程序,我们称之为 MBPP-aug

    从概念上讲,我们利用已有的工具组合来增强数据集,即:神经模型、通过 Python 解释器的 program execution。我们在这个新的增强数据集 MBPP-aug 上对 direct executionscratchpad execution 进行微调,使用的过程与上述相同。

    Table 3 中的 "MBPP-aug" 列显示了这个实验的结果。虽然 direct execution 方法在对这些额外的数据进行训练时,准确率有所下降,但 scratchpad execution 的性能得到了极大的提高:在增强数据上训练的模型所解决的任务数量,是只在原始 MBPP 程序上训练的模型的三倍以上。我们还注意到,如果我们衡量整个样本的原始正确性,该模型已经达到了 26.8%exact trace match ,这是令人惊讶的高。

  4. scratchpad training 能很好地利用大型数据集:在这一节中,我们研究从人类编写的程序中收集额外的 tracing data 是否能进一步提高 tracing 性能。这将使我们了解,当略微 out-of-distributiontracing data 被添加到微调集合时, tracing 程序是否有可能很好地扩展。我们使用两个数据集进行实验:

    • Single-line programs:这个数据集包括大约 9M 个单行 Python transformations 的样本。Figure 6 (top) 显示了这些 transformations 的例子。每个 transformation 都包括一组初始变量和相应的值、一行 Python 代码(这些共同构成了输入)、以及运行这一行后产生的新的变量和值(即,target )。在 single-line data 上进行训练时,我们不引入中间的 scratchpad steps 。由于这个数据集没有提供 high-level 的、多行控制流的样本,但该数据为建模单个代码行的执行提供了良好的监督,而单个代码行的执行是 tracing 的一个关键组成部分。这些数据是由 Fraser Greenlee 收集的,可以在 https://www.kaggle.com/datasets/frasergreenlee/python-state-changes 访问。

    • CodeNetProject CodeNet 数据集由数百万用户提交的大约 4000 个编程问题组成。这些提交的信息包括对编程问题的正确和不正确的解决方案。然而,从上述 MBPP-aug 的实验中,我们知道,不正确或 broken 的程序仍然可以提供有用的训练信号。我们还改进了我们的 tracing 技术从而允许 trace 有错误的程序;当达到一个错误时,错误信息会被添加到 trace text 的末尾,tracing 也会停止。我们从 CodeNet 数据中共提取了 670,904 traces

    对于每个数据集,我们首先在这些数据集上微调模型,然后在 MBPP-aug 上进行第二次微调直到收敛。

    结果显示在 Table 3 中。如上所述,我们报告了跨任务的 execution accuracy 。我们还报告了跨任务的 trace accuracy ,以了解整个 trace 被准确预测的程度。我们还报告了所有测试样本的原始 execution accuracytrace accuracy ,作为比较模型的额外指标。

    • 单独对 single-lineCodeNet 数据集的训练似乎都比 MBPP-aug 有所增益(分别提高了 23.4%25.2% 的任务执行正确)。

    • 然而,结合 CodeNet 数据集和single-line 数据集似乎能带来最高的性能:对于 26.6% 的任务,tracing 产生了正确的 final output ;将近四分之一的任务(24.6% )在所有三个例子中都被完美的被 traced

    这些结果似乎很有希望:神经网络通常可以准确地 trace 程序。具体而言,从最佳模型中贪婪地解码,对几乎 42%traces 产生了完全正确的 trace

20.3 局限性和未来工作

  1. Context window size:在这项工作中,我们将实验限制在 scratchpad text 相符合的 model generation window512 tokens )的问题上。然而,许多问题需要非常长的 scratchpad generation 。因此,充分实现 scratchpad 技术的潜力可能需要进一步改进 transformer generation window size 。这是 NLP 中一个活跃的研究领域,这方面的改进将有利于 scratchpad 技术的应用。

  2. 学习在没有监督的情况下使用 scratchpad:下一步显然是尝试在没有 direct supervision 的情况下学习使用 scratchpad 。一个简单的方法是使用强化学习技术:模型正确回答问题将得到奖励,奖励与所使用的 scratchpad tokens 数量成反比。我们希望学习使用 scratchpad 是一种可迁移的技能;例如,一个模型有可能使用它所学到的 long addition 算法,从而成功地迁移到进行多项式计算。

二十一、Can language models learn from explanations in context? [2022]

论文:《Can language models learn from explanations in context?》

  1. NLP 中出现了一个新的范式:语言模型的 few-shot prompting 。大型语言模型似乎表现出一些 in-context learning 能力,例如它们可以推断出如何执行一项新的语言任务的 few-shotGPT-3 ):从几个 (input, output) pairs 的样本(作为模型的上下文窗口)中推断出来,但不需要训练。例如,这些模型可以通过上下文中的几个相关问题和正确答案的样本,更准确地回答简单问题或进行算术任务。虽然并不总是清楚从这些 prompts 中学习出什么或推断出什么,但 prompting 是一个不断增长的子领域 (《Pretrain, prompt, and predict: A systematic survey of prompting methods in natural language processing》)。

    这种从 few-shot prompt 中适应新任务的能力与人类适应指令或样本的灵活性有一些相似之处。然而,解释(explanations)在人类学习中也起着核心作用(《Schema acquisition from a single example》):解释突出了任务原则(task principles),使我们能够广泛地进行泛化。例如,解释可以通过将一个简短的答案(如 "false" )与解决问题所需的更广泛的推理过程联系起来(如 "these statements are contradictory; a number cannot be both prime and divisible by 6, which is composite." )。因此,解释可以通过说明将问题与答案联系起来的 principles 从而澄清预期的任务(intended task )。

    因此,我们研究了当从 in-context 样本中学习时,语言模型是否也能从解释中受益。对答案的解释能否提高 few-shot 任务表现?请注意,这个问题并不关注可解释性作为帮助用户理解模型的手段;相反,我们关注的是,few-shot explanations 是否能够帮助模型本身 "理解" 任务,正如通过性能评估的那样(参考 《Symbolic behaviour in artificial intelligence》)。

    这个问题是有趣的,有多种原因。实际上,它有可能改善 few-shot 性能。但更根本的是,这个答案揭示了一个科学问题,即语言模型表现出什么样的 in-context learning 能力,这是一个正在争论的话题(例如 《Rethinking the role of demonstrations: What makes in-context learning work?》《Do prompt-based models really understand the meaning of their prompts?》)。

    几个趋同的研究结果表明,解释可能会改善 few-shot 表现。首先,具有显式指令或任务描述的 prompting 是使语言模型适应新任务的一种有效方式《Pretrain, prompt, and predict: A systematic survey of prompting methods in natural language processing》)。此外,为语言模型分解推理过程的步骤,可以提高 few-shot 表现。对 few-shot prompt 中的样本的解释同样可以支持推断出正确的任务,从而提高下游的任务表现。

    语言模型可以从解释中获益,而不一定要以类似人类的方式 "理解" 解释(参见 《Why ai is harder than we think》)。解释在人类话语中很普遍,因此,语言模型在训练中会遇到一些解释,这些解释(由编写解释的人类)旨在澄清 understanding 和改善 future reasoning 。例如,网上有许多考试答案,其中包含问题、答案、以及对这些答案的解释,这些解释可以帮助预测该考试中后续问题的答案。这些数据模式可能足以让人学会在看到解释后更好地回答后续问题。

    我们并不是第一个探索 explanations 的人;鉴于人们对 prompt tuning 越来越感兴趣,还有其他关于 in-context 中的辅助信息如何影响模型性能的工作,以及大量 prompting 之外的工作(如 training or tuning with explanations )。与之前的工作相比,我们特别关注 post-answer explanations 的效果,而 COT在答案之前提供 chains of reasoningpre-answer explanationspost-answer explanations 对模型推理和评价有不同的影响,并提供了不同的科学见解。此外,我们在一个明显具有挑战性和多样性的任务集上进行评估,并包括仔细的对比和分析。

    我们强调以下的贡献:

    • 我们对 40 个不同的、具有挑战性的语言任务进行了注释(对样本进行解释),同时发布了这些 annotations

    • 我们在具有或没有 few-shot 样本、解释、指令、以及控制条件(control conditions )的 prompting 之后,评估了几个语言模型。

    • few-shot prompt 中,对样本的解释可以提高大型模型的性能;即使没有 tuning ,它们的性能也超过了对应的 control conditions

    • 使用小型验证集来调优或选择的解释可以产生更大的效果。

    • 我们用尊重任务、itemsprompt elements 之间的依赖性的分层统计模型来分析我们的结果。我们强调了这些方法的更广泛的价值。

    COT 是把解释放在答案之前,而这篇论文是把解释放在答案之后。这是算法上的唯一区别。

    放在答案之后的好处是:在推断期间,由于不需要推断出解释而直接推断出答案,因此效率更高。

  2. 相关工作:最近的观察表明,语言模型可以通过几个样本来完成任务(GPT-3GPT-2 ),这激发了关于这种学习的基础是什么的讨论:例如,《An explanation of in-context learning as implicit bayesian inference》提出,in-context learning 是一种隐式贝叶斯推断的形式。其他研究者质疑所发生的是否真的是 "学习",或者仅仅是恢复以前经历过的任务(MetaPrompt)。例如,《Rethinking the role of demonstrations: What makes in-context learning work?》 观察到带有随机标签的 prompts 对常见的 NLP 任务(如entailment )的表现只有轻微的影响。在讨论中,我们将描述我们的结果对理解语言模型的 in-context learning 的贡献。

    • Task instructions:许多先前的工作都将任务指令作为 zero-shot promptsMetaPrompt《Pretrain, prompt, and predict: A systematic survey of prompting methods in natural language processing》),或作为 few-shot prompt 的一部分(例如 《Cross-task generalization via natural language crowdsourcing instructions》)进行探索。模型对这些 prompts 中的任务框架很敏感,并且可以从显式地将问题分解为多个步骤中获益(《Reframing instructional prompts to gptk’s language》)。《How many data points is a prompt worth?》估计,至少在训练分类器时,task prompts 的价值可以值得很多样本。

    • In-context explanationsreasoning decomposition

      • 《Cross-task generalization via natural language crowdsourcing instructions》 探讨了包含任务描述和带有解释的样本的 prompts (以及其他特征,如 guidelines )。然而,他们并没有估计 explanations 的独立效果,也没有与 control conditions 进行比较。

      • 《Few-shot self-rationalization with natural language prompts》《Reframing human-AI collaboration for generating free-text explanations》 使用 few-shot prompting 来鼓励语言模型解释他们的答案,但产生的解释是为了用户解释,而不是为了提高任务表现。

      • 《Unsupervise dcommonsense question answering with self-talk》表明,"self-talk" (从模型中采样答案来支持问题,并在上下文中加入这些答案)可以改善问题的回答。

      最近的其他工作表明,模型可以从分解推理过程(该推理过程导致答案)的样本中获益(COT),特别是当它们被增强了 external scratchpads 以存储中间计算时(《Show your work: Scratchpads for intermediate computation with language models》《Teaching autoregressive language models complex tasks by demonstration》)。这些分解可以被看作是一种特殊的解释。然而,与COT这样密切相关的工作相比,我们在 prompt 中的答案之后提供解释,而不是在答案之前提供 reasoning chains 。然而,我们还是观察到了这些答案后的解释所带来的好处(甚至在一些像算术这样的任务中,计算中间步骤也是有用的)。这是一个关键的区别,与 explanations 能够为模型提供的独特好处有关。此外,与许多先前的工作相比,我们在更广泛的挑战性任务上进行评估,包括更广泛的 matched controls ,并提供更深入的统计分析。

    • 用指令或解释来训练语言模型:之前的各种工作已经探讨了用任务指令训练或调优语言模型、以及用解释来训练。许多专注于用解释进行调优的工作使用了诸如 span highlightingword highlighting 的方法,而不是自然语言解释,见《Explanation-based human debugging of nlp models: A survey》的评论。虽然这些更广泛的前期工作与 “解释在自然语言处理中可能是有用” 的这一总体想法有关,但它并没有立即影响到 in-context explanations 如何影响模型(其中,模型没有以任务指令或解释来训练)这一问题。然而,显式地用解释或指令进行训练的模型可能会从 in-context explanations 中显示出更多的好处(FLAN)。

    • NLP 之外的 explanations :用解释进行训练也显示出在 language 之外的领域的好处。例如,解释已经被用于训练或调优计算机视觉的模型、用于通过 program induction 来解决数学问题、或关系推理和强化学习。

    • 缩放和涌现: 虽然语言模型的损失可以随着模型的大小表现出可预测的缩放性(《Scaling laws for neural language models》),但这些平滑的变化可以导致特定行为的质量差异(《Predictability and surprise in large generative models》):"more is different"《More is different: broken symmetry and the nature of the hierarchical structure of science》)。举几个例子来说:

      • GPT-3 观察到算术任务的表现随着规模的增加而急剧转变。

      • FLAN 发现,只有大型语言模型才能从 instruction fine-tuning 中泛化到执行新任务的 zero-shot

      我们发现,解释的好处随着模型规模的扩大而涌现,这与之前的这些发现是一致的。未来更大的(或其他改进的)模型可能会表现出更大的好处。

21.1 方法

  1. 数据集:BIG-bench 中选择了 40 个任务和子任务的子集,这些任务跨越了各种推理类型、技能、领域。例如,metaphor_boolean 要求识别一个句子是否正确地转述了另一个句子(如下 Figure 1 所示)。

    关于所有使用的任务和选择过程,见附录 A

  2. 语言模型:一组参数从 1B280B 不等的语言模型(《Scaling language models: Methods, analysis & insights from training gopher》)。

  3. 用解释来标注样本: 如果用更多的样本来调优 prompt"few-shot" 的表现结果会产生误导(《True few-shot learning with language models》)。为了避免类似的问题,我们首先探索 untuned explanations 的原始效益。为了创建 untuned explanations ,一个作者在每个数据集中随机选择的 15 个任务实例(question/answer pairs )上标注了 "expert" explanations ,这些解释将帮助人类理解问题和答案之间的关系。评估这些 untuned explanations 将低估 optimal explanations 的好处,但因此提供了一个有代表性的估计,即在一个新任务上增加解释(而没有调优)的预期好处。随后,我们探讨了在一个小的验证集上为 performance 而调优的 explanations 所带来的好处。

    prompt 中添加解释会改变其他 prompt features ,如总长度、内容。为了确定这些 lower-level features 之一是否驱动了 explanations 的效果,我们制作了各种 control explanations ,与语义级别、单词级别、句子级别内容的各个方面相匹配(如下图所示):

    • scrambled explanations:为了确保好处不是由 word-level 特征引起的,我们与单词被随机混洗过的 explanations 进行比较。

    • true non-explanations:为了检验重要的是解释的内容,我们与有效的、相关的、但非解释的陈述内容进行比较。

    • other item explanation:最后,我们评估了这些好处是否是由于解释(explanation )和说明(explanandum )之间的直接关系,而不是语言的某些其他特征。为了做到这一点,我们把 few-shot prompt 的样本拿出来,对解释进行了排列组合,使解释与问题或答案不一致,但 prompt 中包含的整体句子集合是相同的。

    一个独立的、condition-blind 的作者对一个 explanations 子集的质量进行评分,这些解释明显好于中性或 true non-explanations (附录 B.3 )。我们还为每项任务标注了指令和 control non-instructions (见附录 B ),从而扩大prompts 集合(该集合被我们用来评估 explanations),从而使我们的结果更有可能推广到新的 settings

  4. Prompts and evaluation:我们为每个任务(见 Figure 1 )构建了几个 0-shot prompts5-shot prompts ,这些 prompts 是任务指令(noneinstructionnon-instruction )和样本解释(noneother item explanationtrue non-explanationscrambled explanation )可能组合的一个子集。当然,在0-shot prompts 中不可能有explanations ,我们省略了 control explanations with (non-) instructions 的组合,以减少 query 的数量。我们用一条空行将 prompt examples 分开。

    当我们将 explanations 应用于一个样本时,我们将它们放在答案之后的一行并以"Explanation:" 开始(参考 Figure 1);这与之前探索在答案之前解释推理的工作形成对比(例如 《Show your work: Scratch pads for intermediate computation with language models》COT)。在答案之后进行解释的一个好处是,无论是否提供解释,evaluation 程序都是相同的,模型将试图在 explanation 之前产生一个答案。相比之下,答案之前的 explanations需要改变evaluation 程序,并且需要在评价期间对 explanations 进行更多的计算。这些方法也提供了不同的科学含义,见讨论部分。

    我们在每个 prompt 下,在所有的 task dataset items(除了 prompts 中包含的 items)上对模型性能进行评估。我们仅限于多项选择任务,以 prompt 和问题为条件来评估模型对每个答案选项的可能性(参考 Figure 1)。我们不按答案长度对可能性进行归一化处理,但在一个问题中,答案的长度通常是相似的,而且在一些初步实验中,这种归一化处理并没有提高性能。我们贪婪地从集合中选择可能性最高的答案,并根据任务所定义的答案分数(可能允许多个正确答案或部分评分)对模型的准确率进行评分。

  5. Tuning or selecting explanations:未针对模型和任务进行调优的 explanations 只提供了 explanations 的潜在好处的弱下限。例如,更好的explanations 可能是由对任务或模型更熟悉的专家来做的。为了提供一些关于更优的 explanations 的潜在好处的见解,我们进行了两个 tuning 实验。

    • Selecting examples and explanations:我们从为每项任务标注的 15 个样本中选择了一些样本来建立一个 5-shot prompt 。我们贪婪地选择了在 15 prompt items 中预测其余样本的正确答案的最佳表现的样本。也就是说:

      • 我们创建了一个在其余 14 个问题上表现最好的 1-shot prompt

      • 然后通过将其余每个样本附加到这个 1-shot prompt 上,创建了 142-shot prompt ,等等。

      相对于真正的验证集来说,这种方法稍有 biased ,但这种bias 只会让我们低估潜在的好处。作为对照,我们比较了在不包括解释的情况下选择样本:即我们在相同的样本集合上进行相同数量的选择,只是省略了 explanations ,或者选择含有 control explanations 的样本。这个实验评估了在通过简单地选择样本来 tuning prompts 时,explanations 的好处。

    • Hand-tuned explanations:对于在所有条件下表现都很差的五项任务,我们从表现最好的 untuned explanations prompt (without instructions) 开始,并编辑 explanations 的文字,试图提高验证集(其他 prompts10 个样本)的表现。这个过程通常涉及相对较小的编辑,例如,更多的 "language-like" 或教学性的解释(见附录 B.6 )。手工调优使我们能够得到更优的 explanations 的更紧的性能下界。

    请注意,在上述每种情况下,tuning 是在我们标注过的其他样本的小型验证集上进行的,但 tuned prompts 随后在其余任务样本的更大集合上进行测试。

  6. 分析:为了更精确地估计 prompt 的不同部分对性能的影响,我们转向 hierarchical/ multilevel modeling 方法。具体来说,我们拟合 hierarchical logistic regressions ,该 hierarchical logistic regressions 考虑到我们结果的多重嵌套的、异质的结构。

    例如,这些模型考虑了整体任务难度、以及每个问题的特异性的难度所带来的依赖性。这些模型还考虑了不同的 prompt conditions 共享内容的事实:例如,一组解释被应用于一组特定的 few-shot examples 。最后,这些模型还考虑到 few-shot examples, explanations, and instructions 对不同任务的表现有不同影响的可能性。这些模型通过估计每个 hierarchy 的特异性效果(idiosyncratic effect )的参数来说明每个因素:例如,一个参数用于每个任务的难度、一个参数用于每个问题(嵌套于每个任务中)的难度、以及一个参数用于每个不同的 explanations 集合的效果。完整的模型规格见附录 D.1.

21.2 结果

  1. Figure 2 中,我们展示了在 prompt 中加入不同类型的内容所产生的性能改善的效果大小的估计。每个 point 都估计了该 prompt component 的效果,同时控制和聚合了 prompt 的其他 components 的效果。

    • prompt 中加入 few-shot examples ,相对于 zero-shot prompt ,大大改善了成绩。

    • 答案的 untuned explanations 也能提高成绩,其效果约为 few-shot examples1/3tuned explanations 具有更大的效果。

    • instructions 能稍微提高成绩,但比 explanations 的效果要小。

  2. Figure 3 中,我们展示了不同 explanation 类型带来的好处的分布情况:相对于 matched conditions without explanationlog-score 的提高。

    • untuned explanations 具有不同的效果,但平均来说是有益的。

    • 同时选择样本和解释比单独选择样本带来更一致的改善。

    • 至少在我们评估的五个任务中,hand-tuning explanations 提供了更多的好处。

    • 我们还发现,在 prompts with or without task instructions 、或者 non-instructions 中,untuned explanations 的效果并没有很大的变化(Figure 5 )。

    单个任务的结果可以在附录 D.7 中找到。

  3. 只有大型模型从 untuned explanations 中受益: Figure 4 显示了不同模型规模的 untuned explanations 的平均效果的原始总结。

    • untuned explanations 对最大的模型的平均性能有一个适度的提高,较小的模型没有受益。

    • hierarchical regression 证实了较大的模型从解释中明显受益(附录 D.1.2 )。

  4. untuned explanations 超越了 matched control conditionscontrol explanationsnon-instructions 对于最大的模型来说是中性的或有害的。也就是说,相对于 control conditions ,真正的解释,即使是 untuned explanations ,似乎有独特的好处。

    我们在 Figure 7 中描述了 explanationscontrols 的这种平均效果。真正的 explanations 甚至超过了带有其它样本的 explanationsprompt ,这表明好处取决于样本和解释之间的关系,而不是 lower-level 特征。 hierarchical regression 证实,对于最大的模型来说, untuned explanations 明显优于所有 control conditions(附录 D.1.3 )。

  5. explanations 对特定的任务类型有独特的好处吗:如上所述,我们使用的任务是用内容关键词来标注的。我们创建了从常识到数学的 8keyword clusters ,并在每个 keyword cluster 中探讨了 explanations 的效果(Figure 8 )。解释的好处在各 cluster 中显得相当一致。然而,每个 cluster 都相对较小,所以对结果的解释不应过于可信。

  6. Figure 6 中,我们显示了在一个 prompt 中加入 explanations 所带来的改善,并与该 prompt 的基线分数作对比。在中等规模的得分的情况下,有一个耐人寻味的凸起,表明有可能出现 "zone of proximal development" 效应。然而,有几个混杂因素,例如不同任务的答案选项数量不同,影响了可能的分数。尽管如此,这种可能性还是值得在未来的工作中进行调查。

  7. Figure 10 中,我们显示了在不同的模型规模下,针对 zero-shot promptfew-shot promptsinstructionsnon-instructions 的平均效果。

21.3 讨论

  1. explanations 能改善 few-shot learning 吗:是的,但好处取决于模型的规模和 explanation 的质量。对于一个大型模型来说,即使是 untuned explanations 也能带来适度但明显的性能改善:这种好处大约是最初添加 few-shot examples 的三分之一,但却是添加 task instructions 的两倍。因此,即使不进行 tuningexplanations 也能提高大型语言模型的 few-shot 性能。

    此外,为任务调优 explanations (使用一个小的验证集)可以大大增加其好处:

    • 首先,针对 prompt 来选择 examples with explanations 比选择 examples alone 提供更大的性能改进。

    • 其次,在一个固定的样本集合上手工调优 explanations 可以提供更大的好处,甚至在具有挑战性的任务上。

    虽然性能还远远不够完美,但这些发现表明:explanations 可以改善 few-shot prompting

  2. 为什么 post-answer explanations 是有趣的: 与一些相关的工作( 《Show your work: Scratch pads for intermediate computation with language models》COT)相比,我们专注于在答案之后提供解释,而不是在答案之前提供 chains of reasoning 。虽然COT没有观察到 post-answer explanations 的好处,但我们的结果更加 positive ,可能是由于他们的任务需要 more iterative reasoning 的事实。除了这种差异,pre-answerpost-answer 的解释模式在测试时也有不同的影响,对模型的 in-context inference 也有不同的科学意义(scientific implications )。

    在测试期间,post-answer explanations 并不影响 evaluation pipeline ,因为模型在产生 explanation 前会产生一个答案。相比之下,pre-answer chains-of-reasoning 需要 pre-answer chains-of-reasoning 从模型输出中解析出答案。为了获得最佳性能,pre-answer reasoningpost-answer explanations 可能有互补的、可组合的好处。事实上,《STaR: Bootstrapping reasoning with reasoning》 使用了 post-answer-hint 的 "合理化" 作为他们 bootstrapped training procedure 的一部分。将问题分解成一系列的步骤往往是有用的,但有些 explanations 是整体性的,只有在知道答案后才有意义。

    从科学的角度来看,这两种方法代表了模型可以从 explanations 中获益的不同机制:

    • pre-answer chains of reasoning 可以让模型在回答前输出一个推理过程并逐步处理问题。

    • 相比之下,post-answer explanations 只能通过改变 task inference ,抽象地塑造推理过程。因为在我们所有的 prompt conditions 下,模型在问题和答案之间有同等数量的处理步骤,解释的效果归因于关于模型如何处理问题和可能答案的变化。

    因此,explanations 的好处来自于 in-context learning 过程中相当复杂的高阶推理,正如我们接下来讨论的那样。

  3. 我们的研究结果对语言模型的 in-context learning 能力有什么暗示:语言模型适应 prompt 的过程是有争议的。例如,《Rethinking the role of demonstrations :What makes in-context learning work?》提出了一个有趣的观点,即 GPT-3 在普通任务(如 entailment )上的表现几乎与 prompt 中的随机答案一样好,因此,他们质疑这些模型是否真的在上下文中 "学习"。在我们的 explanationsmatched controls 之间的比较,使我们能够测试 explanations 的表面特征(superficial features )是否驱动了它们的好处。

    具体而言,other item explanation prompt 包含与 real explanation prompt 相同的句子;explanations 只是与不同的样本进行配对。最大的模型显示,即使相对于这个 closely-matched controlreal explanations 也有明显的优势。事实上,对照组似乎并不比 no explanations 更好。这表明,最大的模型在处理 target question 的答案时,使用了样本和它们相应的 explanations 之间的关系,而不是简单地依赖 prompt 中的单词分布或句子分布。因此,最大的模型似乎确实在上下文中表现出一些相当复杂的高阶推理。

    虽然这些观察结果并不排除模型只是利用解释来回忆训练中看到的任务的可能性,但我们使用的 BIG-bench collaboration 任务是对抗性采样从而是独特的、具有挑战性的,这使得这种可能性有点小。一个可能与过去的发现相调和的情况是,模型是 "懒惰的",在模型可以依赖 low-level 特征的时候依赖 low-level 特征,而只在需要 high-level 特征的挑战性环境中使用 high-level 特征(参见《When classifying arguments, bert doesn’t care about word order... except when it matters》)。然而,要完全解决这些问题,还需要进一步调查。

  4. explanationsinstructions 的关系如何:虽然之前的工作发现,task instructions 比样本更有效(例如 Metaprompt),但我们发现,task instructions 的效果比 few-shot examples or explanations 的效果更小。这可能是由于之前的工作在很大程度上执行了 tuning instructions ,从而使 prompts 可以说不是 "zero-shot" 的;也可能与我们评估的任务有关,这些任务是对抗性采样的。具有挑战性的任务可能更难描述,相比较于 explaining with examples 。无论如何,explanations 在不同的 instruction conditions 下提供类似的好处。因此 explanationsinstructions 可以是互补的。

  5. 我们的工作与人类语言处理(human language processing)有什么关系:由于我们受到人类使用 explanation 的认知工作的启发,并且鉴于积累的证据表明语言模型可以预测大量的 human neural language processing《The neural architecture of language: Integrative modeling converges on predictive processing》《Shared computational principles for language processing in humans and deep language models》),自然要问我们的工作是否有认知意义(cognitive implications )。然而,语言模型和人类都从 explanations 中受益的事实并不意味着他们一定是通过相同的机制受益。事实上,我们观察到的 explanations 的好处比人们对人类的预期好处要小。然而,请注意,我们的许多任务,如评估数学归纳论证(mathematical induction arguments ),对许多人类来说是具有挑战性的,即使 with instructions, examples, and explanations

    human responsemodel response 之间的差异可能部分源于语言模型的贫乏经验,它们没有经历过语言所指的更广泛的背景或情况。相比之下,human explanations 从根本上说是实用性和交流性的:解释的目的是在特定的对话和背景下传达一种意义。人类为理解 explanations 而进行的推理过程大概是由这种互动经验形成的。因此,在更丰富的互动环境中训练的模型可能从 explanations 中受益更多(《Symbolic behaviour in artificial intelligence》)。相应地,explanations 可以为未来调查人类和模型语言处理的相似性和差异性提供一个有趣的环境。

  6. 我们的研究方法有什么好处:随着研究人员对人工智能表现出的越来越复杂的行为进行研究(《Symbolic behaviour in artificial intelligence》),我们认为采用行为科学的实验和分析工具将有越来越多的好处。我们特别强调 hierarchical regressions 的价值,它从统计学上说明了数据的依赖性和不同类型的 observed variation 。如果不对这些因素进行建模,就会导致诸如 "stimulus-as-fixed-effect fallacy"《The language-as-fixed-effectfallacy: A critique of language statistics in psychological research》)等问题:将刺激或数据集效应误认为是更普遍的原则。因此,适当的 hierarchical models 对可推广的研究至关重要(《The generalizability crisis》)。我们鼓励其他研究人员采用这些分析工具。

  7. 局限性:

    • 我们使用的数据集有什么好处和坏处:使用 BIG-bench collaboration 的任务,使我们能够在相似的格式中收集一组多样化的、具有挑战性的任务。这些任务涵盖了可能在标准数据集中没有得到很好体现的技能。然而,这些特异的、对抗性采样的任务可能因此不能代表通常应用 language model 的任务。这种差异可能会放大或压制我们的效果。

    • explanation annotations:本文的一位作者对这个数据集进行了注释,方法是阅读相应的 BIG-Bench 问题和解决方案,然后尝试写一个解释,帮助人类理解答案。尽管这个过程允许对那些原本可能难以获得注释的任务进行专家注释(例如需要理解数学归纳的任务),但它也有相应的局限性。此外,由于仅有一个作者对解释进行了注释,它们可能是有偏的。

    • 模型和训练:用指令来训练或微调的模型(《Training language models to follow instructions with human feedback》)可能更受益于 explanations 。事实上,调优一个模型以利用 prompt 中的 explanations 可能会改善结果,这将是未来工作的一个令人兴奋的方向。

      此外,添加 explanations 会延长 prompt ,而目前的语言模型通常有一个固定的上下文长度,这限制了可以解释的样本的数量。因此, explanations 在未来的、能处理更长上下文的模型中可能更有用。

    • explanations 所提供的改进程度:我们强调,虽然包括 answer explanations 会在统计学上带来明显的性能改善,但它不会产生完美的性能或完全鲁棒的行为:事实上,如果不进行 tuning ,好处是不大的。然而,正如大型模型从 explanations 中获益更多一样,我们希望未来的模型将进一步获益;而且 explanations 可以与其他技术相结合,产生更大的改进。

二十二、COT[2022]

论文:《Chain of Thought Prompting Elicits Reasoning in Large Language Models》

  1. NLP 领域最近被语言模型彻底改变。扩大语言模型的规模已被证明可以带来一系列的好处,比如提高性能和样本效率(sample efficiency )。然而,事实证明,仅仅扩大模型规模并不足以在诸如算术、常识推理、以及符号推理等具有挑战性的任务中取得高的效果。

    我们探讨了如何通过一种简单的方法来解锁大型语言模型的推理能力。我们的方法由两个想法驱动:

    • 首先,用于算术推理的技术可以从自然语言的理由(这些理由导致最终正确答案)中获益。之前的工作通过从头开始训练(《Program induction by rationale generation: Learning to solve and explain algebraic word problems》)、或微调一个 pretrained model《Training verifiers to solve math word problems》)从而为模型赋予能力来生成自然语言形式的中间步骤;此外还有使用 formal language 代替自然语言的神经符号方法。

    • 其次,大型语言模型提供了令人振奋的前景,即通过 prompting 进行 in-context few-shot learning 。也就是说,与其为每个新的任务微调一个单独的 language model checkpoint ,不如简单地用一些 input-output 示例(这些示例用于阐述任务)来 "prompt" 模型。值得注意的是,这在一系列简单的问答任务中是成功的(GPT-3)。

    然而,上述两种想法都有关键的局限性:

    • 对于rationale-augmentedtrainingfinetuning 方法来说,创建关于高质量的rationales 的一个大数据集是很昂贵的,这比普通机器学习中使用的简单的 input–output pairs 要复杂得多。

    • 对于 GPT-3 使用的传统的 few-shot prompting 方法,在需要推理能力的任务上效果很差,而且通常不会随着语言模型规模的增加而有实质性的改善(Gohper )。

    在本文中,我们结合了这两种思想的优势从而避免各自的局限性。具体而言,在给定一个 prompt 的条件下,我们探索了语言模型对推理任务进行 few-shot prompting 的能力,其中给定的 prompt 由三要素组成:<input, chain of thought, output>chain of thought: COT 是一系列中间的自然语言推理步骤(这些中间步骤导致了最终输出),我们把这种方法称为 chain-of-thought prompting 。下图中显示了一个 prompt 的例子。

    我们对算术推理、常识推理、以及符号推理的 benchmark 进行了实证评估,显示 chain-of-thought prompting 优于标准的 prompting ,有时达到惊人的程度。下图展示了这样一个结果:在math word 问题的 GSM8K benchmark 上,使用 PaLM 540Bchain-of-thought prompting 比标准 prompting 超出很多,并取得了新的 SOTA 性能。 prompting only 很重要,因为它不需要大量的训练数据集,而且单个 model checkpoint 可以执行许多任务而不损失通用性。这项工作强调了大型语言模型如何通过关于任务的几个示例以及自然语言数据来进行学习(比方说,通过大型训练数据集自动学习 inputsoutputs 的基本模式)。

    COT 只有在使用 100B 参数的模型时才会产生性能提升,这对于中小模型不利。

  2. 相关工作:这项工作受到了许多研究领域的启发,我们将在论文的附录 C 中详细介绍。在这里,我们描述两个方向、以及也许是最相关的一些论文。

    • 第一个相关方向是使用中间步骤(intermediate steps )解决推理问题。

      • 《Program induction by rationale generation: Learning to solve and explain algebraic word problems》 通过一系列中间步骤,率先提出了使用自然语言推理来解决数学应用题的思想。他们的工作与使用 formal language 进行推理的文献形成了鲜明对比。

      • 《Training verifiers to solve math word problems》扩展了《Program induction by rationale generation: Learning to solve and explain algebraic word problems》 的方法,创建了一个更大的数据集,并使用它来微调 pretrained language model ,而不是从头开始训练模型。

      • 在程序合成(program synthesis )领域,《Show your work: Scratchpads for intermediate computation with language models》 利用语言模型,通过首先逐行预测中间计算结果从而来预测 Python 程序的最终输出,并表明他们的 step-by-step 预测方法比直接预测最终输出的效果更好。

    • 自然,这篇论文也与最近大量关于 prompting 的工作密切相关。自从 GPT-3 提出的 few-shot prompting 流行以来,一些通用的方法已经提高了模型的 prompting 能力,例如自动学习 prompts《The power of scale for parameter-efficient prompt tuning》)、或给模型描述任务的指令(FLANT0《Training language models to follow instructions with human feedback》)。尽管这些方法改进或增加了 prompt 的输入部分(例如,附加在 inputs 之前的指令),我们的工作采取了用一个正交的方向来 augment 带有 chain of thought 的模型的输出。

22.1 方法

  1. 在解决复杂的推理任务(如多步骤的 math word 问题)时,考虑一下自己的思维过程。典型的做法是将问题分解成中间步骤,并在给出最终答案之前解决每个中间步骤。例如,After Jane gives 2 flowers to her mom she has 10 ... then after she gives 3 to her dad she will have 7 ... so the answer is 7.。 本文的目标是赋予语言模型以产生类似的 chain of thought 的能力:一系列连贯的中间推理步骤,从而得出问题的最终答案。我们将证明,对于 few-shot prompting ,如果在范例中提供 chain-of-thought reasoning 的阐述,那么足够大的语言模型可以产生 chains of thought

    下图显示了一个模型产生 chain of thought 来解决一个 math word 问题的例子,如果没有 chain of thought 则模型就会得到错误的答案。在这种情况下, chain of thought 类似于解决方案,但我们仍然选择将其称为 chain of thought ,以更好地捕获到idea:它模仿了 step-by-step thought process 从而得出答案。另外,解决方案/解释通常在最终答案之后(而不是在答案之前)。

  2. 作为一种促进语言模型推理的方法,chain-of-thought prompting 有几个吸引人的特性:

    • 首先,chain of thought 原则上允许模型将多步骤问题分解为中间步骤,这意味着更多的计算可以被分配给需要更多推理步骤的问题。

    • 第二,chain of thought 为模型的行为提供了一个可解释的窗口,提示它如何得出一个特定的答案,并提供机会来调试推理路径(reasoning path )出错的地方。尽管完全描述 support an answer 的模型的计算仍然是一个悬而未决的问题。

    • 第三,chain-of-thought reasoning 可用于 math word 问题、常识推理、以及符号操作等任务,并有可能适用于人类通过语言可以解决的任何任务(至少在原则上)。

    • 最后,chain-of-thought reasoning 可以很容易地在足够大的现成语言模型中被激发出来,只需将 chain of thought sequences 的样例纳入 exemplars of few-shot prompting 中即可。

    在实证实验中,我们将观察 chain-of-thought prompting 对算术推理(arithmetic reasoning)、常识推理(commonsense reasoning )、以及符号推理(symbolic reasoning )的效果。

22.2 算术推理

  1. 我们首先考虑 Figure 1 中形式的 math word 问题,它可以衡量语言模型的算术推理能力。虽然对人类来说很简单,但算术推理是一项语言模型经常陷入困境的任务。令人震惊的是,当与 540B 参数的语言模型一起使用时,chain-of-thought prompting 在几个任务上的表现与特定任务的微调模型相当,甚至在具有挑战性的 GSM8K 基准上达到了新的SOTA

  2. benchmarkGSM8KSVAMPASDivAQuAMAWPS。这些都是 math word 问题的数据。一些例子如下表所示。

  3. 方法:

    • standard promptingGPT-3 推广的标准的 few-shot prompting ,其中语言模型在测试期间被馈入 in-context exemplarsinput-output pair )从而得到输出。如 Figure 1 的左图所示。

    • chain-of-thought prompting:在 few-shot prompting 中用一个关于答案的 chain of thoughtaugment 每个样例。如 Figur3 1 的右图所示。

    由于大多数数据集只有一个 evaluation split ,我们手动组成了八个具有 chains of thoughtfew-shot exemplars 从而用于promptingFigure 1 的右图显示了一个 chain of thought exemplar ,所有八个的案例如 Table 20 所示。这些特殊的 exemplars 没有经过 prompt engineering

    为了研究这种形式的 chain-of-thought prompting 是否能在一系列的 math word 问题上成功地引起推理,我们对所有的基准都使用了这一组八个 chain of thought exemplars ,除了 AQuA,因为 AQuA 是多选题而不是自由回答。对于AQuA ,我们使用了训练集中的四个样例和解答,如 Table 21 所示。

  4. 语言模型:

    • GPT-3:我们使用了 text-ada-001text-babe-001text-curie-001text-davinci-002 ,据推测它们对应于InstructGPT 模型的 350M1.3B6.7B175B 参数。

    • LaMDA:该模型有 422M2B8B68B137B 参数。

    • PaLM:该模型有 8B62B540B 参数。

    • UL2 20B

    • CodexOpenAI API 中为 code-davinci-002

    我们通过贪心解码从模型中采样。尽管后续工作表明,chain-of-thought prompting 可以通过在许多 sampled generations 中采取 majority final answer (即,多数投票机制)来改进(《Self-consistency improves chain of thought reasoning in language models》)。

    对于 LaMDA ,我们报告了五个随机种子的平均结果,其中每个种子都有不同的随机混洗的 exemplars 顺序。由于 LaMDA 的实验没有显示出不同种子之间的巨大差异,为了节省计算量,我们报告了所有其他模型的 single exemplar order (即,采用了固定的顺序)的结果。

  5. 结果:Figure 4 总结了 chain-of-thought prompting 的最强结果,Table 2 展示了每个 model collection、模型大小、以及 benchmark 上的所有结果。

    • 首先,Figure 4 显示,chain-of-thought prompting 是模型规模的一种涌现能力(emergent ability )(《Emergent abilities of large language models》)。也就是说,chain-of-thought prompting 对小模型的性能没有积极影响,只有在使用 100B 参数的模型时才会产生性能提升。我们定性地发现,较小规模的模型产生了流畅的但不合逻辑的 chains of thought ,导致了比 standard prompting 更低的性能。

    • 其次,chain-of-thought prompting 对于更复杂的问题有更大的性能提升。例如:

      • 对于 GSM8K (具有最低的 baseline 性能的数据集), GPT-3 175BPaLM 540B 模型的性能提高了一倍以上。

      • 另一方面,对于 SingleOpMAWPS 中最简单的子集,只需要一个步骤就能解决),性能的提高要么是负数,要么是非常小,如 Table 3 所示。

    • 第三,通过 GPT-3 175BPaLM 540B 进行的 chain-of-thought prompting 与之前的 SOTA 相比更胜一筹,后者通常在 labeled training dataset 上对特定任务的模型进行微调。Figure 4 显示了 PaLM 540B 是如何使用 chain-of-thought promptingGSM8KSVAMPMAWPS 上达到新的 SOTA 的(不过请注意,standard prompting 已经超过了 SVAMP 的现有最佳水平)。在另外两个数据集上,即 AQuAASDiv ,采用 chain-of-thought promptingPaLM 540B 达到了 SOTA2% 差距以内(参考 Table 2)。

  6. 为了更好地理解为什么 chain-of-thought prompting 有效,我们通过 LaMDA 137BGSM8K 手动检查了模型生成的 chains of thought 。在模型返回正确的最终答案的 50 个随机例子中,除了两个巧合得出正确答案的例子外,所有生成的 chains of thought 在逻辑上和数学上也都是正确的(见论文附录 D.1Table 8 给出了正确的模型生成的 chains of thought 的例子)。

    我们还随机检查了模型给出错误答案的 50 个随机例子。这个分析的结论是:

    • 46%chains of thought 几乎是正确的,除了一些小错误(calculator errorsymbol mapping error 、或缺少一个推理步骤)。

    • 其他 54%chains of thought 在语义理解或语义连贯性方面有重大错误(见论文附录 D.2 )。

    为了略微了解为什么 scaling 能提高 chain-of-thought 的推理能力,我们对 PaLM 62B 所犯的错误进行了类似的分析,以及这些错误是否通过 scalePaLM 540B 而得到修复。结论是:将 PaLM 扩展到 540B 可以修复 62B 模型中很大一部分的 one-step missing error 和语义理解错误(见附录 A.1,以及图 Figure 9 所示)。

  7. 消融研究:鉴于使用 chain-of-thought prompting 所观察到的好处,一个自然的问题是:即是否可以通过其他类型的 prompting 来实现同样的性能改进。Figure 5 显示了一个消融研究,有三种不同的chain of thought 变体,如下所述。

    • 只有方程(equation ):chain-of-thought prompting 可能有帮助的一个原因是它产生了待评估的数学方程,因此我们测试了一个变体,即模型在给出答案前只被提示从而输出一个数学方程。

      Figure 5 显示,equation only promptingGSM8K 的帮助不大,这意味着 GSM8K 中问题的语义太有挑战性,如果没有 chain of thought 中的自然语言推理步骤,就不能直接转化为方程。

      然而,对于只有一步或两步的问题的数据集,我们发现 equation only prompting 确实提高了性能,因为方程可以很容易地从问题中得出(如 Table 6 所示)。

    • 仅仅包含可变的计算:另一个直觉是,chain of thought 允许模型在更难的问题上花费更多的计算(即 intermediate tokens )。为了从 chain-of-thought reasoning 中分离出可变的计算( variable computation )的影响,我们测试了一种配置:在这种配置中,模型被提示输出关于 "." 的一个序列("..." ),其数量等于解决问题所需的方程中的字符数。这个变体的表现与 baseline 差不多,这表明可变的计算本身并不是 chain-of-thought prompting 成功的原因,而且通过自然语言来表达 intermediate steps 似乎也有好处。

    • 答案之后的 chain of thoughtchain-of-thought prompting 的另一个潜在好处可能仅仅是,这种 prompts 允许模型更好地获取在预训练中获得的相关知识。因此,我们测试了另一种配置,即 chain of thought prompt 只在答案之后给出,以隔离模型是否真正依赖于所产生的 chain of thought 来给出最终答案。这个变体的表现与 baseline 差不多,这表明 chain of thought 中体现的串行推理( sequential reasoning )除了激活知识外,还有其他的作用。

      《Can language models learn from explanations in context?》 采用了 Reasoning after answer 的方案,并表明该方案要比标准的 prompting 更好。与这里的结论矛盾。

      《Can language models learn from explanations in context?》 的解释是:任务的不同。

  8. Chain of Thought 的鲁棒性:对 exemplars 的敏感性是 prompting 方法的一个关键考虑因素。例如,改变 few-shot exemplars 的排列组合可以使 GPT-3SST-2 上的准确率从接近随机( 54.3% )到接近 SOTA93.4% )(《Calibrate before use: Improving few-shot performance of language models》)。在这里,我们评估了对不同标注员所写的 chains of thought 的鲁棒性。除了上述使用 Annotator A 编写的 chains of thought 的结果外,本文的另外两位合著者(Annotators B and C )也为相同的 few-shot exemplars 独立编写了 chains of thought (见 Table 29, 30 )。Annotator A 还按照 《Training verifiers to solve math word problems》 给出的解决方案的风格,写出了另一条比原来的更简洁的 chain of thought

    下图显示了 GSM8KMAWPSLaMDA 137B 的这些结果(其他数据集的消融结果见 Table 6, Table 7 )。尽管不同的 chain of thought annotations 之间存在方差,正如在使用 exemplar-based prompting 时所预期的那样,所有的 chain-of-thought prompts 都比 standard baseline 的表现要好很多。这一结果意味着,成功使用 chain-of-thought 并不取决于特定的语言风格。

    为了证实成功的 chain-of-thought prompting 对其他 exemplars 的作用,我们还用从 GSM8K 训练集随机抽取的三组 eight exemplars 进行了实验,这是一个独立的数据源(这个数据集中的样本已经包括了像 chain of thought 一样的推理步骤)。 Figure 6 显示,这些 prompts 的表现与我们手动编写的样例相当,也大大超过了 standard prompting 的表现。

    除了对标注员、独立编写的chains of thought 、不同样例、以及各种语言模型的鲁棒性之外,我们还发现,chain-of-thought prompting 对算术推理的不同的exemplar orders 、以及不同的样例数量(如 Table 6 所示)都很鲁棒。

22.3 常识推理

  1. 虽然 chain of thought 特别适用于 math word 问题,但 chain of thought 的基于语言的性质实际上使其适用于一类广泛的常识推理问题,这些问题涉及在通用背景知识的假设下,对物理和人类交互进行推理。常识推理(commonsense reasoning )是与世界交互的关键,但目前的自然语言理解系统仍无法做到。

  2. benchmark:五个涵盖不同的常识推理类型的数据集。

    • CSQA:流行的常识推理数据集,它提出了关于世界的常识性问题,涉及复杂的语义,通常需要先验知识。

    • StrategyQA:要求模型推断出一个 multi-hop strategy 来回答问题。

    • 我们从 BIG-bench 的工作中选择了两个专门的评价集:

      • Date Understanding:涉及从给定的上下文中推断出一个日期。

      • Sports Understanding:涉及确定一个与体育有关的句子是可信的还是不可信的。

    • SayCan:涉及将自然语言指令映射到离散集的(discrete set )的机器人动作序列中。

    下图显示了所有数据集中带有 chain of thought annotations的例子。

  3. Prompts:我们遵循与上一节相同的实验设置。

    • 对于 CSQAStrategyQA ,我们从训练集中随机选择了一些样本,并为它们手动组成了 chains of thought ,以作为 few-shot exemplars

    • 两个 BIG-bench 任务没有训练集,所以我们在评估集中选择了开头的十个样本作为 few-shot exemplars ,并报告了评估集的其余部分的结果。

    • 对于 SayCan ,我们使用了 《Do as I can, not as I say: Grounding language in robotic affordances》 使用的训练集中的六个样本,同时也使用了手动组成的 chains of thought

  4. 结果:下图展示了 PaLM 的这些结果( LaMDAGPT-3 和不同模型比例的完整结果见 Table 4 )。可以看到:

    • 对于所有的任务,扩大模型的规模提高了 standard prompting 的性能。

    • chain-of-thought prompting 导致了进一步的收益,对 PaLM 540B 似乎获得了最大的改进。通过 chain-of-thought promptingPaLM 540B 取得了相对于 baseline 的强大性能,在 StrategyQA 方面超过了之前的 SOTA75.6% vs 69.4% ),在 sports understanding 方面超过了无辅助的体育爱好者(95.4% vs 84% )。

    这些结果表明,chain-of-thought prompting 也能提高需要一系列常识性推理能力的任务的表现(尽管注意到在 CSQA 获得了小的增益)。

22.4 符号推理

  1. 我们最后的实验评估考虑了符号推理(symbolic reasoning ),这对人类来说很简单,但对语言模型来说有潜在的挑战性。我们表明,chain-of-thought prompting 不仅使语言模型能够完成在 standard prompting setting 下具有挑战性的符号推理任务,而且还能促进 length 泛化到比见过的 few-shot exemplars 更长。

  2. 任务:两个 toy 任务:

    • 最后一个字母的拼接:这个任务要求模型将一个姓名中的最后一个字母连接起来(例如,"Amy Brown" -> "yn" )。我们通过随机组合姓名普查数据(https://namecensus.com/ )中前一千名的名字和姓氏来产生全名。

    • 硬币翻转:这项任务要求模型回答,在人们投掷或不投掷硬币之后,硬币是否仍然是正面朝上(例如,"A coin is heads up. Phoebe flips the coin. Osvaldo does not flip the coin. Is the coin still heads up?" -> "no")。

    由于这些符号推理任务的构造是 well-defined ,对于每个任务,我们都考虑了一个 in-domain 测试集,其中样本的 step 数与 training/few-shot exemplars 相同;还有一个 out-of-domain: OOD 测试集,其中评估的样本比training/few-shot exemplars 中的步骤更多。

    我们的实验设置使用与前两节相同的方法和模型。我们再次为每项任务的 few-shot exemplars 手动组成 chains of thought ,如 Figure 3 所示。

  3. 结果:PaLM 的这些 in-domainOOD评估结果见下图所示,LaMDA 的结果见 Table 5

    • 对于 PaLM 540Bchain-of-thought prompting 导致了几乎 100% 的解决率(注意,standard prompting 已经解决了PaLM 540 的硬币翻转问题,尽管 LaMDA 137B 没有)。

      请注意,这些 in-domain 评估是 " toy 任务",因为完美的解决结构已经由 few-shot exemplars 中的 chains-of-thought 提供;模型所要做的就是用测试期间的样本中的新符号重复同样的步骤。

    • 然而,小模型还是失败了:只有在 100B 的模型参数规模下,才会出现对这三个任务的 unseen symbols 进行抽象操作的能力。

    • 至于 OOD 评估,standard prompting 对这两项任务都失败了。通过 chain-of-thought prompting ,语言模型实现了向上的scaling 曲线(尽管性能低于 in-domain setting )。因此,chain-of-thought prompting 促进了长度泛化,对于足够规模的语言模型。

22.5 讨论

  1. 我们已经探索了 chain-of-thought prompting 作为一种简单的机制来激发大型语言模型中的多步骤的推理行为。

    • 我们首先看到,chain-of-thought prompting 在算术推理上有很大程度的改进,产生的改进比消融实验强得多,而且对不同的标注员、范例、以及语言模型都很鲁棒。

    • 接下来,关于常识推理的实验强调了 chain-of-thought reasoning 的语言性质如何使其普遍适用。

    • 最后,我们表明,对于符号推理,chain-of-thought prompting 有助于 OOD 泛化到更长的序列长度。

    在所有的实验中,chain-of-thought reasoning 只是通过提示一个现成的语言模型来引起的。在撰写本文的过程中,没有对语言模型进行微调。

  2. 作为模型 scale 的结果,chain-of-thought reasoning 的涌现一直是一个普遍的主题。对于许多推理任务来说,standard prompting 有一个平坦的比例曲线,而 chain-of-thought prompting 会导致 scaling 曲线急剧增加。chain-of-thought prompting 似乎扩大了大型语言模型可以成功执行的任务集合:换句话说,我们的工作强调了 standard prompting 只为大型语言模型的能力提供了一个下限。这一观察很可能提出了更多的问题,例如,随着模型规模的进一步扩大,我们还能期望推理能力有多大的提高?哪些其他的 prompting 方法可以扩大语言模型所能解决的任务范围?

  3. 局限性:

    • 我们首先限定,尽管 chain-of-thought 模仿了人类推理者的思维过程,但这并没有回答神经网络是否真的在 "推理",我们将其作为一个开放性问题。

    • 第二,尽管在 few-shot setting 下,手动地 agument 具有 chains of thought 的样例的成本很低;但在微调的场景下,这种标注成本可能是令人望而却步的(尽管这有可能通过 synthetic data generation 、或者 zero-shot generalization 来克服)。

    • 第三,不能保证推理路径的正确性。改进语言模型的 factual generation 是未来工作的一个开放方向。

    • 最后,chain-of-thought reasoning 的涌现仅仅发生在大模型中,使得它在现实世界的应用中 serve 成本很高。进一步的研究可以探索如何在较小的模型中诱发推理。

二十三、Self-Consistency COT[2022]

论文:《Self-Consistency Improves Chain of Thought Reasoning in Language Models》

  1. 尽管语言模型在一系列 NLP 任务中表现出了显著的成功,但它们的推理能力往往受到限制,而这个限制不能仅仅通过增加模型规模来克服。为了解决这一不足, 《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》 提出了 chain-of-thought prompting ,即提示语言模型生成一系列短句,模仿一个人在解决一个任务时可能采用的推理过程。例如,给定问题: "如果停车场有 3 辆车,还有 2 辆车到达,那么停车场有多少辆车?"。语言模型不是直接回答 "5" ,而是被提示用整个 chain-of-thought 来回答: "停车场里已经有 3 辆车了。还有 2 辆到达。现在有 3+2=5 辆车。答案是 5 "。据观察,在各种多步骤推理任务中,chain-of-thought prompting 能显著提高模型性能。

    在本文中,我们引入了一种新的解码策略,称为自一致性(self-consistency ),以取代 chain-of-thought prompting 中使用的贪婪解码策略。self-consistency 策略进一步地大幅度提高了语言模型的推理性能。自一致性利用了这样的直觉:复杂的推理任务通常有多条推理路径可以达到正确答案(《Individual differences in reasoning: Implications for the rationality debate?》)。一个问题越是需要深思熟虑和分析(《Intuition and reasoning: A dual-process perspective》),就有越多样化的推理路径来找到答案。

    下图用一个例子说明了 self-consistency 方法。我们首先用 chain-of-thought prompting 来提示语言模型,然后不是贪婪地解码最佳推理路径,而是提出一个 "sample-and-marginalize" 的解码程序:

    • 我们首先从语言模型的解码器中采样,以产生一组不同的推理路径。

    • 每个推理路径可能导致一个不同的最终答案,因此我们通过边际化( marginalizing )所采样到的推理路径,从而在 final answer set 中找到最一致的答案从而作为最佳答案。

    这样的方法类似于人类的经验,即如果多种不同的思考方式导致了相同的答案,那么人们对最终答案的正确性就有更大的信心。与其他解码方法相比,self-consistency 避免了困扰贪婪解码的重复性和局部最优性等问题,同时缓解了单个 sampled generation 的随机性。

    这种方法要求答案是确定的、唯一的。对于开放式的问题(如,抽取一篇文章的摘要),那么无法应用这个方法。

    self-consistency 比之前的方法简单得多,这些方法要么训练一个额外的 verifier《Training verifiers to solve math word problems》),要么在给定额外的人类标注的情况下训练一个 re-ranker 以提高 generation 的质量(《Lamda: Language models for dialog applications》)。相反,self-consistency 是完全无监督的,与 pre-trained language model 一起现成工作,不需要额外的人类标注,并避免任何额外的训练、辅助模型或微调。self-consistency 也不同于典型的 ensemble 方法(在 ensemble方法中,多个模型被训练,并且每个模型的输出被汇总起来),它更像一个 "self-ensemble",在单个的语言模型之上工作。

    我们在广泛的算术推理任务和常识推理任务上对四种不同规模的语言模型评估了 self-consistency :公共的 UL2-20BGPT-3-175BLaMDA-137BPaLM-540B。在所有四个语言模型上, self-consistency 在所有任务中都比 chain-of-thought prompting 有明显的改善。具体而言,当与 PaLM-540BGPT-3 一起使用时, self-consistency 在算术推理任务中达到了 SOTA,包括 GSM8K+17.9% 的绝对准确率提升)、SVAMP+11.0% 的绝对准确率提升)、AQuA+12.2% 的绝对准确率提升),以及诸如 StrategyQA+6.4%的绝对准确率提升)和 ARCchallenge+3.9% 的绝对准确率提升)等常识推理任务。在额外的实验中,我们显示 self-consistency 可以有力地提高 NLP 任务的性能,在这些任务中,与 standard prompting 相比,添加 chain-of-thought 可能会损害性能(《The unreliability of explanations in few-shot prompting for textual reasoning》)。我们还表明, self-consistency 明显优于 sample-and-rankbeam searchensemble-based方法,并且对采样策略和 imperfect prompts 具有鲁棒性。

  2. 相关工作:

    • 语言模型的reasoning:众所周知,语言模型在推理任务中很吃力,如算术推理、逻辑推理和常识推理(《Intuition and reasoning: A dual-process perspective》)。之前的工作主要集中在改善推理的专用方法上。与之前的工作相比,self-consistency 适用于广泛的推理任务,不需要任何额外的监督或微调,同时还能大幅提高 《Chain of thought prompting elicits reasoning in large language models》 提出的 chain-of-thought prompting方法的性能。

    • 语言模型中的 sampling and re-ranking

      • 文献中提出了多种语言模型的解码策略,例如 temperature samplingtop-k samplingnucleus samplingminimum Bayes risk decoding 以及 typical decoding 。其他的一些工作试图显式地促进解码过程中的多样性。

      • re-ranking 是提高语言模型的 generation quality 的另一种常见方法。

        • 《Lamda: Language models for dialog applications》 收集额外的人类标注来训练一个 re-ranker 用于 response filtering

        • 《Training verifiers to solve math word problems》 训练一个 "verifier"re-rank 所生成的解决方案。与仅仅微调语言模型相比,这大大提高了数学任务的求解率。

        • 《Measuring and improving consistency in pretrained language models》 通过用额外的 consistency loss 来扩展预训练,提高了 factual knowledge extraction 的一致性。

        所有这些方法都需要训练一个额外的re-ranker 、或收集额外的人类标注,而 self-consistency 不需要额外的训练、微调、或额外的数据收集。

    • 抽取 reasoning path:以前的一些工作考虑了特定的方法从而用于识别推理路径( reasoning path ),例如:

      • 构建 semantic graph《Exploiting reasoning chains for multi-hop science question answering》)。

      • 学习 RNN 来检索维基百科图上的推理路径(《Learning to retrieve reasoning paths over wikipedia graph for question answering》)。

      • 用人类标注的推理路径对数学问题进行微调(《Training verifiers to solve math word problems》)。

      • 或者用基于启发式的伪推理路径训练一个extractor《Multi-hop question answering via reasoning chains》)。

      最近,推理过程中多样性的重要性已经被注意到,但只是通过 task-specific training 来利用,或者通过在所提取的推理路径上应用额外 QA 模型(《Multi-hop question answering via reasoning chains》),或者通过在 commonsense knowledge graph 中引入潜在变量(《Diversifying content generation for commonsense reasoning with mixture of knowledge graph experts》)。

      与这些方法相比,self-consistency 要简单得多,不需要额外的训练。我们提出的方法只是将推理路径的generation 与解码器的采样结合起来,利用聚合来找到最一致的答案,无需额外的模块。

    • 语言模型的 consistency:之前的一些工作表明,语言模型在对话(《Towards a human-like open-domain chatbot》)、explanation generation《Make up your mind! adversarial generation of inconsistent natural language explanations》)和 factual knowledge 提取(《Measuring and improving consistency in pretrained language models》)中会出现不一致的问题。

      • 《Consistency of a recurrent language model with respect to incomplete decoding》"consistency" 来指在recurrent language model 中生成一个无限长的序列。

      • 《Improving coherence and consistency in neural sequence models with dual-system, neuro-symbolic reasoning》通过增加一个受 System-2 启发的逻辑推理模块,改善了 System 1 模型的样本的逻辑一致性。

      在本文中,我们关注的是一个稍微不同的"consistency" 概念,即利用不同推理路径之间的答案一致性来提高准确率。

23.1 多样化的推理推荐之间的 Self-Consistency

  1. 人类的一个突出方面是,人们的思维方式不同。我们很自然地认为,在需要深思熟虑的任务中,很可能有几种方法来解决这个问题。我们提出,这样的过程可以通过语言模型解码器的sampling 在语言模型中进行模拟。例如,如 Figure 1 所示,一个模型可以对一个数学问题产生几个貌似合理的回答,而这些回答都能得出相同的正确答案(第一个输出和第三个输出)。由于语言模型不是完美的reasoner ,模型也可能产生一个不正确的推理路径、或在其中一个推理步骤中犯错(例如在第二个输出),但这种解决方案不太可能得出相同的答案。也就是说,我们假设正确的推理过程(即使它们是多样化的),往往比不正确的推理过程在最终答案上有更大的一致性。

    我们通过提出以下 self-consistency 方法来利用这一直觉:

    • 首先,一个语言模型通过一组人工编写的 chain-of-thought exemplars 来被提示。

    • 接下来,我们从语言模型的解码器中采样一组候选输出,生成一组多样化的候选推理路径。self-consistency 与大多数现有的采样算法兼容,包括temperature samplingtop-k sampling 、以及 nucleus sampling

    • 最后,我们通过 marginalizing out 被抽样的推理路径,并从 generated answers 中选择最一致的答案来汇总答案。

  2. 更具体而言:假设被生成的答案 ai 来自于一个固定的答案集合 aiA ,其中 i=1,2,,m 表示从解码器采样到的 m 个候选答案。给定一个 prompt 和一个问题,self-consistency 引入一个额外的潜在变量 ri,它是代表第 i 个输出中的推理路径的 tokens 序列,然后组合得到 (ri,ai),其中 riai,即推理路径 ri 可以达到最终答案 ai

    作为一个例子,考虑 Figure 1 中的第三个输出:前几句 "She eats 3 for breakfast ... So she has 9 eggs * $2 = $18." 构成了 ri ,而最后一句话(即,"The answer is $18")中的答案 18 被解析为 ai。当从模型的解码器中采样多个 (ri,ai) 之后,self-consistency 通过对 ai 进行多数投票(majority vote ),即 argmaxai=1mI(ai=a),或者我们定义为最终答案集合中最 "一致" 的答案,从而对 ri 进行边际化。

  3. 在下表中,我们展示了通过使用不同的答案聚合策略对一组推理任务的 test accuracy 。除了多数投票,我们还可以在汇总答案时用 P(ri,aiprompt, question) 对每个 (ri,ai) 进行加权。注意,为了计算 P(ri,aiprompt, question) ,我们可以在给定(prompt, question) 的条件下模型生成 (ri,ai) 的未归一化的概率、或者我们可以通过输出长度将条件概率归一化(GPT-3 ),即:

    (1)P(ri,aiprompt, question)=exp(1Kk=1KlogP(tkprompt, question, t1,,tk1))

    其中:logP(tkprompt, question, t1,,tk1) 为在 (ri,ai) 以前 k1token 为条件的情况下生成第 ktoken tk 的对数概率;K(ri,ai) 中的 tokens 的总数。

    在下表中,我们显示,采取 "unweighted sum" ,即直接对 ai 进行多数投票,产生的准确率与使用 "normalized weighted sum" 的结果非常相似。我们仔细观察了模型的输出概率,发现这是因为对于每个 (ri,ai) 来说,归一化的条件概率 P(ri,aiprompt, question) 相互之间是相当接近的,也就是说,语言模型将这些 generations 视为 "similarly likely"

    此外,当汇总答案时,下表中的结果显示,与未归一化的方法相比,"归一化"的加权和产生了更高的准确率。为了完整起见,在下表中我们还报告了采取 "加权平均" 的结果,即每个 a 得到的分数是其加权和除以 i=1mI(ai=a) ,这导致了更差的性能。

    下图中没有给出 Unweighted avg ,因为 Unweighted avg 就是等价于 Unweighted sum

  4. self-consistency 在开放式文本生成、以及有固定答案的最佳文本生成之间探索了一个有趣的空间。推理任务通常有固定的答案,这就是为什么研究人员普遍考虑贪婪的解码方法。然而,我们发现,即使预期的答案是固定的,在推理过程中引入多样性也是非常有益的;因此,我们利用采样来实现这一目标。应该注意的是,self-consistency 只适用于最终答案来自固定答案集合的问题,但原则上,如果能在多个 generations 之间定义一个良好的一致性指标(例如,两个答案是否一致或相互矛盾),这种方法可以扩展到开放式文本生成问题。

23.2 实验

  1. 任务和数据集:考虑如下的 reasoning benchmark

    • 算术推理: Math Word Problem Repository (包括 AddSub, MultiArith, ASDiv )、AQUA-RATGSM8KSVAMP

    • 常识推理:CommonsenseQAStrategyQAAI2 Reasoning Challenge: ARC

    • 符号推理:

      • last letter concatenation:,例如,输入是 "Elon Musk"、输出应该是 "nk"

      • 来自 《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》Coinflip:一枚硬币是正面朝上的,经过若干次翻转之后,硬币是否还是正面朝上?

  2. 语言模型和 prompts

    • UL2:一个具有 20B 参数的 encoder-decoder 模型,在 a mixture of denoisers上训练。UL2 是完全开源的,在zero-shot SuperGLUE 上具有比 GPT-3 类似的或更好的性能,只有 20B 参数因此更便于计算。

    • GPT-3:有 175B 参数。我们使用 Codex 系列中的两个公共引擎 code-davinci-001code-davinci-002 来帮助 reproducibility

    • LaMDA-137B:一个稠密的从左到右的、decoder-only 的语言模型,有 137B 参数,在网络文档、对话数据、以及维基百科的混合体上进行预训练。

    • PaLM-540B:一个稠密的从左到右的 decoder-only 语言模型,有 540B 参数,在一个由 780B tokens 组成的高质量语料库上进行了预训练,其中包括过滤后的网页、书籍、维基百科、新闻文章、源代码、以及社交媒体对话。

    我们在 few-shot setting 下进行所有的实验,没有训练或微调语言模型。为了进行公平的比较,我们使用了与 《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》 相同的 prompts

    • 对于所有的算术推理任务,我们使用相同的 8 个手动编写的 exemplars 组成的集合。

    • 对于每个常识推理任务,我们从训练集中随机选择 4-7 个样例,并使用手动编写的 chain-of-thought prompts

    所有 prompts 的全部细节,如下表所示。

  3. 采样方案:为了采样不同的推理路径,我们采用了与 GPT-3《The curious case of neural text degeneration》建议的类似设置,用于 open-text generation 。具体而言:

    • 对于 UL2-20BLaMDA-137B ,我们应用了 T=0.5temperature sampling ,并在概率最高的 top-k (k=40) tokens 处截断。

    • 对于 PaLM-540B ,我们应用了 T=0.7, k=40

    • 而对于 GPT-3 ,我们使用 T=0.7 ,没有 top-k 截断。

    我们在后续章节中提供了一个消融研究,以表明 self-consistency 对采样策略和超参数通常是鲁棒的。

23.2.1 实验结果

  1. 我们报告了 10 次运行中的 self-consistency 的结果,在每次运行中,我们从解码器的中独立采样了 40 个输出。我们比较的 baseline 是带有贪婪解码的chain-of-thought prompting ,被称为 CoT-prompting

    • 算术推理:如下表所示,self-consistency 在所有四个语言模型中的算术推理性能都比 chain-of-thought prompting 有明显提高。更令人惊讶的是,当语言模型的规模增加时,收益变得更加显著,例如,我们看到 UL2-20B 的绝对准确率提高了+3% ~ 6% ,但 LaMDA- 137BGPT-3 则提高了 +9% ~ 23%

      对于在大多数任务上已经取得高准确率的大型模型(如 GPT-3, PaLM-540B),在 AQuAGSM8K 等任务上,self-consistency 仍然贡献了显著的额外收益(绝对准确率 +12% ~ 18% )。通过 self-consistency ,我们在几乎所有的任务上都取得了SOTA 结果: self-consistency 是无监督的、且是任务无关的,这些结果与现有的方法(其中现有的方法需要 task-specific training、或者需要用成千上万个样本进行微调)相比更有优势。

    • 常识推理和符号推理:Table 3 显示了常识推理和符号推理任务的结果。同样,self-consistency 在所有四个语言模型中都产生了很大的收益,并在 6 个任务中的 5 个任务中获得了 SOTA 结果。

      对于符号推理,我们测试了out-of-distribution:OOD setting ,其中 input prompt 包含 2-letters2-flips 的例子,但我们测试了 4-letters4-flips 的例子(这种设置更具挑战性,因为 PaLM-540BGPT-3 已经可以实现完美的· in-distribution 准确率)。在这种具有挑战性的 OOD setting 中,与具有足够模型规模的 CoT-prompting 相比,self-consistency 的收益仍然相当可观。

    • 为了显示所采样到的推理路径数量的影响,我们在下图中绘制了关于不同sampled paths的数量(1, 5, 10, 20, 40 )的准确率(10 次运行的均值和标准差)。结果显示,采样更多数量的推理路径(如 40 个)会带来持续更好的性能,进一步强调了在推理路径中引入多样性的重要性。在 Table 4 中,我们用两个任务中的几个样本表明,与贪婪解码相比,self-consistency 产生了一个更丰富的推理路径集合。

      然而,采样更多的推理路径,需要花费的成本也更高:40 个推理路径带来 40 倍的推理成本。

23.2.2 当 Chain-Of-Thought 损害性能时,Self-Consistency 会有帮助

  1. 《The unreliability of explanations in few-shot prompting for textual reasoning》 表明:在 few-shot in-context learning 中,与 standard prompting 相比,有时 chain-of-thought prompting 可能会损害性能。在这里,我们在一组常见的NLP 任务中利用 self-consistency 进行了一项研究,看看它是否可以帮助弥补这个 gap。这些任务包括:

    • 闭卷问答任务:BoolQHotpotQA

    • 自然语言推理任务:e-SNLIANLIRTE

    PaLM-540B 上的结果如下表所示。对于一些任务(如 ANLI-R1e-SNLIRTE ),与 standard prompting 相比,添加 chain-of-thought 确实会损害性能,但 self-consistency 能够鲁棒地提升性能并超过 standard prompting ,使其成为 few-shot in-context learning 中添加 rationales 的可靠方法从而用于常见的 NLP 任务。

23.2.3 和其它现有方法的比较

  1. 我们进行了一系列额外的研究,并表明 self-consistency 明显优于现有的方法,包括 sample-and-rankbeam searchensemble-based 的方法。

  2. Sample-and-Rank 方法的比较:一种常用的提高 generation quality 的方法是 sample-and-rank ,即从解码器中采样多个序列,然后根据每个序列的对数概率进行排序(《Towards a human-like open-domain chatbot》)。我们在 GPT-3 code-davinci-001 上比较了 self-consistencysample-and-rank ,方法是从解码器中采样出与 self-consistency 相同数量的序列,并从排名靠前的序列中获取最终答案。结果如下图所示。虽然 sample-and-rank 通过额外的 sampled sequencesranking,确实提高了准确率,但与self-consistency 相比,其增益要小得多。

  3. Beam Search 的比较:在下表中,我们在 UL2-20B 上将 self-consistencybeam search decoding 进行了比较。为了进行公平的比较,我们报告了在相同数量的 beams 和推理路径下的准确率。在这两项任务中,self-consistency 都明显优于 beam search 。注意 self-consistency 也可以采用 beam search 来解码每个推理路径(结果显示为 "Self-consistency using beam search" ),但其性能比 self-consistency with sampling 要更差。原因是 beam search 产生的输出的多样性较低(《Mutual information and diverse decoding improve neural machine translation》);而在 self-consistency 中,推理路径的多样性是取得更好性能的关键。

  4. Ensemble-based 方法的比较:我们进一步将 self-consistencyensemble-based 方法进行比较,从而用于 few-shot learning 。具体而言,我们考虑通过以下方式进行 ensembling

    • prompt order permutation :我们将 prompt 中的示例随机排列 40 次,以缓解模型对 prompt order 的敏感性。

    • multiple sets of prompts《Making pre-trained language models better few-shot learners》):我们手动编写 3 组不同的prompts

    我们在这两种方法中对贪婪解码的答案采取多数投票,作为一个 ensemble 。下表显示,与 self-consistency 相比,现有的 ensemble-based 方法取得的收益要小得多。

    此外,请注意,self-consistency 不同于典型的 model-ensemble 方法:

    • model-ensemble 方法中,多个模型被训练,它们的输出被汇总。

    • self-consistency 的作用更像是在单个语言模型之上的 "self-ensemble"

    我们在附录A.1.3 中额外展示了 ensembling multiple models 的结果,其中 model-ensembles 的表现比 self-consistency 差很多。

    理论上讲,多个 prompts 也能提供多样性,同一组 prompts 的不同排列也能提供多样性。读者猜测:除了多样性之外,还需要强调一致性。Self-Consistency 是在同一个模型的同一组 prompts 的同一个排列上进行的,因此一致性更好。

2.2.4 额外的研究

  1. 我们进行了一些额外的实验来分析 self-consistency 方法的不同方面,包括它对采样策略和超参数的鲁棒性,以及它在 imperfect promptsnon-natural-language 推理路径下是如何工作的。

  2. Self-Consistency 对采样策略和 scaling 的鲁棒性:在 PaLM-540B 上,我们通过改变 temperature sampling 中的 Ttop-k sampling 中的 k 、和 nucleus sampling 中的 p ,从而表明 self-consistency 对采样策略和超参数是鲁棒的,如左图所示。

    右图显示,self-consistency 有力地提高了 LaMDA-137B 模型系列在所有规模上的性能。由于某些能力(如算术)只有在模型达到足够的规模时才会出现,因此较小的模型的增益相对较低。

    这里面的温度仍然较小,使得输出分布与均匀分布较远。如果温度超参数设置很大,那么输出分布就是均匀分布,最终结果很可能较差。

  3. Self-Consistency 改善了 Imperfect Prompts 的鲁棒性:对于使用人工构建 promptsfew-shot learning ,人类标注员在创建 prompts 时有时会犯一些小错误。我们进一步研究了 self-consistency 是否有助于提高语言模型对 imperfect prompts 的鲁棒性。我们在下表中显示了结果:虽然 imperfect prompts 降低了贪婪解码的准确率(17.1 -> 14.9),但 self-consistency 可以填补 gap 并有力地改善结果。

    此外,我们发现 consistency(就与 final aggregated answer 一致的 decodes 的百分比而言)与准确率高度相关(如下图所示,在 GSM8K 上)。这表明,人们可以使用 consistency 作为一个指标来估计模型的置信度。即,self-consistency 赋予了模型 "知道自己不知道" 的某种能力。

    即,如果多个采样之间的一致性较低,那么可以认为模型结果的置信度较低。

    这个可以推广到 generation 任务:如果多个 generation 结果之间的相似度较低,那么置信度较低。相似度可以通过单词重叠的比例来衡量。

  4. Self-Consistency 适用于 Non-Natural-Language 推理路径、以及 Zero-shot CoT:我们还测试了 self-consistency 概念对其他形式的 intermediate reasoning 的通用性,如方程式:例如,从 "There are 3 cars in the parking lot already. 2 more arrive. Now there are 3 + 2 = 5 cars." , 到 "3+2=5" )。

    结果显示在 Table 8 中("Prompt with equations" ):self-consistency 仍然通过生成中间方程来提高准确性;然而,与生成自然语言的推理路径相比,收益要小一些,因为方程要短得多,在解码过程中产生多样性的机会也少。

    此外,我们测试了 self-consistency with zero-shot chain-of-thought《Large language models are zero-shot reasoners》),并显示 self-consistencyzero-shot CoT 也有效,并显著提高了结果(+26.2% )。

23.3 讨论

  1. self-consistency 的一个局限性是它会产生更多的计算成本。在实践中,人们可以尝试少量的路径(如 5 个或 10 个)作为起点,以实现大部分的收益,同时不产生太多的成本,因为在大多数情况下,性能很快就饱和了(Figure 2 )。

    作为未来工作的一部分,人们可以使用 self-consistency 来产生更好的监督数据来微调模型,这样在微调之后,模型单次推理运行中就可以给出更准确的预测。

    此外,我们观察到,语言模型有时会产生不正确或无意义的推理路径(例如,Table 4 中的 StrategyQA 例子,两个 population number 并不完全正确),需要进一步的工作来更好地支持模型的 rationale generation

二十四、Zero-Shot CoT[2022]

论文:《Large Language Models are Zero-Shot Reasoners》

  1. scaling up 语言模型的规模是最近自然语言处理的革命的关键因素。大型语言模型的成功往往归功于 few-shot learningzero-shot learning 。它可以通过简单地对少数样本(few-shot learning )、或描述任务的指令(zero-shot learning )作为模型的条件输入来解决各种任务。调节语言模型的方法被称为 "prompting"《Pre-train, prompt, and predict: A systematic survey of prompting methods in natural language processing》)。手动地或自动地设计 prompts 已成为NLP 的一个热门话题。

    LLM 在直观的和单步的 system-1 任务中的出色表现相比,其中具有 task-specific few-shot/zero-shot prompting,即使是100B 或更多参数规模的语言模型在需要缓慢和多步推理的 system-2 任务中也曾陷入困境(《Scaling language models: Methods, analysis & insights from training gopher》)。为了解决这一缺陷,COTSelf-Consistency COT 提出了 chain of thought: COT prompting ,其中 COT promptingLLM 提供 step-by-step reasoning examples ,而不是标准的 question and answer examples (如下图 Figure 1(a) 所示)。这样的 chain of thought demonstrations 有助于模型生成一个推理路径(reasoning path ),该推理路径将复杂的推理分解成多个简单的步骤。值得注意的是,有了 CoTreasoning 性能就能更好地满足 scaling laws ,并随着语言模型的大小而跳跃式增长。例如,当与 540B 参数的 PaLM 模型相结合时,在几个 benchmark reasoning tasks 中,chain of thought prompting 比标准的 few-shot prompting 明显提高了性能,例如在 GSM8K17.9% -> 58.1%

    CoT prompting 的成功,以及其他许多 task-specific prompting 的工作,经常被归因于 LLMfew-shot learning 能力。然而我们表明:LLM 是优雅的 zero-shot reasoner ,通过添加一个简单的 prompt"Let's think step by step" ,从而在回答每个问题之前促进 step-by-step thinking (如 Figure 1 (d) 所示)。尽管简单,我们的 Zero-shot-CoT 还是成功地以 zero-shot 的方式生成了一条合理的推理路径,并在标准的 zero-shot 方法失败的情况下达到了正确答案。重要的是,我们的 Zero-shot-CoT 是通用的和任务无关的,不像之前的 task-specific prompt engineering ,后者的形式是 few-shot exampleszero-shot templates 。我们的 Zero-shot-CoT 可以促进各种推理任务的 step-by-step 回答,包括算术推理、符号推理、常识推理、以及其他逻辑推理任务,而无需修改每个任务的 prompt

    我们在 Table 2 中对 Zero-shot-CoT 与其他 prompting baselines 进行了经验评估。虽然我们的 Zero-shot-CoT 在精心制作的 task-specific step-by-step examples 中表现不佳,但 Zero-shot-CoT0-shot baseline 相比取得了巨大的分数提升,例如:使用 InstructGPT 175B 模型,在 MultiArith 上从 17.7% -> 78.7% 、在 GSM8K 上从 10.4% -> 40.7% 。我们还用另一个现成的大型模型 PaLM 540B 来评估 Zero-shot-CoT ,在 MultiArithGSM8K 上显示出类似的改进幅度。重要的是,在我们 single fixed prompt 下,zero-shot LLM 有一个明显更好的 scaling 曲线,可与 few-shot CoT baseline 相媲美。我们还表明,除了 Few-shot-CoT 需要人为地设计 multi-step reasoning prompts 之外,如果 prompt example question 类型和 task question 类型不匹配,它们的性能就会恶化,这表明对每个任务的 prompt 设计的高度敏感性。相比之下,这种单个 prompt 在不同推理任务中的通用性暗示了 LLM 未被开发和未被研究的 zero-shot 基础能力,如通用逻辑推理等 higher-level 的广泛的认知能力。虽然充满活力的 LLM 领域是从卓越的 few-shot learner 的前提下开始的(GPT-3),但我们希望我们的工作能鼓励更多的研究来揭示隐藏在这些模型中的high-level、多任务的 zero-shot 能力。

  2. 相关工作和讨论:

    • LLM 的推理能力:一些研究表明,pre-trained model 通常不擅长推理(reasoning ),但通过使其产生 step-by-step reasoning ,其能力可以大幅提高,要么通过微调、要么通过 few-shot prompting (相关工作的总结见 Table 6 )。与大多数先前的工作不同,我们专注于 zero-shot prompting ,并表明在各种需要复杂的 multi-hop thinking 的任务中,一个 single fixed trigger prompt 大大增加了 LLMzero-shot reasoningTable 1 ),特别是当模型被 scaled up 时(Figure 3 )。它还能在不同的任务中产生合理的、可理解的 chain of thought ,即使最后的预测是错误的,参考原始论文的附录 B、附录 C (下面的 Table 12 是一部分表格,全部表格参考论文的附录部分)。

      与我们的工作类似,《Prompt programming for large language models: Beyond the few-shot paradigm》证明了一个 prompt"Let’s solve this problem by splitting it into steps" ,会促进一个简单算术问题的多步推理。然而,他们将其作为一个 task-specific example ,并没有对各种各样的推理任务在 baseline 上进行定量评估。

      《Unsupervised commonsense question answering with self-talk》 提议将常识性问题分解为一系列的 information seeking 问题,如 "what is the definition of [X]" 。它不需要 demonstrations ,但每项推理任务都需要大量的人工的 prompt engineering

      我们的结果强烈地表明,LLM 是优雅的 zero-shot reasoner ,而之前的 《Chain of thought prompting elicits reasoning in large language models》 往往只强调 few-shot learning ,例如,没有 zero-shot baseline 的报告。我们的方法不需要耗时的微调或昂贵的 sample engineering ,并且可以与任何 pre-trained LLM 相结合,作为所有推理任务的最强的 zero-shot baseline

    • LLMzero-shot 能力:GPT-2 表明,LLM 在许多 system-1 任务中具有出色的 zero-shot 能力,包括阅读理解、翻译和摘要。《Multitask prompted training enables zero-shot task generalization》《Training language models to follow instructions with human feedback》表明,LLM 的这种 zero-shot能力可以通过显式地微调模型以遵循指令来提高。虽然这些工作的重点是 LLMzero-shot 性能,但我们关注的是 system-1 任务之外的许多 system-2 任务,鉴于平坦的scaling 曲线,这被认为是对 LLM 的巨大挑战。此外,Zero-shot-CoTinstruction tuning 是正交的;它增加了 Instruct GPT3, vanilla GPT3, PaLMzero-shot(见 Figure3)。

    • From Narrow (task-specific) to Broad (multi-task) Prompting:大多数 prompts 都是 task-specific 的。虽然 few-shot prompts 是由于 task-specific in-context samples ,因此,大多数 zero-shot prompts 也集中在 per-task engineering (of templates) 。借用 《On the measure of intelligence》 的术语,这些 prompts 可以说是在激发 LLM"narrow generalization"task-specific 技能。另一方面,我们的方法是一个multi-task prompt,激发 LLM"broad generalization" 或广泛的认知能力,如逻辑推理或system-2本身。我们希望我们的工作可以作为一个参考,不仅可以加速对 LLM 的逻辑推理的研究,而且可以发现LLM的其他的广泛的认知能力。

    • 训练数据集的细节:该工作的一个局限性是缺乏针对 LLM 的训练数据集细节的公开信息,例如 GPT 001 vs GPT 002original GPT3 vs Instruct-GPT ,以及 PaLM 模型的数据。然而,所有最近的大型模型( InstructGPT 001 or 002, Original GPT3, PaLM )从 Zero-shotZero-shot-CoT 的性能大增,以及在算术任务和非算术任务中的一致改进,表明这些模型不太可能是简单的记忆,而是捕获了一种任务无关的多步骤推理能力从而用于通用的 problem solving 。虽然大多数结果是基于 InstructGPT 的,因为它是性能最好的 open-access LLM ,但关键结果在 PaLM 上复现,而且 InstructGPT 的数据集细节也证实它不是专门为多步骤推理而设计的。

    • 局限性和社会影响:我们的工作是基于针对大型语言模型的 prompting方法。LLM 已经在来自互联网的各种数据源的大型语料库中进行了训练,并显示出捕捉和放大了训练数据中发现的 biasprompting 是一种方法,该方法寻求利用语言模型捕获到的模式,这些模式有利于各种任务,因此 prompting 也有同样的缺点。也就是说,我们的方法是一种更直接的方式来探究 pre-trained LLM 内部的 complex reasoning ,消除了之前的 few-shot 方法中的 in-context learning 的混杂因素,并可以导致对 LLM 中的 bias 进行更加 unbiased 的研究。

24.1 背景

  1. 我们简要回顾一下构成这项工作的基础的两个核心概念: large language model and prompting 的出现、以及用于多步骤推理的 chain of thought: CoT prompting

    • large language models and prompting:语言模型是一个旨在估计文本上的概率分布的模型。最近,通过更大的模型规模、更大的数据进行 scaling improvements ,使 pre-trained 的大型语言模型能够在许多下游的 NLP 任务中表现出惊人的能力。

      除了经典的 "pre-train and fine-tune" 范式(《Pre-train, prompt, and predict: A systematic survey of prompting methods in natural language processing》),规模到 100B+ 参数的模型通过 in context learning 的方式表现出有利于 few-shot learning 的特性(GPT-3)。其中,在 in context learning 中,人们可以使用被称为 prompt 的文本或模板来强烈引导 generation 来输出目标任务的答案,从而开启一个 "pre-train and prompt" 的时代(《What makes good in-context examples for gpt-3?》)。在这项工作中,我们把这种具有显式的 few task examplesprompts 称作 few-shot prompts ,而把其他仅有模板的 prompts 称为 zero-shot prompts

    • Chain of thought prompting:多步骤算术推理 benchmarks 、以及逻辑推理 benchmarks 特别地挑战了大型语言模型的 scaling laws《Scaling language models: Methods, analysis & insights from training gopher》)。 chain of thought: CoT prompting ,是 few-shot prompting 的一个实例,通过将 few-shot examples 中的答案修改为 step-by-step 的答案从而提出了一个简单的解决方案,并在这些困难的 benchmarks 中取得了显著的性能提升,尤其是当与PaLM 这样的超大型语言模型结合时。

      Figure 1 的最上面一行显示了标准的 few-shot prompting(few-shot) CoT prompting 。值得注意的是,在处理这种困难的任务时,few-shot learning 被认为是给定的,在最初的工作中甚至没有报告 zero-shot baseline 的表现(《Chain of thought prompting elicits reasoning in large language models》)。为了区别于我们的方法,在本工作中,我们将 《Chain of thought prompting elicits reasoning in large language models》的方法称为 Few-shot-CoT

24.2 Zero-Shot CoT

  1. 我们提出了 Zero-shot CoT ,一种用于 chain of thought reasoningzero-shot template-based prompting 。它与原始的 chain of thought prompting 不同,因为它不需要 step-by-step few-shot examples ,它与之前的大多数 template prompting《Pre-train, prompt, and predict: A systematic survey of prompting methods in natural language processing》)不同,因为它本身是任务无关的,用单个模板就能激发广泛的任务的 multi-hop reasoning 。我们方法的核心思想很简单,如 Figure 1 所述:添加 " Let’s think step by step" ,或添加类似的文本(见 Table 4 ),从而抽取 step-by-step reasoning

  2. 两阶段的 prompting:虽然 Zero-shot-CoT 在概念上很简单,但它使用了两次 prompting 来提取推理和答案,如 Figure 2 所解释。相比之下,zero-shot baseline (见 Figure 1 的左下方)已经使用了 "The answer is"prompting 形式,从而以正确的格式提取答案。few-shot prompting ,无论是标准的或 CoT 的,通过显式地设计 few-shot example answers 以这种格式结束,从而避免了这种 answer-extraction prompting 的需求(见 Figure 1 的右上角和左上角)。总之,Few-shot-CoT 需要对每个任务的具备特定答案格式的 a few prompt examples 进行仔细的人力工程,而 Zero-shot-CoT 需要的工程较少,但需要对 LLM 提示两次。

    • 第一次提示:推理提取(reasoning extraction)。 在这一步中,我们首先使用一个简单的模板 "Q: [X]. A: [T]" 将输入的问题 x 修改成一个 prompt x ,其中: [X]x 的输入槽;[T] 是手工制作的 trigger sentence t 的槽,它将提取出回答问题 xchain of though 。例如,如果我们使用 "Let’s think step by step"作为 trigger sentenceprompt x 将是 "Q: [X]. A: Let’s think step by step." 。更多的 trigger examplesTable 4

      prompted text x 然后被馈入语言模型,并生成后续的句子 z 。我们可以使用任何解码策略,但为了简单起见,我们在本文中使用了贪婪解码。

    • 第二次提示:答案提取(answer extraction)。在第二步,我们使用所生成的句子 zprompted sentence x 来从语言模型中提取最终答案。

      具体来说,我们简单地将三个元素拼接起来,如 "[X'] [Z] [A]" ,其中[X'] 表示第一次的 prompted text x[Z] 表示第一步产生的句子 z ,而 [A] 表示用于提取答案的 trigger sentence 。这一步的 promptself-augmented 的,因为该 prompt 包含由同一语言模型所生成的句子 z

      在实验中,我们根据答案格式的不同,使用略有不同的 answer trigger 。例如:

      • 对于多选题问答,我们使用 "Therefore, among A through E, the answer is"

      • 而对于需要数字答案的数学问题,我们使用"Therefore, the answer (arabic numerals) is"

      answer trigger 句子的清单见 Table 9, Table 10left 表示用于 answer extraction 的默认 promptsright 为常规的 prompts )。最后,语言模型将 prompted text 作为输入,生成句子 y^ 并解析最终答案。解析器的细节见 Table 11

24.3 实验

  1. 任务和数据集:我们在来自四类推理任务的 12个数据集上评估了我们的方法,包括算术推理、常识推理、符号推理、以及其他逻辑推理任务。每个数据集的详细描述见附录 A.2

    • 算术推理任务:六个数据集,SingleEq, AddSub, MultiArith, AQUARAT, GSM8K, SVAMP

      • SingleEq, AddSub 包含比较容易的问题,不需要多步计算就能解决任务。

      • MultiArith, AQUA-RAT, GSM8k, SVAMP 是更具挑战性的数据集,需要多步推理来解决。

    • 常识推理任务:CommonsenseQA, StrategyQA

      • CommonsenseQA 提出的问题具有复杂的语义,通常需要基于先验知识进行推理。

      • StrategyQA 要求模型推断出一个隐含的 multi-hop reasoning 来回答问题。

    • 符号推理任务:Last Letter Concatenation, Coin Flip

      • Last Letter Concatenation 要求模型将每个单词的最后一个字母连接起来。对于每个样本,我们使用随机选择的四个名字。

      • Coin Flip 要求模型回答在人们翻转或不翻转硬币后,硬币是否仍然是正面朝上。我们创建了四次翻转或不翻转的样本。

      虽然这些任务对人类来说很容易,但语言模型通常表现出平坦的 scaling 曲线。

    • 其它逻辑推理任务:BIG-bench 中的两个评估集合,Date UnderstandingTracking Shuffled Objects

      • Date Understanding 要求模型从上下文中推断出日期。

      • Tracking Shuffled Objects 测试的是模型在给定其初始状态和对象混洗序列的情况下,推断对象最终状态的能力。我们的数据集跟踪了三个 shuffled objects

  2. 模型:十七个模型。主要的实验是用 Instruct-GPT3text-ada/babbage/curie/davinci-001text-davinci-002 )、原始的 GPT3ada, babbage, curie, davinci )和 PaLM8B, 62B, 540B )。此外,我们使用 GPT-2GPT-NeoGPT-JT0OPT 进行 model scaling 的研究。语言模型的大小从0.3B540B 不等。我们既包括标准的模型(如 GPT-3OPT ),也包括遵循指令的变体(如 Instruct-GPT3T0 )。模型描述细节见附录 A.3 。除非另有说明,我们在整个实验中都使用 text-davinci-002

  3. baseline:我们主要将我们的 Zero-shot-CoT 与标准的 Zero-shot prompting 进行比较。对于 Zero-shot 实验,与 Zero-shot-CoT 类似的 answer prompts 被作为默认使用。详见 Table 9, Table 10

    为了更好地评估 LLM 在推理任务上的 zero-shot 能力,我们还将我们的方法与 《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》 中的 Few-shotFew-shot-CoT 基线进行了比较,使用的是相同的 in-context examples

    在整个实验中,我们对所有的方法都使用了贪婪解码。对于zero-shot 方法,其结果是确定的。对于 few-shot 方法,由于 in-context examples 的顺序可能会影响结果(《Fantastically ordered prompts and where to find them: Overcoming few-shot prompt order sensitivity》),我们在所有方法和数据集中只用固定的种子运行一次实验,以便与 zero-shot 方法进行公平的比较。 《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》 的研究表明,在 CoT 实验中,样本的顺序并没有造成大的差异。

  4. 清理答案:在模型通过 answer extraction 输出一个文本之后,我们的方法只提取答案文本中首先满足答案格式的部分(参考 Figure 2)。例如,如果 answer prompting 在算术任务中输出 "可能是375376 ",我们就提取第一个数字 " 375 ",并将其设置为模型预测值。在多选题的情况下,我们遇到的第一个大字母被设置为预测值。更多细节见 Table 11 。标准的 Zero-shot 也遵循同样的思路。

    对于 Few-shotFew-shot-CoT 方法,我们遵循 《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》 ,首先从模型输出中提取 "The answer is " 之后的答案文本,并应用相同的 answer cleansing 来解析答案文本。如果在模型输出中没有找到 "The answer is " ,我们就从文本的后面进行搜索,并将第一个满足答案格式的文本设置为预测值。

  5. Zero-shot-CoT vs. Zero-shot:如下表所示,Zero-shot-CoT 在六个算术推理任务中的四个(MultiArith, GSM8K, AQUA, SVAM )、所有符号推理任务、和所有其他逻辑推理任务上大大超越了 zero-shot prompting 。我们的方法在其余两个算术推理任务( SingleEqAddSub )中表现平平,这是意料之中的,因为它们不需要多步骤推理。

    在常识推理任务中,Zero-shot-CoT 并没有提供性能提升。这是意料之中的,因为 COT 也报告说,即使 Few-shot-CoTLambda(135B) 上也没有提供性能提升,但在与大得多的 PaLM(540B) 模型结合时,确实改善了 StrategyQA ,这可能也适用于我们的情况。更重要的是,我们观察到许多生成的 chain of thought 在逻辑上是正确的,或者只包含人类可以理解的错误(见 Table 3 ),这表明 Zero-shot-CoT 确实能引起更好的常识推理,即使任务指标没有直接反映它。我们在附录 B 中提供了由 Zero-shot-CoT 为每个数据集生成的样本。

  6. 与其他 baseline 的比较:下表比较了 Zero-shot-CoT 和基线在两个算术推理基准(MultiArith, GSM8K )上的表现。standard prompting (第一个 block)和 chain of thought prompting (第2block )之间的巨大差距表明,这些任务在没有激发多步骤推理的情况下是困难的。Instruct GPT-3 (175B)PaLM (540B) 模型都获得了重大改进。

    虽然 Zero-shot-CoT 的性能自然低于 Few-shot-CoT ,但它的性能大大超过了标准的、每个任务八个样本的 Few-shot prompting

    对于 GSM8KInstruct GPT-3(175B)Zero-shot-CoT 的性能也优于微调的 GPT-3 、以及大型模型(PaLM, 540B )的 standard few-shot prompting 。使用 PaLM 的进一步实验结果见附录 D

  7. 模型大小对 zero-shot reasoning 是否重要:下图比较了 MultiArith / GSM8K 上各种语言模型的性能。在没有 chain of thought reasoning 的情况下,随着模型规模的增加,性能不会增加、或者增加缓慢,也就是说,曲线大多是平的。与此相反,对于Original/Instruct GPT-3PaLM 来说,随着模型规模的增大,chain of thought reasoning 的性能急剧增加。当模型大小较小时,chain of thought reasoning 并不有效。这个结果与 《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》 中的 few-shot 实验的结果一致。附录 E 显示了使用更多种类的语言模型的广泛实验结果,包括 GPT-2, GPT-Neo, GPT-J, T0, OPT 。我们还手动调查了所生成的 chain of thought 的质量,大型的模型明显表现出更好的推理能力(每个模型的 sampled output 见附录 B )。

  8. Error Analysis:为了更好地理解 Zero-shot-CoT 的行为,我们手动调查了由具有 Zero-shot-CoT promptingInstruct-GPT3 所生成的随机选择的样本。样本见附录 C ,其中的一些观察结果包括:

    • 在常识推理(CommonsenseQA )中,即使最后的预测不正确,Zero-shot-CoT 也经常产生灵活合理的 chain of thought 。当模型发现难以缩小到一个答案时,Zero-shot-CoT 经常输出多个答案选择(参考 Table 3 )。

    • 在算术推理(MultiArith)中,Zero-shot-CoTFew-shot-CoT 在错误模式方面表现出很大的差异。

      • 首先,Zero-shot-CoT 倾向于在得到正确的预测后输出不必要的推理步骤,这导致预测变为不正确的预测。Zero-shot-CoT 有时也不开始推理,只是重新表述输入的问题。

      • 相比之下,当所生成的 chain of thought 包括三元运算时(如 (3+2) * 4),Few-shot-CoT 往往会失败。

  9. prompt selection 如何影响 Zero-shot-CoT:我们验证了 Zero-shot-CoTinput prompts 的稳健性。下表总结了使用 16 个不同模板(分为三类)的性能。

    具体来说,遵从 《Do prompt-based models really understand the meaning of their prompts?》 ,这些类别包括指导性的(鼓励推理)、误导性的(不鼓励推理或鼓励推理但方式错误)、以及不相关的(与推理无关)。结果表明,如果文本是以鼓励 chain of thought reasoning 的方式写的,即模板属于 "instructive" 类别,那么性能就会提高。然而,准确率的差异是显著的,这取决于句子。在这个实验中,"Let’s think step by step." 取得了最好的结果。有趣的是,我们发现不同的模板鼓励模型以相当不同的方式表达推理(见附录 B ,每个模板的输出样本)。相反,当我们使用误导性或不相关的模板时,性能并没有提高。如何为 Zero-shot-CoT 自动创建更好的模板仍然是一个开放的问题。

  10. prompt selection 如何影响 Few-shot-CoT:下表展示了使用来自不同数据集的 examplesCommonsenseQA to AQUA-RATCommonsenseQA to MultiArith )时 Fewshot-CoT 的性能。这两种情况下的 domain 是不同的,但CommonsenseQA and AQUA-RATanswer format 是相同的。令人惊讶的是,来自不同领域(从常识推理到算术推理)但具有相同答案格式(多项选择)的 chain of thought examples ,在 Zero-shot (对于 AQUA-RAT )上取得了显著的性能提升,通过相对于 Zero-shot-CoTFew-shot-CoT 可能带来的相对改善作为指标。

    相比之下,当使用不同答案类型的样本时(对 MultiArith 而言),性能增益就变得很低了,这证实了之前的工作(《Rethinking the role of demonstrations: What makes in-context learning work?》),即 LLM 主要利用 few-shot examples 来推断重复格式,而不是推断任务本身。然而,在这两种情况下,结果都比 Zero-shot-CoT 差,这肯定了 Few-shot-CoTtask-specific sample engineering 的重要性。

    Zero-shot-CoT 无需考虑 examples 的迁移,因为它不需要 few-shot examples

二十五、Auto COT[2022]

论文:《Automatic Chain of Thought Prompting in Large Language Models》

  1. 大型语言模型(LLM )通过将多步骤问题分解为中间步骤,在复杂的推理任务中表现抢眼。这种推理过程是由最近的一项技术引起的:chain-of-thought: CoT prompting《Chain of thought prompting elicits reasoning in large language models》)。

    CoT prompting 可以分为两个主要范式:

    • 一种范式是:在 test question 后添加一个类似于 "Let’s think step by step" 的单个 prompt ,以促进 LLM 中的 reasoning chains《Large language models are zero-shot reasoners》)。由于这种 prompting 范式与任务无关,不需要 input-output demonstrations, ,因此被称为 Zero-Shot-CoT (下图的左边)。通过 Zero-Shot-CoTLLM 被证明是优雅的 zero-shot reasoner

      Zero-Shot-CoT 其实也拼接了 reasoning demonstrations ,只是它的 demonstrations 是由模型自动生成的(而不是人工生成的)。

    • 另一种范式是具有一个接一个的人工 reasoning demonstrationsfew-shot prompting《Chain of thought prompting elicits reasoning in large language models》) 。每个 demonstration 都有一个问题和一个 reasoning chainreasoning chain 由一个理由( rationale,即一系列中间的推理步骤)和一个预期答案组成。由于所有的 demonstrations 都是手工设计的,这种范式被称为 Manual-CoT (下图的右边)。

    在实践中,Manual-CoT 获得了比 Zero-Shot-CoT 更强的性能。然而,这种优越性能取决于手工设计的有效 effective demonstrations 。具体来说,对于 demonstrationsManual-CoT 涉及到为问题及其 reasoning chain 的设计所做的不小的努力。此外,人们针对 task-specific demonstrations 的设计需要做出更多的努力:不同的任务(如算术推理和常识推理任务)需要不同的 demonstrations 方式。

    为了消除这种手工设计,我们主张采用另一种 Auto-CoT 范式来自动构建带有问题和 reasoning chainsdemonstrations 。具体来说,Auto-CoT 利用 LLM"Let’s think step by step" prompt,为 demonstrationsone-by-one 地生成 reasoning chains ;也就是说,"let’s think not just step by step, but also one by one"。然而,我们发现,这一挑战不能通过简单的解决方案来有效解决。例如,给定数据集的一个测试问题,检索语义相似的问题并调用 Zero-Shot-CoT 来生成 reasoning chains 会失败。尽管 LLM 是优雅的 zero-shot reasoner ,但它们并不完美:Zero-Shot-CoT 仍然会在 reasoning chain 中犯错。

    为了缓解来自 Zero-Shot-CoTreasoning chain mistakes 的影响,我们的分析表明,demonstration questions 的多样性是关键所在。基于这一洞察,我们提出了一种自动构建 demonstrationsAuto-CoT 方法。Auto-CoT 包括两个主要步骤:

    • 首先,将一个给定的数据集的所有问题划分为几个 clusters

      聚类通过一个 pre-trained sentence encoder 来进行,如 SBERT

    • 其次,从每个 cluster 中选择一个有代表性的问题,并使用简单启发式的 Zero-Shot-CoT 生成它的 reasoning chain

    核心思想有两个:

    • 通过 Zero-Shot-CoT 来人工构造 ”伪“ examples ,从而进行 Few-Shot-CoT

    • 构造的时候选择多样化的样本,并且过滤掉不满足条件的样本(这个条件是人工定义的规则)。

    我们在十个 benchmark reasoning tasks 上评估了 Auto-CoT ,包括:算术推理(MultiArith, GSM8K, AQUA-RAT, SVAMP)、常识推理(CSQA, StrategyQA)、符号推理(Last Letter Concatenation, Coin Flip )。实验结果显示,在 GPT-3 上,Auto-CoT 的性能始终与需要人工设计的 Manual-CoT 相匹配,甚至超过了后者。这表明,LLM 可以通过自动构建 demonstrations 来进行 CoT reasoning

  2. 相关工作:这里回顾了构成这项工作的基础的两条研究路线:针对多步骤推理的 chain-of-thought: CoT chain-of-thought 、以及用于诱导 LLMdemonstrations 中学习的 in-context learning

    • Chain-of-thought PromptingCoT prompting 是一种诱导 LLM 产生中间推理步骤(这些中间推理步骤导致最终答案)的 gradient-free 技术。

      《Chain of thought prompting elicits reasoning in large language models》正式研究了语言模型中的 CoT promptingtopic 。这项技术诱导 LLM 产生一系列连贯的中间推理步骤,从而导致问题的最终答案。研究表明,LLM 可以通过 zero-shot prompting: Zero-Shot-CoT《Large language models are zero-shot reasoners》)、或手动编写的 few-shot demonstrationsManual-CoT )(《Chain of thought prompting elicits reasoning in large language models》 )进行 CoT reasoning

      • Zero-Shot-CoT《Large language models are zero-shot reasoners》 表明 LLM 是一个优雅的 zero-shot reasoner ,其生成的理由已经反映了 CoT reasoning 。这一发现激发了我们的工作,即利用 self-generated rationales 用于 demonstrations

        在最近的一项工作中(《Star: Bootstrapping reasoning with reasoning》),通过 LLM 来生成理由被证明是实用的。在他们的工作中,一个 LLM 被提示从而生成理由,然后那些导致正确答案的理由被选中。这种选择需要一个带有 annotated answers 的问题的训练数据集。

        相比之下,我们的工作考虑了一个更具挑战性的场景,即只给出一组测试问题(没有训练数据集),遵循 《Chain of thought prompting elicits reasoning in large language models》《Large language models are zero-shot reasoners》CoT prompting 的研究。

      • Manual-CoTManual-CoT 通过有效的 manual demonstrations 来激发 CoT reasoning 能力,从而实现更强的性能。用于 reasoning processdemonstrations 是人工设计的。然而,人们在设计问题及其 reasoning chains 方面的努力是不容易的。最近的研究并没有解决这个问题,而是主要集中在手工制作更复杂的 demonstrations 、或者利用 ensemble-like 方法。

        • 一个趋势是问题分解。在 least-to-most prompting 中(《Least-to-most prompting enables complex reasoning in large language models》),复杂的问题被简化为子问题,然后这些子问题被依次解决。

        • 另一个趋势是对一个测试问题的多个推理路径进行投票。《Self-consistency improves chain of thought reasoning in language models》 引入了一种 self-consistency 解码策略,采样 LLM 的多个输出,然后对最终答案采取多数票。

        • 《Rationale-augmented ensembles in language models》《On the advance of making language models better reasoners》 在输入空间中引入随机性,以产生更多不同的输出从而用于投票。他们使用人工设计的 demonstrations 作为种子集合,并生成额外的理由(rationales ):从种子集合中 hold out一个问题,并使用剩余的 demonstrations 来生成 LLM 对这个问题的理由。

        与上述依靠人工设计的 demonstrations 的研究路线不同,我们的工作打算消除人工设计并保持具有竞争力的性能。

    • In-Context LearningCoT promptingin-context learning: ICL 密切相关。ICL 使 LLM 能够通过馈入一些 prompted examples 来执行一个目标任务。在没有梯度更新的情况下,ICL 允许单个模型普遍地执行各种任务。有各种研究思路来提高 ICL 的性能:

      • 检索与测试实例相关的 demonstrations ,其中流行的做法是为给定的 test input 动态地检索相关的训练样本。

      • 用细粒度的信息进行 augmenting ,如加入任务指令。

      • 操纵 LLM 的输出概率,而不是直接计算 target labels 的可能性。

      尽管 ICL 很成功,但研究表明,ICLstrength 可能会因 in-context demonstrations 的选择而有很大差异(《Few-shot parameter-efficient fine-tuning is better and cheaper than in-context learning》)。详细来说,prompt 的格式,如措辞、或者 order of demonstrations ,可能会导致性能的波动。最近的一项工作 《Rethinking the role of demonstrations: What makes in-context learning work?》 甚至质疑 ground-truth input-output mapping 的必要性:在样本中使用不正确的标签只稍微降低了性能。

      然而,现有的对 ICL 的分析主要是基于标准的分类数据集和多选数据集,这些数据集只有简单的 <input -> output> mapping。我们发现,这些发现可能并不适用于具有更复杂的 <input -> rationale -> output> mappingCoT prompting 场景。例如,<input -> rationale> mapping<rationale -> output> mapping 中的错误都会导致性能急剧下降 (参考附录 A.1)。

25.1 Auto-CoT 的挑战

  1. 如前所述,ICL 的性能取决于人工制作的 demonstrations。正如在 Manual-CoT 中所报告的,在一个符号推理任务中,使用不同标注员所写的 demonstrations 会带来高达 28.2% 的准确率差异;而在大多数任务中,改变 demonstrations 的顺序会带来不到 2% 的变化。这表明,Auto-CoT 的关键挑战在于自动构建具有良好的 questions and their reasoning chainsdemonstrations

    回顾一下,Manual-CoTdemonstrations 中手工制作了几个(例如 8 个)问题。随着 similarity-based retrieval 方法被广泛用于 prompting LLM《Learning To Retrieve Prompts for In-Context Learning》《Selective annotation makes language models better few-shot learners 》),一个有希望的候选解决方案是利用 similarity-based retrieval 来采样 demonstration questions 。我们遵循 CoT 研究中更具挑战性的假设,即只给出一组测试问题(没有训练数据集)。遵循 《What makes good in-context examples for gpt-3?》,我们使用 Sentence-BERT 来编码问题。对于测试数据集中的每个问题 qtest,我们从测试集中的剩余问题中采样 demonstration questions qidemo(i=1,,k)

    我们设计了一个 Retrieval-Q-CoT 方法,从而检索基于余弦相似度的 top-k 个相似问题(例如,k=8 )。为了与这种 similarity-based 方法进行比较,我们还测试了一种基于更加多样化的方法:Random-Q-CoT ,对于每个测试问题,它随机采样 k 个其他的测试问题。

    Retrieval-Q-CoTRandom-Q-CoT 都调用 Zero-Shot-CoT 来为每个采样到的问题 qidemo 生成 reasoning chain cidemo(理由和答案),因为 LLM 是优雅的 zero-shot reasoners 。除非另有说明,否则我们使用 GPT-3 175Btext-davinci-002 )作为LLM 。在 high levelRetrieval-Q-CoTRandom-Q-CoT 都将 (qidemo,cidemo) pairi=1,2,,k )和 qtest 的拼接作为输入,从而预测 qtestreasoning chain ,其中这个被预测的 reasoning chain 包含最终答案(像 Figure 1 的右图)。

    令我们惊讶的是,Retrieval-Q-CoT 在算术数据集 MultiArith 上的表现低于 Random-Q-CoT (如下表所示)。请注意,这些检索方法最初是在有 annotated labels 的任务中提出的,然而,调用 Zero-Shot-CoT 并不能保证 reasoning chains 的完全正确。因此,我们假设 Retrieval-Q-CoT 的性能较差是由 Zero-Shot-CoTincorrect reasoning chains 造成的。为了测试这个假设,我们在另外两个数据集 GSM8KAQuA 上实验 Retrieval-QCoT ,这两个数据集包含带有 annotated reasoning chains 的训练集。结果如下表表示。在有 annotated reasoning chainssetting 下,Retrieval-Q-CoT 甚至超过了 Manual-CoT 。这一结果表明,当有 human annotations 时,Retrieval-Q-CoT 是有效的。

    虽然 human annotations 是有用的,但这种人工努力是不容易的。然而,通过 Zero-Shot-CoT 自动生成 reasoning chains 的性能低于 Manual-CoT ,特别是当 question sampling 的挑战没有得到解决时。为了设计出更有效的 Auto-CoT ,我们需要更好地理解其挑战。

    原始的 Zero-Shot-CoT 并没有采用 in-context examples,而这里的 Random-Q-CoTRetrieval-Q-CoT 借鉴了 Zero-Shot-CoT 自动生成理由、答案的能力,从而构造一批 ”伪“ 样本用于 in-context examples

    既然 Zero-Shot-CoT 可以这么做,那么所有的 Zero-shot 方法也可以参考这种方式从而成为 Few-shot 方法。

25.1.1 Retrieval-Q-CoT 的失败是由于相似性的误导

  1. 由于 Retrieval-Q-CoT 像在 Manual-CoT 中一样使用了一些 prompting demonstrations ,因此 Retrieval-Q-CoT 预计也会有竞争性的表现。然而,Retrieval-Q-CoT 中的 reasoning chains (包括理由和答案)是由 Zero-Shot-CoT 生成的:它们可能有错误,导致错误的答案。让我们简单地把具有错误答案的 demonstrations 称为 wrong demonstrations 。直观地说,在检索到与某个测试问题相似的其它问题后,由 Zero-Shot-CoT 引导的 wrong demonstrations 可能会误导同一个 LLM 对该测试问题进行错误答案的相似推理(即,复制错误)。我们把这种现象称为相似性误导(misleading by similarity )。我们将研究相似性误导是否造成了 Retrieval-Q-CoT 的低质量的表现。

  2. 首先,我们在 MultiArith 数据集中的所有 600 个问题上调用了 Zero-Shot-CoT 。在这些问题中,我们收集了 128 个问题(记做 Q ),其中 Zero-Shot-CoT 产生了错误的答案(错误率:21.3% = 128/600 )。正如我们提到的,通过额外的 demonstrationsRetrieval-Q-CoTRandom-Q-CoT 有望比 Zero-Shot-CoT 表现得更有竞争力。

    Zero-Shot-CoT 失败的问题中,我们把那些Retrieval-Q-CoTRandom-Q-CoT 仍然失败的问题称为它们的 unresolved questions 。我们用 unresolved questions 的数量除以 128Q 中的问题数量)来计算未解决率(unresolving rate )。较高的未解决率意味着一种方法更有可能仍然像 Zero-Shot-CoT 那样犯错。下图显示,Retrieval-Q-CoT 的未解决率( 46.9% )远远高于 Random-Q-CoT25.8% )。这表明,针对测试问题,在相似的问题被采样的情况下,Retrieval-Q-CoT 受到了相似性误导的负面影响。

  3. 为了说明 Retrieval-Q-CoTunresolved questions 往往是相似的,我们在下表中提出了一个案例。在左边的部分,检索到的 demonstration questions 与测试问题相似,询问 "how long will it take him to cook the rest?" 。由 Zero-Shot-CoT 生成的 reasoning chains 产生了关于 "the total of" 而不是 "the rest" 的答案。

    遵从 demonstrationsRetrieval-Q-CoT 也因为误解了 "the rest " 的含义而失败。相比之下,Random-Q-CoT 更正确地理解了 "the rest",而没有犯在 demonstrations 中的相似错误,这要归功于相对更多样化的(即,随机的)demonstrations

25.1.2 错误经常落入同一个 Cluster

  1. Table 2 中观察结果的启发,我们使用 k-means 将所有 600 个测试问题划分为 k=8cluster ,其中每个 cluster 都包含相似的问题。有了这些 cluster 和由 Zero-Shot-CoT 生成的 reasoning chains,现在我们很好奇某些 cluster 是否包含 Zero-Shot-CoT 经常失败的问题。因此,我们计算每个 cluster 的错误率(具有有错误的 Zero-Shot-CoT 答案的问题数量除以问题总数)。

    如下图所示,有一个 clusterCluster 2 )存在较高的 Zero-Shot-CoT 错误率(52.3%)。这种现象可能是广泛的,因为 Zero-Shot-CoT 可能缺乏一些技能来解决目标任务中的一些常见问题。为了描述的方便,我们把错误率最高的 cluster 称为 frequent-error cluster (例如,下图中的 Cluster 2 )。因此,以 zero-shot 方式生成的 reasoning chains 的不完善所带来的风险是:通过使用 similarity-based 的方法,在 frequent-error cluster 内检索出多个相似的问题。对于 frequent-error cluster 中的测试问题,Retrieval-Q-CoT 更容易构建具有多个相似 wrong demonstrations 。因此,Retrieval-Q-CoT 经常犯类似于 Zero-Shot-CoT 的错误,Figure 2 中较高的 unresolving rate 就重申了这一点。

25.1.3 多样性可以缓解相似性误导

  1. 到目前为止的分析令人信服地表明,LLM 仍然不是完美的 zero-shot reasoner 。因此,我们的目标是缓解其 Zero-Shot-CoT 的错误的影响,特别是在设计 Auto-CoT 时缓解相似性误导。

  2. 正如我们将在后面展示的(实验部分),呈现一小部分错误(例如,8wrong demonstrations 中的 12 个)不会损害测试问题的整体 reasoning 性能。假设所有 wrong demonstrations 的问题都属于同一个 frequent-error cluster ;那么从每个不同的 cluster 中采样一个问题将导致高于 7/8 = 87.5%的机会来构建所有 8correct demonstrations 。由于不同的 cluster 反映了问题的多样化的语义,这种 clustering-based sampling 方法可以被认为是 diversity-based 的,这与 similarity-basedRetrieval-Q-CoT 形成了鲜明对比。

    • 一方面,具有多样性的 sampling questions 可以缓解相似性误导的影响。

    • 另一方面,如果我们把每个 demonstration 当作一种技能,多样化的 demonstration 似乎覆盖了解决目标问题的更多备选技能:即使 demonstrations 中仍然存在一小部分错误(例如,1/8 = 12.5% ),性能也不会受到负面影响(如下图所示)。

    尽管如此,clustering-based sampling 方法仍然可能构建出一小部分 wrong demonstrations ,例如来自 frequent-error cluster 中的问题。正如我们稍后所显示的,其中一些 wrong demonstrations 可以用启发式方法消除。例如,wrong demonstrations 往往伴随着长的问题和长的理由。使用简单和通用的启发式方法,比如只考虑较短的问题和较短的理由,可以进一步帮助缓解不完善的 Zero-Shot-CoT 能力的影响。

  3. 简单的启发式方法的效果:问题不超过 60 tokens、理由不超过 5 reasoning steps 。对于算术推理(除了 AQuA,因为它是多项选择题),要求答案出现在理由中(从而缓解 rationale-answer mismatches )。

    这种启发式规则强烈依赖于具体的任务,而且依赖于人工的经验。

    对于满足上述要求的问题、理由、以及答案,对于第 icluster 的候选 demonstration dj(i),我们拼接问题 qj(i)、理由 rj(i)、答案 aj(i) 为:[Q:qj(i),A:rj(i)aj(i)]

    我们在使用简单的启发式方法来构建 demonstration 之前、以及之后的三次运行来量化其效果。结果如下表所示。可以看到,简单的启发式方法减少了构建 demonstrations 时错误理由的平均数量。

    下图进一步描述了使用和不使用简单的启发式方法时的错误率。错误率的计算方法是错误理由的平均数除以 demonstrations 的数量。我们看到,在大多数任务中,我们的方法可以将错误率控制在 20% 以下( 7/10 )。

25.2 Auto-CoT

  1. 基于前面所述的观察和考虑,我们提出了一种 Auto-CoT 方法来自动构建带有 questions and reasoning chainsdemonstrationsAuto-CoT 包括两个主要阶段:

    • 问题聚类:将给定数据集的问题划分为几个 clusters

    • demonstration sampling :从每个 cluster 中选择一个有代表性的问题,并使用简单启发式的 Zero-Shot-CoT 生成其 reasoning chain

    整个过程如下图所示。

  2. Question Clustering:由于 diversity-based clustering 可能会缓解相似性误导,我们对一组给定的问题 Q 进行聚类分析。

    • 我们首先通过 Sentence-BERTQ 中的每个问题计算一个 vector representationcontextualized vectors 被平均化,从而形成一个 fix-sizedquestion representation

    • 然后,我们用 k-means 聚类算法处理 question representations ,产生 kquestion clusters 。对于每个 cluster i 中的所有问题,按照与 cluster i 中心的距离从大到小的顺序将其排序为 q(i)=[q1(i),q2(i),]

    这个 question clustering 阶段的算法如下所示。

  3. Demonstration Sampling:在第二阶段,我们需要为这些被采样到的问题生成 reasoning chains ,然后采样 demonstrations (这些 demonstrations 需要满足我们的 selection criteria )。

    更具体而言,我们为每个 cluster ii=1,2,,k)构建一个 demonstration d(i)(一个问题、一个理由、以及一个答案的拼接)。对于 cluster i ,我们在有序列表 q(i)=[q1(i),q2(i),] 中的问题上进行迭代,直到满足我们的 selection criteria 。换句话说,更接近 cluster i 中心的问题被提前考虑。假设第 j 个最接近 cluster i 中心的问题 qj(i) 被考虑。一个 prompted input 被表述为: [Q:qj(i) . A: [P]],其中 [P] 是一个单个 prompt "Let’s think step to step "。这个构造好的输入被馈入一个使用 Zero-Shot-CoTLLM,从而输出由理由 rj(i) 和所提取的答案 aj(i) 组成的 reasoning chain 。然后,通过拼接问题、理由、以及答案,构建第 icluster 的候选 demonstration dj(i)=[Q: qj(i),A: rj(i)aj(i)]

    《Chain of thought prompting elicits reasoning in large language models》 中手工制作 demonstrationscriteria 类似,我们的 selection criteria 遵循简单的启发式方法,从而鼓励来采样较简单的问题和理由:对于 demonstration dj(i) ,如果它的问题不超过 60 tokens 、理由 rj(i) 不超过 5 reasoning steps ,则选中该 demonstration 并记做 d(i)=dj(i)

    这个人工定义的规则是否通用?读者觉得可能针对不同的任务需要设计不同的规则。

    Demonstration Sampling 算法如下所示。在对所有 kclusters 进行 demonstration sampling 后,将有 k 个构建好的 demonstrations [d(1),,d(k)]。构建好的 demonstrations 被用来 augment 一个测试问题 qtest,从而进行 in-context learning 。具体而言,输入是所有demonstrations [d(1),,d(k)] 的拼接,后面紧跟着 [Q: qtest . A: [P]]。针对 qtest,这个输入被馈入 LLM 从而获得 reasoning chain ,最后是答案(Figure 4 的右边)。

25.3 实验

  1. 这里我们给出主要的实验结果。更多的实验细节和结果可以参考论文的附录部分。

  2. 任务和数据集:三类推理任务的十个基准数据集。

    • 算术推理:MultiArith, GSM8K, AddSub, AQUA-RAT, SingleEq, SVAMP

    • 常识推理:CSQA, StrategyQA

    • 符号推理:Last Letter Concatenation, Coin Flip

  3. 实现:除非另有说明,我们使用 text-davinci-002 版本的 GPT-3 175B 。我们选择这个 LLM 是因为它在 public LLM 中具有最强的 CoT reasoning 性能,如 《Large language models are zero-shot reasoners》《Chain of thought prompting elicits reasoning in large language models》 的报告。我们还评估了 Codex 模型(code-davinci-002 )作为 LLM 。遵从 《Chain of thought prompting elicits reasoning in large language models》 ,除了 AQuALetterk=4)、CSQAk=7)、StrategyQAk=6)之外,demonstrations 数量 k=8

  4. baselineZero-ShotZero-Shot-CoTFew-ShotManual-CoT

    • Zero-Shot-CoTManual-CoTFigure 1 所示。

    • Zero-Shot baseline 将一个测试问题与 prompt "The answer is" 拼接起来作为 LLM 的输入。

    • Few-Shot baselineManual-CoT 具有相同的 LLM 输入,只是删除了所有demonstrations 的理由。

  5. Auto-CoT 在十个数据集上的有竞争力的表现:下表比较了三类推理任务的十个数据集的准确率。

    • Zero-ShotZero-Shot-CoT 的结果取自 《Large language models are zero-shot reasoners》

    • Few-ShotManual-CoT 的结果取自《Chain of thought prompting elicits reasoning in large language models》

    • Auto-CoT 的结果是三次随机运行的平均值。

    总的来说,Auto-CoT 始终与需要手工设计 demonstrationsCoT 范式的性能相匹配,甚至超过了后者。由于人工设计的成本,Manual-CoT 可能为多个数据集设计相同的 demonstrations (例如,算术数据集中的 5/6 )。相比之下,Auto-CoT 更灵活,更加 task-adaptive :每个数据集都能得到自己的 demonstrations ,而且这些 demonstrations是自动构建的。

  6. Question Clustering 的可视化:下图直观地显示了 10 个数据集的 question clustering (用 PCA 投影)。该图表明,存在通用的模式,不同的模式可能由来自不同 cluster 的问题来刻画。

    这可能是一种例外,因为数据集的作者在创建数据集的时候可能就是分类别来创建的。而真实场景下,数据的聚类分布可能区分度更差。

    我们在附录D 中介绍了 Auto-CoTconstructed demonstrations 。其中 MultiArithdemonstrations 如下:

  7. 使用 Codex LLM 的有效性:为了评估使用不同 LLMAuto-CoT 的有效性,这里我们将 LLM 改为 Codex 模型。如下表所示,与使用 GPT-3 (text-davinci-002) LLMTable 3 相比,Codex LLM 导致 Manual-CoT 的性能提高。尽管如此,使用 Codex LLMAuto-CoT 的整体性能与 Manual-CoT 相比仍然具有竞争力,为 Auto-CoT 的有效性提供了额外的经验证据。

  8. Wrong Demonstrations 的效果:回顾我们在前面的讨论,可能存在 wrong demonstrations (其答案是错误的)。为了了解多样性是否能减轻这种影响,我们设计了 In-Cluster Sampling baseline ,通过从与 test question 的同一 cluster 中随机采样问题来构建 demonstrations 。下图比较了在 MultiArith 上不同数量的 wrong demonstrations 的准确率。与 In-Cluster Sampling 相比,Auto-CoT(使用 diversity-based clustering)受 wrong demonstrations 的影响较小:即使遇到 50%wrong demonstrations ,其性能也没有明显下降。

  9. 更具挑战性的 Streaming SettingCoT 研究通常假设一个完整的数据,其中包含所有的测试问题。基于给定的数据集,Auto-CoT 采样一些问题从而构建 demonstrations 。然而,现在我们考虑的是一个更具挑战性的 streaming setting ,其中每次到达一小批测试问题(例如 m 个问题),像数据流一样。

    为了应对这一挑战,我们将 Auto-CoT 扩展为一个 bootstrapping 的版本 Auto-CoT*

    • 首先,初始化一个空集合 M0

    • 然后,当第一个 batch 的问题 q1(1),,qm(1) 到达时,对每个 qi(1) 调用 Zero-Shot-CoT (由于 m 很小而没有执行聚类)从而获得其 reasoning chain ci(1) 。将 question-chain pairs (q1(1),c1(1)),,(qm(1),cm(1)) 添加到 M0 ,并称这个新的集合为 M1

    • 然后,当 batch bb>1 )的问题 q1(b),,qm(b) 到达时,用 Mb1 中现有问题和 reasoning chains 构建 demonstrations (就像 Auto-CoT ),对每个 qi(b) 使用 demonstrations 从而进行 in-context reasoning 。将 question-chain pairs (q1(b),c1(b)),,(qm(b),cm(b)) 添加到 Mb1 ,并称这个新的集合为 Mb

      从第二个 batch 开始,就进行 Auto-CoT 的算法。

    下图比较了在这种 streaming setting 下,在 MultiArith 数据集上,每个 batchm=30)的准确率。正如预期的那样:

    • 对于 batch 1Auto-CoT*Zero-Shot-CoT 获得相同的准确率。

    • batch 2 开始,Auto-CoT* 的表现与 Manual-CoT 相当。

    这一结果表明,我们的方法在更具挑战性的 streaming setting 中仍然有效。

二十六、Least-To-Most Prompting [2022]

论文:《Least-to-Most Prompting Enables Complex Reasoning in Large Language Models》

  1. 尽管深度学习在过去十年中取得了巨大的成功,但人类智能和机器学习之间仍然存在巨大的差异:

    • (1):给定一个新的任务,人类通常只需要通过一些 demonstration examples 就可以学会完成,而机器学习则需要大量的标记数据来进行模型训练。

    • (2):人类可以清楚地解释其预测或决策的基本原理,而机器学习基本上是一个黑盒子。

    • (3):人类可以解决比他们以前见过的任何问题更加困难的问题;而对于机器学习,训练样本和测试样本通常处于同一难度水平。

    最近提出的 chain-of-thought prompting 方法(《Chain of thought prompting elicits reasoning in large language models》)为缩小人类智能和机器智能之间的差距迈出了重要一步。它结合了自然语言理由(natural language rationale)和 few-shot promptingGPT-3)的思想。当与 self-consistency 解码(《Self-consistency improves chain of thought reasoning in language mod》)进一步整合,而不是使用典型的贪婪解码时,在许多具有挑战性的自然语言处理任务上, few-shot chain-of-thought prompting 在很大程度上超过了文献中的 SOTA 结果,这些 SOTA 结果是由专门设计的神经模型在数百倍的标注样本的训练下得到的,同时 few-shot chain-of-thought prompting 也是完全可解释的。

    然而,chain-of-thought prompting 有一个关键的局限性:它在需要泛化到解决比 demonstration examples 更难的问题的任务上往往表现不佳,比如组合泛化(compositional generalization )。为了解决这种从易到难的泛化问题,我们提出了 least-to-most prompting 。它包括两个阶段:

    • 首先将一个复杂的问题分解成一系列较容易的子问题。

    • 然后依次解决这些子问题,其中,解决一个给定的子问题是由以前所解决的子问题的答案来推动的。

    这两个阶段都是通过 few-shot prompting 来实现的,因此在这两个阶段都不存在训练或微调。下图显示了一个 least-to-most prompting 的使用案例。

    注意,传递给模型的 prompt 包括:说明如何分解复杂问题的 examples (图中没有显示),然后是要分解的具体问题(如图所示)。

    这些子问题类似于 CoT 的 ”理由”,然而这里的 “理由” 是模型自动生成的而不是人工撰写的。

    Auto-CoT 也是通过模型自动生成 “理由”, 但是 Auto-CoT 是通过单步来一次性生成所有 ”理由“;而这里是单步生成一个 ”理由“。

    术语 "least-to-most prompting" 借用自教育心理学(《A comparison of most-to-least and least-to-most prompting on the acquisition of solitary play skills》),它被用来表示一种技术,该技术使用渐进的 prompts 序列来帮助学生学习新技能。关于符号操作、组合泛化、以及数学推理的经验结果表明, least-to-most prompting 确实可以泛化到比 demonstrations 的问题更难的问题。

  2. 相关工作:

    • compositional generalizationSCAN是一个广泛使用的基准,用于评估组合泛化。在其所有的 split 中,最具挑战性的是length split ,它要求模型泛化到比训练序列更长的测试序列。之前在 SCAN 上有良好表现的工作大多提出了神经符号(neural-symbolic )架构和语法归纳(grammar induction )技术。与现有的工作不同,我们证明,没有专门设计的模型架构和符号组件来提高 compositional generalization 能力, least-to-most prompting 在任何 split (包括 length split )上都能达到 99.7% 的准确率,只需要少量的 demonstration examples ,而且不需要任何训练或微调。

    • easy-to-hard generalization:除了组合泛化,还有许多其他任务,测试样本比训练样本需要更多的推理步骤来解决,例如,last-letter-concatenation 任务。

      • 《Neural logicmachines》提出 Neural Logic Machin: NLM 用于 inductive learning 和逻辑推理。在小规模任务(如小尺寸块状世界)上训练的 NLM 可以完美地推广到大规模任务(如大尺寸块状世界)。

      • 《Can you learn an algorithm? generalizing from easy to hard problems with recurrent networks》 表明,为解决具有少量递归步骤的简单问题(如小尺寸迷宫或国际象棋谜题)而训练的递归网络,可以通过在推理过程中执行额外的递归来解决更复杂的问题(如大尺寸迷宫或国际象棋谜题)。

      在我们的方法中,我们通过将一个复杂的问题分解成一系列较容易的问题来实现 easy-to-hard generalization

    • 任务分解:

      • 《Unsupervised question decomposition for question answering》 将一个 multi-hop 问题分解成若干独立的 single-hop 子问题,这些子问题由一个现成的问答模型来回答。然后,这些答案被汇总从而形成最终的答案。问题分解和答案汇总都是由训练好的模型实现的。

      • 《Shepherd pre-trained language models to develop a train of thought: An iterative prompting approach》 通过将 prompts 建模为连续的虚拟 tokens ,并通过 iterative prompting 从语言模型中逐步激发相关的知识,来进行 multi-hop QA

      与这些方法不同,我们的方法不涉及任何训练或微调。此外,least-to-most prompting 中产生的子问题通常是相互依赖的,必须按照特定的顺序依次解决,这样一些子问题的答案就可以作为解决其他子问题的 building block

      • 《Seqzero: Few-shot compositional semantic parsing with sequential prompts and zero-shot models 》 通过基于规则的系统将一个问题分解成与 SQL query 相对应的 slot-filling 自然语言 prompts 的序列,将自然语言问题翻译成SQL query

      • 《AI chains: Transparent and controllable human-AI interaction by chaining large language model prompts》 提出将大型语言模型的步骤链接起来,使一个步骤的输出成为下一个步骤的输入,并开发了一个交互式系统供用户构建和修改 chains

      least-to-most prompting 链接了问题分解和子问题解决的过程。

26.1 方法

  1. least-to-most prompting 教导语言模型如何通过将一个复杂的问题分解为一系列较简单的子问题来解决。它由两个连续的阶段组成:

    • 分解:这一阶段的 prompt 包含展示分解的 constant examples ,然后是待分解的具体问题。

    • 子问题的解决。这个阶段的 prompt 由三部分组成:

      • 演示如何解决子问题的 constant examples

      • 已经回答的子问题以及生成答案所组成的列表(可能是空的)。

      • 接下来要回答的问题。

  2. Figure 1 所示的例子中,语言模型首先被要求将原始问题分解为子问题。传递给模型的 prompt 包括:说明如何分解复杂问题的 examples (图中没有显示),然后是要分解的具体问题(如图所示)。语言模型发现,原始问题可以通过解决一个中间问题来回答 "How long does each trip take?"

    在下一个阶段,我们要求语言模型依次解决 problem decomposition 阶段所得到的子问题。

    • 原始问题被附加为最后的子问题。

    • 求解过程以向语言模型传递一个 prompt 而开始,这个 prompt 包括:说明问题如何解决的例子(图中未显示),然后是第一个子问题 "How long does each trip take?"

    • 然后,我们采用语言模型所生成的答案("... each trip takes 5 minutes." ),并通过将所生成的答案附加到前一个 prompt 中来构建下一个 prompt ,然后是下一个子问题(在这个例子中,这恰好是原始问题)。

    • 然后,新的 prompt 被传回语言模型,由该模型返回最终答案。

  3. least-to-most prompting 可以与其他提示技术相结合,如 chain-of-thoughtself-consistency ,但并不是必须得。另外,对于某些任务,least-to-most prompting 中的两个阶段可以合并,形成 single-pass prompt

26.2 实验

26.2.1 符号操作

  1. 任务:last-letter-concatenation ,其中输入是一个单词列表,输出是列表中每个单词的最后一个字母的拼接。

    当测试列表与 prompt exemplars 中的列表具有相同的长度时,chain-of-thought prompting 做得很完美。然而,当测试列表比 prompt exemplars 中的列表长很多时,它的表现就很差。我们表明,least-to-most prompting 克服了这一限制,在长度泛化方面明显优于 chain-of-thought prompting

  2. Least-to-most promptingTable 1 展示了任务分解阶段,Table 2 展示了子问题的解决阶段。

  3. Chain-of-thought promptingchain-of-thought prompt 如下表所示。它使用的列表与 Table 2 中的 least-to-most prompt 相同。唯一区别是:对第二个列表("think, machine, learning" )的回答是从头开始建立的,而不是使用第一个列表("think, machine" )的输出。

  4. 实验结果:我们采用 GPT-3 code-davinci-002 。不同 prompting 方法的结果如下表所示。

26.2.2 组合泛化

  1. 任务:SCAN ,它需要将自然语言命令映射到动作序列,如下表所示。

    实验结果如下表所示。

  2. least-to-most prompting

26.2.3 数学推理

  1. 任务:GSM8KDROP

    我们特别感兴趣的是看大型语言模型结合 least-to-most prompting 是否能解决比 prompts 中看到的更难的问题。在这里,我们只是通过解题步骤的数量来衡量难度。

  2. prompt

    第一部分:"“Let’s break down this problem . . ." ,展示原始问题如何被分解为更简单的子问题;第二部分:展示如何求解子问题。

    chain-of-thought prompting:移除了 least-to-most prompting 的第一部分内容。

  3. 实验结果:

26.3 局限性

  1. prompts 分解通常不能很好地泛化到不同的领域中。因此对于不同的领域,必须设计新的 prompt 从而进行任务分解,以达到最佳性能。

  2. 在同一领域内,decomposition 的泛化甚至会有困难。我们观察到,如果为大型语言模型提供那些具有挑战性的问题的正确分解,GSM8K 中几乎所有的问题都能被准确地解决。这一发现并不令人惊讶,而且与我们解决数学问题的经验相吻合。每当我们成功地将一个数学问题分解成我们可以解决的更简单的子问题时,我们基本上就解决了原始问题。