本文正在参加人工智能创作者扶持计划
导语
- 会议:Arxiv 2023
- 链接:arxiv.org/pdf/2211.10…
1 简介
最近,大型语言模型LLM在广泛的任务上取得了令人印象深刻的成功,包括使用Few-shot Prompting进行常识,数学和符号推理。这些过程通过要求LLM生成其明确推理步骤的方法加速,广泛使用的思维链(COT)方法为模型提供了达到最终答案所需的显式中间步骤。然而,尽管LLM可以将自然语言问题分解为步骤并执行简单的算术运算,但在处理复杂算术时,它们的性能会急剧下降。
本文提出了一种程序辅助的Program-Aided Language model (PAL),该方法使用LLM来读取自然语言问题并生成程序作为推理步骤,但将解决步骤卸载(offload)给Python解释器,如图1所示。这种卸载利用了可以将自然语言问题分解为编程步骤的LLM。虽然自然语言理解和分解需要LLM,但求解和推理可以通过外部求解器完成。这在类似思维链的方法中弥补了一个重要的缺口,在这种方法中,推理链可能是正确的,但会产生错误的答案。
本文在13个算术和符号推理任务中证明了PAL的有效性。在所有这些任务中,使用Codex的PA L优于使用思维链提示的PaLM-540B等更大的模型。作者认为,神经LLM和符号解释器之间的无缝协同是迈向通用和健壮的AI推理器的重要一步。
2 背景:Few-shot Prompting
Few-shot Prompting利用大语言模型的优势来解决具有k个示例的任务,这些示例是作为测试时间输入的一部分提供的,其中k通常是小的个位数的数字。这些输入输出示例连接在提示符p中。
Wei等人还用思维链(COT)中间步骤补充了每个上下文示例。其示意图如下所示:
3 Program-aided Language Models
在PAL模型中,我们提出为给定的自然语言问题x生成交错自然语言(NL)和编程语言(PL)语句的思路t。由于我们将解决步骤委托给解释器,所以我们不为提示中的示例提供最终答案。
上图展示了一个示例,实际应用时,作者使用注释语法提示语言模型生成NL中间步骤(例如“#…),这样它们就会被解释器忽略。
实验中,利用现有工作的提示或者随机选择相同数量(3-6)的示例,为每个基准测试创建固定的提示。在所有情况下,都将自由格式的文本提示符扩展为PA l样式的提示符,并在需要时利用for循环和字典等编程结构。同时,还确保提示符中的变量名有意义地反映了它们的属性。在第6节中,我们将展示这种有意义的变量名是至关重要的。值得注意的是,还可以增量地运行PL段,并将执行结果反馈给LLM以生成以下块。为了简单起见,在我们的实验中,我们使用了单一的、事后的执行。
这项工作的重点是COT风格的推理链,但在附录I中,我们展示了PAL也改进了最小到最大(Zhou et al., 2022)提示,它引入了将问题分解为子问题的推理链。
4 实验设置
数据与In-context示例
我们对三大类推理任务进行了实验:
- 来自广泛数据集的数学问题(§4.1),包括GSM8K、SVAMP、ASDIV和MAWPS;
- 符号推理(§4.2)来自BIG-Bench Hard;
- 算法问题(§4.3)也来自BIG-Bench Hard。
所有数据集的详细信息见附录h。对于所有可用COT提示的实验,使用与以前工作相同的上下文示例。否则,我们随机抽取一组固定的上下文示例,并使用相同的集合用于PAL和COT。
Baseline
我们考虑了三种提示策略:
- Direct Prompting
- COT Prompting
- PAL Prompting
本文使用CodeX (code-davinci-002)作为后端LLM,用于PA L、DIRECT和COT。
4.1 Mathematical Reasoning
作者在八个数学应用题数据集上评估了PAL。这些任务中的每个问题都是一个小学水平的代数应用题。图3显示了一个问题和PAL示例提示的示例。作者发现使用显式的NL中间步骤并不能进一步使这些数学推理任务受益,因此作者在提示符中只保留了有意义的变量名。
LLMs可以对较小的数字进行简单的计算。然而,Madaan和Yazdanbakhsh发现,流行的GSM8K数学推理问题数据集中50%的数字是0到8之间的整数。这就提出了一个问题:LLM是否可以推广到更大的非整数? 我们构建了一个更难的GSM8K版本,我们称之为GSM-HARD,通过将GSM8K问题中的数字替换为更大的数字。具体来说,问题中的一个数字被替换为最多7位的随机整数。
4.2 Symbolic Reasoning
将PAL应用于BIG-Bench Hard的三个符号推理任务,其中涉及对对象和概念的推理:
- Colred OBJECTS要求回答关于表面上有色物体的问题。这项任务需要跟踪每个物体的相对位置、绝对位置和颜色。图4显示了一个问题示例和PAL提示示例。
- PENGUINS用自然语言描述了一张企鹅表和一些附加信息,任务是回答一个关于企鹅属性的问题,例如“有多少只企鹅不满8岁?”虽然Pengines和Corred OBJECT任务都需要跟踪对象,但Pengines也描述了动态,因为问题中的企鹅可以添加或删除。图17显示了一个问题、一个思维链提示和PAL提示的示例。
- DATE是一个日期理解任务,它涉及到从自然语言描述中推断日期,对相对时间段进行加减法运算,并具有一些全局知识,如“二月有多少天”,并进行相应的计算。附录J.3给出了提示示例。
4.3 Algorithmic Tasks
最后,作者在算法推理方面比较了PAL和COT。在这些任务中,人类程序员可以在预先了解问题的情况下编写确定性程序。实验了两个算法任务:对象计数(Object Count)和重复拷贝(Repeat Copy)。对象计数涉及回答关于属于某一类型的对象数量的问题。例如,如图5所示:“I have a chair, two potatoes, a cauliflower, a lettuce head, two tables, … How many vegetables do I have?”)。重复拷贝需要根据指令生成一个单词序列。例如,如附录J.6所示:“Repeat the word duck four times, but halfway through also say quack”)。
5 实验结果
5.1 Math Results
表1显示实验结果。有趣的是,COT(使用CodeX)在一些数据集(如ASDIV)中的表现也比PaLM-540B好,但在其他数据集(如SVAMP)中表现不如PaLM-540B。然而,使用PAL进一步提高了所有数据集的求解率。
GSM-HARD
在GSM-HARD上,Direct和COT Prompting相比于GSM-8K都下降了很大的性能表现,而PAL则很小。即使作者把COT的Prompt也改成了大的数字(表5,说明LLM并不擅长大数字的运算) 。
大数字还是错误推理?
GSM-HARD上的失败主要是由于LLM无法做算术,还是问题中的大数字“迷惑”了LM,从而产生不合理的中间步骤?为了研究这一点,作者评估了COT对同一问题的两个版本(有和没有大数字)的输出。实验发现,在分析的25个案例中,有16个COT生成了几乎相同的自然语言“思想”,这表明主要的失败模式是无法准确地执行算术。示例输出在附录表11中提供。
注:这里就是再继续论证大模型很擅长COT,但是不擅长大数值计算;
Top-K抽样
正如Wang et al.所发现的,通过对输出进行Top-K抽样,使用多数投票选择最终答案,可以进一步改进COT式方法。因此,作者使用核采样重复了贪心解码实验,如表3所示,这进一步提高了PAL在GSM-8K上的准确率,从72.0%提高到80.4%,在相同样本数量的情况下,准确率比Minerva-540B提高了1.9%。
5.2 Symbolic Reasoning & Algorithmic Tasks Results
符号推理和算法任务的结果如表2所示。PAL大幅度超过了Direct和COT Prompting。
PAL对问题的复杂性敏感吗?
我们研究了PAL和COT的性能如何随着输入问题复杂性的增长而变化,以Colred OBJECTS问题中的对象数量来衡量。如图6所示,PAL在所有输入长度上都优于COT。随着问题中对象数量的增加,COT的准确性不稳定并下降,而PAL始终保持接近100%。
6 分析
PAL对较弱的LM有用吗?
作者比较了PAL和COT两种提示方法使用相同的弱基线模型code-cushman-001和code-davinci-001时的结果。如图7所示,尽管代码cushman-001和代码davinci-001的绝对准确性较低,但PAL相对于COT的相对改善在各个模型中保持一致。这表明PAL可以与较弱的模型一起工作,而它的效益也可以优雅地扩展到较强的模型。
PAL对NL的LM模型有用吗?
作者还尝试使用text-davinci系列的PAL。图8显示了以下有趣的结果:当基本LM的“代码建模能力”较弱时(使用text-davinci-001), COT的性能优于PAL。然而,一旦LM的代码建模能力足够强(使用text-davinci-002和text-davinci-003), PAL的性能优于C OT, PAL text-davinci-003的性能几乎与PAL code-davinci-002相当。这表明PAL并不局限于代码的lm,它可以与主要为自然语言训练的lm一起工作,如果它们具有足够高的编码能力。
PAL更好是因为Python prompt还是因为解释器?
作者尝试生成Python代码,同时要求神经LM也“执行”它,而不使用解释器。作者创建了类似于PAL的提示,除了它们包含最终答案。结果(表6)表明,在GSM-8K上的解题率为23.2,远低于PAL的72.0,仅比DIRECT高4.5个点。这些结果加强了我们的假设,即PAL的主要好处来自于与解释器的协同作用,而不仅仅是更好的提示。
变量名的命名重要吗?
在所有实验中,PAL提示中使用了有意义的变量名,以简化模型对变量与它们所代表的实体的基础。然而,对于Python解释器,变量名是没有意义的。为了衡量有意义的变量名的重要性,作者尝试了两个提示变量:
- PAL−comment,没有中间的NL注释。
- PAL−comment−var,没有中间的NL注释,变量名替换为随机字符。
结果如图9所示。在Colred Object和DATE中,删除中间的NL注释,但保留有意义的变量名(PAL−comment)与完整的PAL提示符相比,略微降低了结果,但它仍然比基线COT获得了更高的精度。删除变量名(PAL−comment−var)会进一步降低准确性,并且性能比COT更差。因为变量名在代码质量中有重要的作用,有意义的变量名只期望简化Codex的推理,Codex主要是在有意义的名称上进行训练,Madaan等人(2022)也发现了这一点。
7 相关工作
略,这里提一句就是之前Binder这个论文(juejin.cn/post/718439…)做了类似的工作。
8 总结
本文介绍了一种新的自然语言推理方法——PAL,它使用程序作为中间推理步骤。与现有的基于LM的推理方法不同,它的主要思想是将求解和计算工作交给外部Python解释器,而不是同时使用LLM来理解问题和解决问题。如果给出正确预测的编程步骤,就会得到保证准确的最终答案。作者在BIG-Bench Hard和其他基准测试的13个任务中演示了LLM和Python解释器之间的无缝协同。在所有这些基准测试中,PA L优于大型LLMs,如PaLM-540 B,后者使用流行的“思维链”方法,并在所有这些基准测试中设置了最新的最先进的精度。作者相信,这些结果为未来的神经符号AI推理者打开了令人兴奋的方向。