摘要:在多个领域中,增加大型语言模型(LLM)测试时的计算量已展现出广阔前景,但在代码生成方面,尽管数学领域已对此进行了深入研究,该方向仍探索不足。在本文中,我们提出了S,这是首个混合测试时缩放框架,能显著提升生成代码的覆盖率和选择准确性。S在现有的并行缩放范式基础上引入了顺序缩放,以突破性能极限。此外,它还利用了一种新颖的选择机制,该机制能自适应地生成用于成对比较的区别性输入,并结合执行基础信息,以稳健地识别正确解决方案。我们在12个大型语言模型和一个大型推理模型上进行了评估,结果显示:(1)S在不同模型系列和规模上均能一致地提升性能,使3B模型的表现优于GPT-4o-mini;(2)S使非推理模型能够超越推理模型——应用S的GPT-4o-mini在LiveCodeBench上的表现比o1-preview高出3.7%;(3)S进一步提升了最先进的推理模型性能——应用S*的DeepSeek-R1-Distill-Qwen-32B在LiveCodeBench上达到了85.7%的准确率,接近o1(高级)的88.5%。代码将在https://github.com/NovaSky-AI/SkyThought上提供。Huggingface链接:Paper page,论文链接:2502.14382
在大型语言模型(LLMs)的广泛应用中,提高模型在各个领域的性能一直是研究的热点。特别是在代码生成领域,随着软件开发的复杂性和需求的增加,对LLMs生成高质量代码的能力提出了更高要求。尽管增加测试时的计算量在多个领域已展现出提升模型性能的潜力,但在代码生成方面的探索仍显不足。特别是在数学领域,通过测试时缩放提升模型性能的研究已较为成熟,而代码生成领域由于需要执行大量测试用例以验证功能的正确性,其复杂性和挑战性使得该方向的研究相对滞后。
本文提出了一种新的混合测试时缩放框架S,旨在通过结合并行缩放和顺序缩放的优势,显著提升代码生成模型的覆盖率和选择准确性。S框架的设计动机在于解决现有代码生成方法在测试时面临的两大挑战:一是如何生成更多样化、高质量的代码样本以覆盖更多问题;二是如何在众多候选样本中准确选择出最优解。
S框架由两个阶段组成:生成阶段和选择阶段。在生成阶段,S通过并行采样生成多个初始代码样本,并利用顺序缩放技术,即迭代调试,对这些样本进行精细化处理。每个样本都经过公开测试用例的执行,根据执行结果反馈进行迭代修改,直至样本通过所有公开测试或达到最大迭代次数。这一过程显著提高了生成代码的覆盖率。
在选择阶段,S引入了一种新颖的自适应输入合成机制。对于每对候选样本,S提示LLM生成能够区分这两个样本的区别性输入。然后,通过执行这些输入并比较输出结果,S*能够更准确地选择出最优解。这一机制结合了执行基础信息,确保了选择过程的稳健性。
S框架的创新之处在于其混合了并行缩放和顺序缩放的优势,并引入了自适应输入合成机制。并行缩放通过同时生成多个样本提高了覆盖率,但选择最优解时可能面临困难。顺序缩放通过迭代调试提高了单个样本的质量,但计算成本较高。S通过结合这两种方法,既提高了覆盖率又保证了选择准确性。同时,自适应输入合成机制通过生成区别性输入,为选择最优解提供了有力支持。
本文在12个大型语言模型和一个大型推理模型上进行了评估,包括Qwen2.5-Coder系列、GPT-4o mini、QwQ-32B-Preview、DeepSeek-R1-Distill-Qwen系列和o1系列等。评估基准包括LiveCodeBench和CodeContests,主要使用Pass@1作为性能指标。此外,还设置了零样本生成、多数投票和自调试等基线方法进行对比。
实验结果显示,S在不同模型系列和规模上均能一致地提升性能。对于同一模型系列,应用S的小模型表现甚至能超越未应用S的大模型。例如,Qwen2.5-7B-Coder-Instruct应用S后的表现优于未应用S的Qwen2.5-32B-Coder-Instruct。此外,S还使非推理模型能够超越推理模型,如应用S*的GPT-4o mini在LiveCodeBench上的表现比o1-Preview高出3.7%。
与多数投票和自调试等基线方法相比,S在性能上表现出显著优势。例如,在Qwen2.5-Coder系列模型上,S相比多数投票和自调试方法分别提升了8.4%至18.2%和6.3%至14.1%的性能。这表明S*的混合测试时缩放框架和自适应输入合成机制在提升代码生成性能方面具有显著效果。
除了LiveCodeBench外,S在CodeContests基准上也表现出色。应用S的Qwen-2.5-Coder-7B-Instruct相比零样本生成提升了9.1%的性能,并进一步超越了GPT-4o mini未应用S时的表现。这些结果验证了S框架的广泛适用性和稳健性。
为了进一步分析S*框架中各个组件的有效性,本文进行了消融研究。实验结果显示,并行采样中的温度设置和样本数量对性能有显著影响。适中的温度(如0.7)能够平衡多样性和质量,从而提高性能;而过高的温度(如0.95)则可能导致性能下降。增加样本数量也能显著提升性能,特别是对于表现较弱的模型来说效果更为明显。
在顺序缩放方面,迭代调试的轮数对性能也有一定影响。一般来说,2至3轮的迭代调试能够带来显著的性能提升,但过多的轮数可能导致性能提升趋于平缓。此外,使用公开测试用例进行迭代调试的效果优于仅使用模型生成的测试用例或使用上一轮的上下文作为调试上下文。
在选择策略方面,自适应输入合成机制相比其他选择策略(如仅使用公开测试用例、使用模型生成的测试用例或使用LLM进行判断)表现出显著优势。这表明结合执行基础信息的自适应输入合成机制在选择最优解方面更加可靠和准确。
S框架在提升代码生成性能方面表现出色,但其主要聚焦于竞赛级别的代码生成任务。对于软件工程等其他领域的代码生成任务来说,S框架的适用性仍需进一步验证。此外,S*框架主要关注于提高准确性而非降低成本,在未来的工作中可以考虑如何平衡准确性和成本之间的关系。
未来的工作可以从以下几个方面展开:一是探索如何将S框架应用于软件工程等其他领域的代码生成任务中;二是研究如何在保证准确性的同时降低S框架的计算成本;三是进一步改进自适应输入合成机制以提高其效率和准确性;四是结合其他先进技术(如强化学习、树搜索等)来进一步提升代码生成性能。
本文提出了一种新的混合测试时缩放框架S,旨在通过结合并行缩放和顺序缩放的优势以及引入自适应输入合成机制来显著提升代码生成模型的覆盖率和选择准确性。实验结果显示,S在不同模型系列和规模上均能一致地提升性能,并在多个基准上表现出色。消融研究进一步验证了S框架中各个组件的有效性。尽管S框架目前主要聚焦于竞赛级别的代码生成任务,但其思想和方法对于其他领域的代码生成任务也具有一定的借鉴意义。