基于合成编辑序列的语言模型训练提高代码合成能力
机器学习
2025-02-12 v3 计算与语言
摘要
软件工程师主要通过修改现有程序来编写代码。而语言模型(LM)则是以单遍自回归方式合成程序。这一差异的一个解释是顺序编辑数据稀缺。虽然高质量的代码合成指令数据稀缺,但用于合成的编辑数据更为稀缺。为填补这一差距,我们开发了一种称为LintSeq的数据生成算法。该算法通过使用 linter 对源代码的相互关联行进行程序化抽样,将程序重构为编辑序列。使用LintSeq抽样得到的合成编辑反映了其编程语言的语法和语义。为测试该算法,我们使用其将指令+程序数据集重构为指令+程序-编辑序列元组。随后,我们在原始版本和重构后的两个数据集上,对参数规模从2.6B到14B的若干小型语言模型进行微调。我们在HumanEval、MBPP(+)、CodeContests、DS-1000和BigCodeBench上进行全面评估,将编辑序列代码语言模型与基线方法进行比较。我们表明,针对迭代式代码合成进行微调的模型在pass@1指标上可达甚至超越基线,并在更高pass@k下表现更好,具体取决于总测试时间FLOPs。最后,我们还预训练了自己的小型语言模型用于代码理解。我们展示了针对这些模型进行逐步编辑式代码合成微调,在HumanEval和MBPP(+)上的性能优于类似规模的现有代码语言模型,如CodeT5+、AlphaCode和Codex。
引用
@article{arxiv.2410.02749,
title = {Training Language Models on Synthetic Edit Sequences Improves Code Synthesis},
author = {Ulyana Piterbarg and Lerrel Pinto and Rob Fergus},
journal= {arXiv preprint arXiv:2410.02749},
year = {2025}
}
备注
ICLR 2025