程序辅助语言模型

程序辅助语言模型

LLMs可以编写代码,但如果它们能够执行程序会怎样?

(由Florian Olivo在Unsplash上的照片)

尽管大型语言模型(LLMs)被用于各种应用程序,但它们通常很难解决基于推理的任务。随着思维链和最少到最多提示等提示技术的出现,这个问题得到了显著减轻。在高层次上,这些技术通过在模型的提示中提供解决问题的理性示例来鼓励LLMs进行推理行为。然后,模型可以学习输出这样的理性,并产生对底层问题的逐步解决方案。值得注意的是,这是一种仅基于提示的方法,不需要微调,揭示了LLMs在给定具有足够上下文的提示的情况下具备推理能力。

尽管思维链提示等技术的有效性,但LLM需要产生既包含解决问题的思维链又包含最终答案的结果。有趣的是,这种方法会导致特殊的失败案例,其中LLM可能会提供一个准确的解决问题的理性,但仍会生成一个错误的答案。通常,这样的错误是由于简单的错误(例如,糟糕的算术)造成的。为了解决这个问题,最近的研究探索了一种编程方法,鼓励LLM生成既包含自然语言又包含代码组件的思维链。然后,LLM可以通过外部解释器运行此代码以获得所需的输出。

为了理解这种方法为什么有用,我们应该注意到LLMs所困扰的许多问题(例如算术错误、无法评估复杂表达式等)可以很容易地在程序中表达和解决。因此,使用具有编码能力的LLMs(例如Codex)的思维链样式提示,使我们能够将LLMs的优势与任意Python程序的计算能力相结合!更具体地说,可以鼓励LLM生成包含自然语言和代码组件的问题解决理性,产生一个可以由外部解释器运行以计算问题的最终输出的脚本。这种方法在解决基于推理的任务时对LLMs的准确性和可靠性有巨大的益处。