TellWorldAI 世界档案
问档案English

首页›论文

论文arXiv

《用大语言模型做程序合成》(MBPP)

2021 年提交到 arXiv 的论文,提出 MBPP 基准:974 道入门级短 Python 题,并测量 244M 到 137B 参数的语言模型把自然语言描述变成代码的能力。

arXiv 编号 2108.07732 时代 大模型

论文要解决的问题

日常编程里有大量小而明确的活儿:读入一串数字、排序、返回第二大的那个。描述用的是普通语言,成品是几行 Python。语言模型能不能完成这种翻译?这篇论文由 Jacob Austin、Augustus Odena、Maxwell Nye 与另外 8 位作者于 2021 年 8 月 16 日提交到 arXiv,问的正是这种能力有多强,以及它随模型规模怎样变化。[1]

两个新基准与一大片模型规模

为了回答这个问题,作者没有沿用现成的测试集,而是自己造了题。他们在两个新基准 MBPP 和 MathQA-Python 上评估了参数量从 244M 到 137B 的模型,并分两种设定来做:少样本(few-shot)学习,即在提示里给出几个示例、让模型接着往下写;以及微调(fine-tuning),即在任务数据上继续训练模型权重。[1]

MBPP 全称 Mostly Basic Programming Problems,包含 974 道按入门程序员水平设计的编程任务。每道题把一段自然语言描述和一段应当满足它的短 Python 程序配在一起,因此这个基准测的是「从描述合成程序」的能力,而不是对代码知识的记忆。[1] 由于题目小而自足,一个解答可以直接跑测试用例来自动判分,这也是这类基准能够大规模打分的现实前提。

区分少样本与微调,是因为两者问的不是同一件事。少样本的结果说明模型在完全没有针对代码训练过、只有一段提示可依靠的情况下能做到什么;微调的结果则说明,在少量监督之下,剩下的差距还能补上多少。

模型做到了什么

最核心的结果与规模有关。最大的模型即便没有在代码数据集上微调过,只要提示设计得当,用少样本学习就能为 59.6% 的 MBPP 题目合成出解答。而在留出的那部分数据上做微调,能让大多数模型规模的成绩提高约 10 个百分点。[1] 也就是说,微调带来的增益在大小模型上大致相当,真正拉开距离的是起点。

在两个数据集上,程序合成的表现都随模型规模呈对数线性(log-linear)增长。[1] 说得直白些:参数量每翻若干倍,解出的题目比例就稳定地往上加一截;曲线是持续上升的,既不明显走平,也不忽上忽下。正因为趋势这么规整,人们才有可能谈论「规模规律」这回事。

论文还考察了模型给出答案之后会发生什么。如果由人用自然语言对模型最初的那次预测给出反馈,那么修改后的答案错误率只有最初预测的一半。[1] 这里语言的用法与生成不同:人给的是「哪里不对」的文字说明,而不是一份改正后的程序,而这些文字已经足以消掉很大一部分失败。

为什么重要

程序合成,也就是让机器从规格说明出发产出程序,并不是新题目;这篇论文有意思的地方在于测量方式。它把一大批规模小、可自动判分、贴近入门难度的题目,与横跨两个数量级的模型规模放在一起,于是「模型会不会写代码」这个含糊的问题变成了一条有斜率的曲线。59.6% 和约 10 个百分点这两个数字之所以有用,恰恰因为它们附带条件:用的是什么提示、哪种设定、多大的模型。

反馈实验则指向另一个方向。如果人一句普通的话就能让错误率减半,说明模型不只会在生成时写代码,也能对自己的产出接受批评并据此修改,这暗示的是一种「生成—纠正」交替的工作方式,而不是一问一答就结束。基准加上规模测量,给后来的工作提供了一把共同的尺子:一组固定的短题、一个说明清楚的提示设定,以及按模型规模汇报的结果。[1]

注释与来源

  1. Program Synthesis with Large Language Modelshttps://arxiv.org/abs/2108.07732

引用本页: 《用大语言模型做程序合成》(MBPP). TellWorld, https://www.tellworld.net/zh/papers/mbpp. 更新于 2026-11-08