导语

  • 会议:ICLR 2023在投
  • 链接:arxiv.org/abs/2203.13…

1 简介

程序组成(program synthesis)的方针是使编码进程自动化,并生成满足用户指定目的的计算机程序。该使命有两个要害挑战:

  1. 难以处理的搜索空间;
  2. 正确指定用户目的的困难。

为了成功地完成程序组成,用户必须选用一些办法将其目的传达给模型,例如逻辑表达式(指定程序输入和输出之间的逻辑关系)、伪代码、输入-输出示例或天然言语的言语化标准。一方面,完好的正式标准具有用户目的的确切标准,但或许需求用户的范畴专业知识和努力来将目的转换为这样的方式。另一方面,仅仅基于输入-输出示例的标准成本较低,但或许没有具体说明目的,导致不精确的处理方案。

论文笔记:CodeGen: An Open Large Language Model for Code with Multi-Turn Program

为了克服这些挑战,本文提出了一种多次序程序组成办法(如图1),其间用户经过逐渐用天然言语供给标准来与组成体系交互,一同以组成子程序的方式接纳体系的呼应,这样用户和体系一同在多个过程中完成完好的程序组成。以下两个考虑因素激发了这种办法:

  1. 将一个潜在的长而杂乱的标准分化为多个过程将简化模型的了解,能够增强模型的程序组成才能;
  2. 代码体现出天然言语和编程言语交织的弱模式,这或许是可使用的。假如将一个单轮的杂乱问题分化为若干多轮的子问题后,用户目的能够在多个次序中表达,即目的能够部分分化和完成,而每个回合都能够很简略地用天然言语表达。

为此,作者还发布了一个多次序程序组成数据基准MTPB (Multi-Turn Programming Benchmark)来衡量模型的多次序程序组成才能。本文的首要贡献如下:

  • 研讨了不同size自回归模型中在多次序程序组成使命中的emerging现象(参阅);
  • 使用这种emerging才能引进多次序程序组成范式
  • 使用一种新的多次序程序组成基准来定量研讨它的性质;
  • 开源了模型checkpoint和自界说练习库:JAXFORMER。

2 模型练习

作者首要在模型规划(四种size:350M, 2.7B, 6.1B, 16.1B)和预练习数据(The PILE, BigQuery,BigPython)方面对多次序程序组成使命进行了试验探究。

2.1 数据集

作者提出的CodeGen模型首要在以下三个数据集上按次序进行预练习

论文笔记:CodeGen: An Open Large Language Model for Code with Multi-Turn Program

  • The Pile:具有825GiB的英语文本和代码,曾被GPT-Neo、GPT-J等模型预练习选用。在该数据集上练习得到的模型称为CodeGen-NL;
  • BigQuery:作者选用了BigQuery数据会集的以下六种编程言语,即C, C++, Go, Java, JavaScript,Python的代码数据继续预练习,得到的模型称为CodeGen-Multi;
  • BigPython:该数据集只包括了Python言语的文件(首要是为了下游使命),在该数据集上继续预练习得到的模型称为CodeGen-Mono。

2.2 模型

CodeGen模型选用自回归Transformer的方式,将next-token prediction言语建模作为学习方针。CodeGen有350M、2.7B、6.1B和16.1B参数的size。前三种参数巨细配置能够与文本语料库上练习的开源大型言语模型进行直接比较,如GPT-Neo (350M, 2.7B) 和GPT-J (6B)。练习超参设置如下表:

论文笔记:CodeGen: An Open Large Language Model for Code with Multi-Turn Program

以天然言语描绘为条件的程序组成的emergence或许源于模型和数据的巨细、练习方针和练习数据自身的性质。emergence指的是大规划的无监督言语模型能够以zero-shot的方式处理未见过的使命。这种现象的出现往往归因于模型和数据的大标准。

数据由来自GitHub,其间一些数据出现天然言语和编程言语交织的模式,作者以为因为next token prediction的练习方针,为程序组成才能供给了一个有噪声的监督信号。影响程序归纳才能的首要因素有两个:1)模型规划和数据规划大,2)练习数据中有噪声信号。

3 单次序评价

作者首先在HumanEval上进行了评价,也被称为单次序评价。

3.1 不同参数和预练习数据规划的模型体现

全体成果如下表所示:

论文笔记:CodeGen: An Open Large Language Model for Code with Multi-Turn Program

从单轮成果来看,作者使用的按次序的预练习对最终成果是有帮助的(如Multi模型比NL模型好,Mono模型比Multi模型好)。

3.2 对用户目的更好的了解有助于程序组成

作者以为,程序组成体系的成功在很大程度上取决于它对用户目的的了解程度。为此,作者比较了4种不同size的CodeGen-Mono模型在猜测正确和猜测不正确的问题上的perplexity,比照成果如下表:

