论文:Program of Thoughts Prompting: Disentangling Computation from Reasoning for Numerical Reasoning Tasks
⭐⭐⭐⭐
TMLR 2023
Code:Program-of-Thoughts | GitHub
论文速读
文章提出了 PoT Prompting 方法,PoT 可以看作是 CoT(Chain-of-Thoughts)的改进,该方法通过生成 Python 程序代码来表达推理步骤,并通过 Python 解释器来执行这些代码从而完成计算,从而提高了数值推理任务的准确性和效率。论文在数学推理数据集和金融数据集上进行了实验,发现 PoT 比 CoT 更擅长解决这些复杂的计算推理问题。
文章展示了两种 PoT 方法:
- Few-shot PoT prompting:通过 in-context learning 的思路,给出几个 exemplars(QA 示例)让 LLM 学会去生成代码
- Zero-shot PoT prompting:直接通过文字提示的方法,让 LLM 去生成代码
上图是两种 PoT 思路的示例,也是本工作主要使用的 prompt。
PoT 能够产生作用的主要原因在于,LLM 并不擅长数学符号的计算,而 PoT 把这部分复杂计算任务交给了外部的 Python 解释器,而 LLM 只需要负责使用 Python 来表达推理过程就可以了。
当然,论文也认为 PoT 与 CoT 各有自己擅长的部分,两者是可以结合的:
也就是将推理分为多个 stage,其中需要计算推理的交给 PoT 和 Python 解释器来完成,语义推理的就交给 CoT 完成,从而得到最终答案。
实验设置
数据集的选择
本工作主要选用了两类数据集:
- Math Word Problems(MWP)数据集:这类数据集是回答使用自然文本表达的数学问题,包括 GSM8K、AQuA、SVAMP、MultiArith、TabMWP。
- Financial Problems 数据集:要求回答 math-driven financial problem,包括 FinQA、ConvFinQA、TATQA。
模型的选择
主要使用了 GPT-3、ChatGPT、CodeGen、CodeT5+、Xgen 等模型
Baseline 的选择
包括 Codex、GPT-3、PaLM、LaMDA
消融实验
设计包括了多种类型的消融实验,具体可参考原论文。
这里值得关注论文对回答错误的分析,错误主要分为两种:
- value grounding error:指模型没有把正确的值赋值给变量
- logic generation error:没能产生正确的计算过程
并对 PoT 下 LLM 回答错误的分析,发现大多数错误都是 value grounding error 类型。
总结
本文提出的 PoT Prompting 是一种提高 LLM 解决复杂数学计算问题的方法,并且可以与 CoT 进行互补,从而达到更好的效果。
PoT 通过提示让 LLM 生成 Python 代码,并交由 Python 解释器完成相关计算,LLM 只需要负责表达推理思路。下面是一个使用“斐波那契数列”的数学问题来展示 PoT 相比于 CoT 的强大之处:
- 左图是 CoT,右图是 PoT。