Treinar Modelos de Linguagem em Sequências de Edição Sintéticas Melhora a Síntese de Código
Training Language Models on Synthetic Edit Sequences Improves Code Synthesis
October 3, 2024
Autores: Ulyana Piterbarg, Lerrel Pinto, Rob Fergus
cs.AI
Resumo
Os engenheiros de software geralmente escrevem código editando programas existentes. Em contraste, modelos de linguagem grandes (LLMs) sintetizam programas de forma autoregressiva em uma única passagem. Uma explicação para isso é a escassez de dados de edição de código de código aberto. Enquanto dados de instrução de alta qualidade para síntese de código já são escassos, dados de edição de alta qualidade são ainda mais escassos. Para preencher essa lacuna, desenvolvemos um algoritmo de geração de dados sintéticos chamado LintSeq. Esse algoritmo refatora o código existente em uma sequência de edições de código usando um linter para amostrar proceduralmente as inserções sem erros que podem ser usadas para escrever programas sequencialmente. Ele gera sequências de edições como strings de texto consistindo em diferenças de programa consecutivas. Para testar o LintSeq, o utilizamos para refatorar um conjunto de dados de pares de instrução + programa em tuplas de instrução + sequência de diferenças de programa. Em seguida, ajustamos a instrução uma série de LLMs menores variando de 2,6B a 14B parâmetros nas versões refatoradas e originais desse conjunto de dados, comparando o desempenho de zero-shot em benchmarks de síntese de código. Mostramos que durante a amostragem repetida, os modelos ajustados com sequências de edições produzem programas mais diversos do que as bases. Isso resulta em melhor escalabilidade no tempo de inferência para cobertura de benchmark como função de amostras, ou seja, a fração de problemas "pass@k" resolvidos por qualquer tentativa dada "k" tentativas. Por exemplo, no HumanEval pass@50, LLMs pequenos ajustados em sequências de edições sintéticas são competitivos com o GPT-4 e superam os modelos ajustados no conjunto de dados base em +20% (+/-3%) na pontuação absoluta. Por fim, também pré-treinamos nossos próprios LMs pequenos para compreensão de código. Mostramos que o ajuste de modelos pequenos em edições de código sintéticas resulta em síntese de código de ponta para a classe de modelo em dispositivo. Nosso LM de sequência de edições de 150M parâmetros corresponde ou supera modelos de código com o dobro de parâmetros, tanto com quanto sem amostragem repetida, incluindo Codex e 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