论文笔记:CodeGen: An Open Large Language Model for Code with Multi-Turn Program

能够看到,模型对这些猜测过错的样例的了解差于对猜测正确样例的了解(过错样例的ppl更高)。因而,作者估测,类似于这种模式的用户目的标准将更好地被模型了解,然后导致更好的程序组成。遭到这种模式的启发,作者提出在多个次序中指定用户目的,这样模型一次只重视部分问题,这将使模型更简略了解用户目的。

4 多次序评价

4.1 数据集构建

作者提出并研讨了一种多过程程序组成范式,该范式将程序组成分化为多个过程,体系在每个过程中组成一个子程序。为此,作者首先开发了一个多回合编程基准(MTPB)。MTPB由专家编写的115个问题组成,每个问题都包括天然言语(提示)的多过程描绘。为了处理问题,模型需求组成功能正确的子程序(1)遵循当时过程的描绘,(2)考虑前面过程的描绘和组成子程序(例如,对前面过程中界说的函数和/或变量的正确反向引证)。图1显示了一个说明性示例。

4.2 履行环境

HumanEval的程序段是在一个完好的程序中填入部分函数代码,因而全体结构是比较完好的,易于履行和评价。而在MTPB中,不能保证生成这样的进口点(或返回值)。为了处理这个问题,作者强制对程序的最终一步进行print操作,以此来检验履行成果。

4.3 不同参数和预练习数据规划的模型体现

相同,作者比较了不同预练习数据下的不同参数规划的模型的试验体现,能够看到,CodeGen-Mono在多轮情况下体现非常好。

论文笔记:CodeGen: An Open Large Language Model for Code with Multi-Turn Program

4.4 使用问题分化来更好的了解用户目的

作者以为,多次序分化增强了模型对用户目的标准的了解,然后导致更好的程序组成才能。为了验证这个假设,作者将多轮问题拼接成一个prompt文本,比较了多次序prompt和串联单次序prompt的PPL。

试验成果如表4所示,对所有模型而言,单次序比多次序具有更高的均匀PPL。因而,将用户标准分化为多个过程,并使用大型言语模型的emergence才能,似乎能够让模型更简略地了解,更成功地组成程序。

论文笔记:CodeGen: An Open Large Language Model for Code with Multi-Turn Program

此外,作者根据问题的均匀经过率按难度级别对问题进行分类,分析不同模型在不同难度下的多次序与单次序性能差异。如图2所示(纵轴的值指的是多次序比单次序性能高的百分点数),在几乎所有模型尺寸和难度级别中,多次序提示都比单次序提示有明显改善,大多数改善挨近或高于10个百分点。有趣的是,较大的模型(6.1B和16.1B)关于简略问题的多次序分化后性能是不变的(参见图2中的两个短条,0.19%和- 0.25%)。这意味着当问题能够很简略地被模型了解时(因为问题的简略性和较大模型的高容量的一起效果),对标准进行因式分化是没有必要的。这实际上与作者的动机假设是一致的,即分化杂乱的标准能够简化问题的了解并改善程序的归纳。

4.5 定性分析

作者也给出了一些16.1B的最大模型在某些情况下不如小模型(2.7B)灵敏的比如,如下图:

论文笔记:CodeGen: An Open Large Language Model for Code with Multi-Turn Program

论文笔记:CodeGen: An Open Large Language Model for Code with Multi-Turn Program

大模型初始化一个数字总是得到一个整数,尽管提示要求转换为字符串(图3),或许提示中的“return”要害字触发了一个函数界说,而目的是直接生成一个可履行程序(图4)。

论文笔记:CodeGen: An Open Large Language Model for Code with Multi-Turn Program

论文笔记:CodeGen: An Open Large Language Model for Code with Multi-Turn Program

但是,一般来说,大型模型克服了因为较小模型提示过错解说而导致的过错,包括一同分配多个变量(图5)或了解任何比较的概念(图6)。

5 相关作业

6 总结

本文使用在很多代码数据语料库上练习的大型因果言语模型来研讨程序组成。随着模型巨细和数据巨细的增加,从简略的言语建模中取得了解长上下文和生成一致呼应的才能。使用这种才能,并观察到更好的用户目的了解会带来更好的程序组成,作者提出了一种多过程程序归纳办法,其间程序组成是经过多次序标准和代码生成来完成的。此外,本文发布了多回合编程基准(MTPB)来研讨模型在这种多步范式下组成程序的才能。试验标明,多次序程序组成才能是模型巨细和数据巨细的函数。在多个过程中指定的目的标准更简略被模型消化,并帮助模型进行更精确的程序组成。作者开放了练习代码和模型checkpoint,以促进该范畴未来的研讨和实际使用。