每天给你送来NLP技术干货!
来自:NLP日志
提纲
1 简介
2 背景
3 Zero-shot-CoT
4 实验结果
5 讨论
6 总结
参考文献
1 简介
Prompt learning中的prompt如同一种心理暗示,可以驱使语言模型按照特定的方向去预测。就像一种解题技巧,只要加入了它,就能更准确的解决问题。在之前prompt系列的文章中,我们介绍过各种形式的prompt,也强调过一个合适的prompt对于下游任务的效果影响重大,为此如何寻找一个合适的prompt的显得尤为重要。
今天介绍一个最近刚被发现的“宝藏prompt”,Let’s think step by step,通过使用特定的prompt“Let’s think step by step”和相应的两阶段prompt技巧,提高了大规模语言模型在的推理能力,在多个推理相关的zero-shot任务取得惊人的提升,远超之前的zero-shot方法。
2 背景
大规模预训练语言模型借助于针对特定任务设计的prompt(无论是few shot还是zero shot),在单步骤的system-1任务上有着出色表现,但是对于那些缓慢和需要多步推理的system-2任务表现不佳。(system-1跟system-2是心理学家定义的一些推理任务,可以理解为system-1是那些一步就可以推出答案的任务,,而system-2则是那些需要通过多步推理才能解决的任务)。
为了解决大规模语言模型在system-2任务中表现不佳的问题,CoT(Chain of thought prompting)被提出来,它将原本的few shot的样例,调整为逐步推理的答案,从而让语言模型去学习few shot样例的逐步推理过程,从而控制模型推理能力的方向,在复杂的system-2任务中获得明显提升。细节可以见下图中的样例,其中左上角就是原本的few shot prompt,而右上角就是将few shot样例调整为逐步推理样例的CoT(为了跟后面的Zero-shot-CoT区分而称为Few-shot- CoT),可以看出Few-shot-CoT是将few shot样例里的推理过程展开了,让语言模型能更好的学习其中的细节。
图1: Few-shot, Few-shot-CoT, Zero-shot, Zero-shot-CoT示例
3 Zero-shot-CoT
跟前面提及的Few-shot Cot不同,Zero-shot-CoT不需要经过调整的逐步推理的few shot样例,也不同大多数prompt,它不依赖于特定的任务,可以利用当前问题逐步的推理过程推导得到一个简单的prompt模版,从而控制语言模型预测的方向。Zero-shot Cot的核心是利用“Let’s think step by step”去抽取当前问题的逐步推理过程。虽然Zero-shot-CoT的概念很简单,它的巧妙之处在于整个过程使用了两次prompt,具体过程如下,同时可以查看下图样例加深理解。
a) 推论抽取
首先将问题X通过一个简单的模版”Q:[X].A:[Z]”调整为一个prompt,其中[X]是一个输入槽位,通过问题X来填充,而[Z]是一个触发器槽位,用一个人工构建的触发器句子来填充,使得语言模型可以从中抽取回答问题X所需的逐步推理过程,论文中用的触发器句子是“Let’s think step by step.”。然后将构造好的模版输入到语言模型,从而生成后续的句子Z(可以使用任何解码策略,论文为了简便使用了贪婪解码策略)。
b) 答案抽取
将第一步构造好的模版Q:[X].A:[Z],生成的句子Z,和一个新的触发器句子[A]拼接到一起输入到同一个语言模型,利用语言模型生成的结果进行解析得到最终的答案。这一步的触发器句子[A]跟第一步的触发器句子不同,它依赖于具体的答案形式,例如图中样例用的触发器句子是“Therefore, the answer (arabic numerals) is”
图2: Zero-shot-Cot全过程
Zero-shot-CoT跟Few-shot-CoT的区别在于,对于每个任务,Few-shot-CoT需要谨慎的人工工程将few shot样例转化为特定的答案格式,就是其中的逐步推理过程,而Zero-shot-CoT则不需要这些工程,只需要调用两次语言模型即可实现。Zero-shot-CoT跟Zero-shot的区别在于,Zero-shot-Cot多了生成多步推论的过程,最终输入语言模型的文本会更加丰富,语言模型能按照逐步推论的方向进行预测,从而更好的控制语言模型的输出。
4 实验结果
论文在算术推理跟常识推理相关的任务做了实验,有以下一些实验结论。
a) Zero-shot-CoT在需要多步推理的算术推理任务,符号推理任务,其他逻辑推理任务上大幅超越zero-shot,在不需要多步推理的算数推理任务上(SingleEq和AddSub)上跟zero-shot水平相当。在常识推理任务上,Zero-shot-Cot表现没有提升。
图3: Zero-shot-CoT跟Zero-shot在多个任务上的表现
b)在算术推理任务中,虽然Zero-shot-CoT不及Few-shot-CoT,但明显优于标准的Few-shot,即便是带8个样例的Fes-shot方法。
图4: 在多步算法推理任务上多种方法的效果对比
c) 对于常识推理问题,Zero-shot-CoT通常能生成灵活合理的推论,即便最终预测是错误的(下图左边样例)。同时当模型发现很难将答案选项缩小时,Zero-shot-CoT经常输出多个答案选项(下图右边样例)。
图5: Zero-shot-CoT在常识推理任务的若干bad case
5 讨论
a) 语言模型规模跟zero-shot推理是否相关?
大规模语言模型能带来更合理的推理。对于不需要多步推理的任务,zero-shot表现随着语言模型规模的增长可能不增长或者增长非常缓慢,但是对于需要多步推理的任务,随着语言模型规模的增长,zero-shot的效果飞速增长。
图6:模型规模的影响
b) Prompt的选择是否影响Zero-shot-CoT
如果文本被撰写成有利于深度推理的样子,模型效果也会得到提升。不同的prompt会驱使模型表示出迥然不同的推理能力,具体的差异取决了实际句子。在论文实验中,其中一个prompt”Let’s think step by step”取得最优的效果。
图7:不同prompt对于Zero-shot-CoT的影响
c) 大规模语言模型的推理能力
部分研究表明预训练模型通常不擅长推理任务,但是通过让它进行逐步推理可以极大程度的提升它的推理性能,而不是通过微调。论文的实验也佐证了大规模语言模型是一个合适的zero-shot推理器。
d) Multi-task prompting
大多数prompt都是针对特定任务而设计的,但是Zero-shot-CoT是支持多任务的,具有更强的泛化能力,能应用到更多不同的任务中去。Zero-shot-CoT可以为作为一种参考,不仅加速应用大规模语言模型进行逻辑推理的研究,也加速发现其他大规模语言模型的广泛感知能力的研究。
6 总结
个人觉得,相比其他prompt相关的文章,Zero-shot-CoT通过两阶段的prompt过程设计,摆脱了prompt工程的限制,也不受限于具体的任务,更好的控制模型的预测方向。虽然思想跟Few-shot-CoT很像,但是摆脱了其中的精心设计的将few shot样例转化为合适的prompt的过程。这一点还是很有价值的。
但是,看完这个文章还是有不少的疑问。文章提及Zero-shot-CoT是multi-task的方法,但是只在推理相关的任务上进行实验,Let’s think step by step”在非推理的任务上也会是最优选择吗?在其他任务上,Zero-shot-CoT能取得多少增益?对于其他语言而言,找到自身最佳的“Let’s think step by step”只能把所有可能的prompt都测试一遍吗?有其他自动化的手段吗?有没有跨语言的“Let’s think step by step”?
参考文献
1.(2022,) Large Language Models are Zero-Shot Reasoners
https://arxiv.org/pdf/2205.11916.pdf
最近文章