Обучение языковых моделей на синтетических последовательностях редактирования улучшает синтез кода.
Training Language Models on Synthetic Edit Sequences Improves Code Synthesis
October 3, 2024
Авторы: Ulyana Piterbarg, Lerrel Pinto, Rob Fergus
cs.AI
Аннотация
Инженеры-программисты в основном пишут код, редактируя существующие программы. В отличие от этого, большие языковые модели (LLM) авторегрессивно синтезируют программы за один проход. Одним из объяснений этого является дефицит открытых данных для редактирования. В то время как качественные данные для инструкций по синтезу кода уже являются редкостью, качественные данные для редактирования еще более редки. Для заполнения этой пробела мы разработали алгоритм генерации синтетических данных под названием LintSeq. Этот алгоритм рефакторирует существующий код в последовательность редактирования кода, используя линтер для процедурной выборки из безошибочных вставок, которые могут быть использованы для последовательного написания программ. Он выводит последовательности редактирования в виде текстовых строк, состоящих из последовательных различий программ. Для тестирования LintSeq мы используем его для рефакторинга набора данных пар инструкция + программа в кортежи инструкция + последовательность редактирования программы. Затем мы донастраиваем ряд меньших LLM, варьирующихся от 2,6 млрд до 14 млрд параметров, как на переработанных, так и на оригинальных версиях этого набора данных, сравнивая нулевую производительность на бенчмарках синтеза кода. Мы показываем, что в ходе повторной выборки модели, донастроенные на последовательности редактирования, производят более разнообразные программы, чем базовые модели. Это приводит к лучшему масштабированию времени вывода для покрытия бенчмарков как функции от выборки, т.е. доли проблем "pass@k", решенных при любой попытке из "k". Например, на HumanEval pass@50, небольшие LLM, донастроенные на синтетические последовательности редактирования, конкурентоспособны с GPT-4 и превосходят модели, донастроенные на базовом наборе данных на +20% (+/-3%) по абсолютному показателю. Наконец, мы также предварительно обучаем наши собственные крошечные языковые модели для понимания кода. Мы показываем, что донастройка крошечных моделей на синтетические редактирования кода приводит к передовому синтезу кода для класса моделей на устройстве. Наша языковая модель последовательности редактирования с 150 млн параметров соответствует или превосходит модели кода с удвоенным количеством параметров, как с повторной выборкой, так и без нее, включая Codex и AlphaCode.
English
Software engineers mainly write code by editing existing programs. In
contrast, large language models (LLMs) autoregressively synthesize programs in
a single pass. One explanation for this is the scarcity of open-sourced edit
data. While high-quality instruction data for code synthesis is already scarce,
high-quality edit data is even scarcer. To fill this gap, we develop a
synthetic data generation algorithm called LintSeq. This algorithm refactors
existing code into a sequence of code edits by using a linter to procedurally
sample across the error-free insertions that can be used to sequentially write
programs. It outputs edit sequences as text strings consisting of consecutive
program diffs. To test LintSeq, we use it to refactor a dataset of instruction
+ program pairs into instruction + program-diff-sequence tuples. Then, we
instruction finetune a series of smaller LLMs ranging from 2.6B to 14B
parameters on both the re-factored and original versions of this dataset,
comparing zero-shot performance on code synthesis benchmarks. We show that
during repeated sampling, edit sequence finetuned models produce more diverse
programs than baselines. This results in better inference-time scaling for
benchmark coverage as a function of samples, i.e. the fraction of problems
"pass@k" solved by any attempt given "k" tries. For example, on HumanEval
pass@50, small LLMs finetuned on synthetic edit sequences are competitive with
GPT-4 and outperform models finetuned on the baseline dataset by +20% (+/-3%)
in absolute score. Finally, we also pretrain our own tiny LMs for code
understanding. We show that finetuning tiny models on synthetic code edits
results in state-of-the-art code synthesis for the on-device model class. Our
150M parameter edit sequence LM matches or outperforms code models with twice
as many parameters, both with and without repeated sampling, including Codex
and AlphaCode.Summary
AI-Generated Summary