跳到主内容
人工智能

基于大型语言模型的程序合成

Program Synthesis with Large Language Models

Jacob Austin, Augustus Odena, Maxwell Nye, Maarten Bosma, Henryk Michalewski, David Dohan, Ellen Jiang, Carrie Jun Cai, Michael A. Terry, Quoc Viet Le, Charles A. Sutton

arXiv (Cornell University) · 2021-08-16

开放获取对齐与安全大模型与语言被引 388影响因子 ≈0.2

摘要

本文探讨了当前一代大型语言模型在通用编程语言中进行程序合成的极限。我们在少样本学习和微调两种模式下,利用MBPP与MathQA-Python两个新基准测试集,对参数规模介于2.44亿至1370亿之间的多款此类模型进行了评估。所设计的基准测试旨在衡量这些模型根据自然语言描述合成简短Python程序的能力。Mostly Basic Programming Problems(MBPP)数据集包含974个编程任务,专为入门级程序员设计;MathQA-Python数据集是MathQA基准测试的Python版本,包含23914道题目,用于评估模型从更复杂的文本中合成代码的能力。在两个数据集上,我们发现合成性能随模型规模呈对数线性增长趋势。即便没有针对代码数据集的微调,我们规模最大的模型也能借助精心设计的提示词,通过少样本学习合成出59.6%的MBPP题目解答。针对数据集中的预留部分进行微调后,大多数规模模型的性能可提升约10个百分点。在MathQA-Python数据集上,经过微调的最大规模模型准确率达到了83.8%。进一步而言,我们研究了模型参与代码相关对话的能力,通过融入人类反馈来优化其生成的解决方案。结果显示,与人类提供的自然语言反馈相比,模型初始预测的错误率会降低一半。此外,我们开展了错误分析,以揭示这些模型的不足之处以及最难生成的程序类型。最后,我们通过微调模型来预测程序执行结果,以此探究这些模型的语义基础。研究发现,即便是我们最优秀的模型,通常也无法根据特定输入预测程序的输出结果。

本摘要由 AI(Hy-MT2-Pro)翻译生成,仅供参考,请以原文为准。

AI 综述

基于全文生成
主要观点
论文将问题域限定为通用编程语言中的程序合成,评估244M至137B参数的大语言模型能否根据自然语言描述生成短Python程序。作者构建MBPP(974个入门级任务,另含426个手工校验子集)和MathQA-Python(23914个由MathQA改写而来的Python题)两个基准,覆盖较短直白描述与较复杂文本两类任务。核心发现是合成性能随模型规模呈对数线性提升;最大模型在良好提示的少样本设置下可解决MBPP 59.6%的问题,微调在多数规模上带来约10个百分点提升,MathQA-Python最大微调模型达到83.8%准确率。论文进一步主张,人类自然语言反馈可把初始预测错误率减半,但模型在给定输入预测程序执行结果上普遍失败,显示生成代码与语义理解之间存在差距。
研究方法
研究采用两个新基准上的执行式评测:对MBPP用974题及426题编辑子集,对MathQA-Python用过滤后23914题(训练19209、验证2822、测试1883),以代码是否通过测试或算出标准答案衡量功能正确性。实验比较244M到137B参数的稠密从左到右解码器Transformer,在少样本提示与微调两种机制下测试;MBPP微调仅用374题、最大模型学习率3e-5训练100步,MathQA-Python微调更久。生成阶段对每题用温度0.5采样80个程序并执行测试,执行预测实验则用贪心解码比较模型输出与真实执行结果。论文还做提示样例数量与身份、采样技术、模型规模等敏感性分析,并用四轮人类自然语言反馈的对话实验和错误类型分析支撑结论。
学术贡献
材料层面的贡献是发布MBPP和MathQA-Python两个可执行评测集:前者面向入门级短Python函数并附测试用例,后者把MathQA的DSL解答转写为Python并保留复杂文字题特征。方法与实证层面的贡献是在244M至137B参数范围内系统报告少样本与微调的合成表现,给出性能随模型规模对数线性提升的度量,并显示374题的小规模微调即可显著提升MBPP表现。论文还拓展了程序合成评测的交互维度,用人类自然语言反馈修复代码的实验量化错误率减半;同时以执行结果预测任务给出语义接地的负结果,并区分运行时错误、语法错误等错误类型,对代码生成评测与模型能力边界议题有直接价值。
存在局限
评测对象虽声称面向通用编程语言,但两个基准都只覆盖短Python程序,MBPP平均代码6.8行、中位数5行,结论不能直接外推到C++等语言或长程序。MBPP含974题而手工校验子集仅426题,MathQA-Python过滤掉45%原题后才保留23914题,这种筛选可能改变题目难度分布并影响准确率的代表性。少样本结果对提示中具体样例身份高度敏感,且按样本比例衡量的性能随规模变化不如按题目比例稳定,说明单一提示与采样设置下的比较需谨慎。交互实验依赖人类自然语言反馈,材料未明确给出反馈者数量、反馈类型分布与跨任务一致性,难以判断错误率减半的可复现范围;执行预测任务也只报告总体失败,未充分拆解失败来源。
进一步研究方向
可将MBPP与MathQA-Python的题目和测试用例扩展到其他通用编程语言及更长程序,采用同样的执行式功能正确性评测,检验对数线性scaling是否仍成立。可设计受控消融实验,系统改变提示样例的数量、身份、顺序与采样温度,并跨随机种子重复,报告每题通过率的方差与置信区间,以区分模型能力与提示偶然性。可把人类反馈对话实验扩展为多轮、多人标注的可复现协议,按反馈类型(澄清题意、指出边界条件、修正算法)记录并测量每类反馈对错误率的单独贡献。针对执行结果预测的失败,可在MBPP程序上加入中间变量状态或执行轨迹预测作为辅助训练目标,比较其是否改善模型对程序语义的接地能力。

本综述由 AI(deepseek-flash)阅读开放获取全文自动生成,仅供参考,不代表原文作者观点,请以原文为准。

参考文献

相关论文

话题:Software Engineering Research