夕小瑶科技说 原创
作者 | 智商掉了一地、Python
随着 AIGC 技术迈出了一大步,ChatGPT 等聊天机器人被频繁地使用在生活和工作中的各个场景。想象一下,当你写代码陷入没有头绪的境地或者无法解决 Bug 时,这种基于大型语言模型(LLM)的系统由于有丰富的训练数据与强大的推理能力,可能会在一些简单的代码生成任务上有着出色表现,为你提供灵感。然而,在面对更复杂的代码生成任务(如竞赛级问题)时,仍然存在一定的挑战。
有一个名为 BRAINSTORM(头脑风暴)的新框架或许能更好地应对这个问题,它利用高层次算法蓝图、神经排序模型以及 LLM 的推理能力,来帮助我们生成多样化的思路并找到最佳的解决方案,它的性能甚至可以达到与人类程序员相当的水平。让我们一起来看看吧~
论文题目:
Think Outside the Code: Brainstorming Boosts Large Language Models in Code Generation
背景介绍
程序综合
程序综合(Program Synthesis)在自动化软件发现、程序分析和验证、以及人机交互等领域中有广泛的应用,它是一种旨在通过自动合成完整的功能程序来解决开发者所提出问题的技术。
传统方法通常在由底层编程语言定义的搜索空间中搜索满足特定任务约束条件的程序。然而,这种方法面临着搜索空间复杂和形式规约不足等问题。基于深度学习的程序综合可以从非正式规范(如自然语言、部分代码、输入-输出示例或伪代码)中生成程序。目前,深度学习方法主要用于生成特定领域内的短程序或通用编程语言中的单行代码。
竞赛级的代码生成
竞赛级代码生成(Competition-level code generation)是指生成竞赛级水平的复杂编程解决方案的过程。这需要模型具有更高的推理和抽象能力,能理解和消化更为复杂的任务描述、更长的代码,以及更多的上下文信息。研究表明,LLM 在零样本设置中生成代码,比针对特定数据集进行微调具有更好的泛化能力。此外,对 GPT-4 的调查表明它能以个位数的通过率解决竞赛级编程问题。
论文速览
BRAINSTORM 框架是一种用于竞赛级代码生成的方法,其核心是生成多样化的思路并从中选择高质量的思路,从而有效利用 LLM 的算法推理能力。该框架通过设计多种类型的指令,将这些指令与问题描述一起输入到 LLM 中,以生成多样化的思路。
如图 1 所示,BRAINSTORM 框架包括以下步骤:
-
头脑风暴(Brainstorming):该步骤是 BRAINSTORM 框架的核心,旨在生成各种可能有助于解决给定问题的思路。如图 2 所示,为了实现这个目标,作者设计了多种类型的指令,并将这些指令与问题描述一起输入到 LLM 中。
-
思路选择(Idea Selection):在上一步中生成了大量的思路后,需要对它们进行筛选和排序。如图 3 所示,具体地,使用了一个评估函数来评估每个思路的质量,并选择最高质量的思路作为最终输出。
-
代码生成(Code Generation):在上一步中选择了最佳思路后,需要将其转换为代码。具体而言,作者使用了一个代码生成器来将思路转换为可执行代码。而且如图 4 所示,BRAINSTORM 框架可以在零样本情况下工作,与少样本方法不同,这里不需要任何示例即可实现高效的代码生成。
实验
文中进行了多项实验,对其结果总结如下:
-
如表 1 和 2 所示,在 APPS 和 CodeContests 基准测试中,作者使用 BRAINSTORM 框架生成代码,并与其他方法进行比较。结果表明,BRAINSTORM 框架在这两个基准测试中都显著提高了 LLM 的性能。
如图 5 所示,在涉及概率、最短路径和图的问题上有显著的相对改善,并且随着评级的提高,该方法始终优于 ChatGPT 和 COT。
-
作者还在真实编程竞赛中进行了实验,将 BRAINSTORM 框架应用于代码生成。表 3 的结果表明,该框架可以将 ChatGPT 算法推理能力提高到与人类程序员相当的水平。
这些结果表明,在使用 BRAINSTORM 框架时,LLM 生成的代码质量更高、更接近人类程序员所写的代码。
小结
本文介绍了一种名为BRAINSTORM的新的竞赛级别代码生成框架,其亮点在于:
- 提出竞赛级别代码生成框架 BRAINSTORM:通过生成多样化的思路并从中选择高质量思路来实现高效代码生成任务。
- 利用 LLM 的算法推理能力:通过设计多种类型的指令来实现生成多样化的思路,并使用评估函数和代码生成器将思路转换为可执行代码。
- 零样本学习:可以在零样本情况下工作,不需要任何示例即可实现高效的代码生成。
随着该领域的进一步探索和发展,我们相信生成更精准、高质量的代码将成为一种必然趋势。当更多研究者将目光投入这个领域,那么我们离解放双手生成代码的美好世界也会更近一步~