Addestrare modelli linguistici su sequenze di modifiche sintetiche migliora la sintesi del codice.
Training Language Models on Synthetic Edit Sequences Improves Code Synthesis
October 3, 2024
Autori: Ulyana Piterbarg, Lerrel Pinto, Rob Fergus
cs.AI
Abstract
Gli ingegneri del software principalmente scrivono codice modificando programmi esistenti. Al contrario, i grandi modelli di linguaggio (LLM) sintetizzano programmi in modo autoregressivo in un'unica passata. Una spiegazione per questo fenomeno è la scarsità di dati di modifica open-source. Mentre i dati di istruzioni di alta qualità per la sintesi del codice sono già rari, i dati di modifica di alta qualità sono ancora più rari. Per colmare questa lacuna, abbiamo sviluppato un algoritmo di generazione di dati sintetici chiamato LintSeq. Questo algoritmo rifattorizza il codice esistente in una sequenza di modifiche al codice utilizzando un linter per campionare proceduralmente le inserzioni prive di errori che possono essere utilizzate per scrivere programmi in sequenza. Esso produce sequenze di modifiche sotto forma di stringhe di testo costituite da diff di programmi consecutivi. Per testare LintSeq, lo utilizziamo per rifattorizzare un dataset di coppie istruzione + programma in tuple istruzione + sequenza di diff del programma. Successivamente, rifattorizziamo e perfezioniamo una serie di LLM più piccoli con parametri compresi tra 2,6 miliardi e 14 miliardi, sia sulla versione rifattorizzata che su quella originale di questo dataset, confrontando le prestazioni "zero-shot" su benchmark di sintesi del codice. Dimostriamo che durante il campionamento ripetuto, i modelli perfezionati con sequenze di modifiche producono programmi più diversificati rispetto ai modelli di base. Ciò si traduce in una migliore scalabilità al momento dell'inferenza per la copertura del benchmark in funzione dei campioni, cioè la frazione di problemi "pass@k" risolti da qualsiasi tentativo dato "k" prove. Ad esempio, su HumanEval pass@50, i LLM più piccoli perfezionati su sequenze di modifiche sintetiche sono competitivi con GPT-4 e superano i modelli perfezionati sul dataset di base del +20% (+/-3%) nel punteggio assoluto. Infine, preaddestriamo anche i nostri piccoli LM per la comprensione del codice. Mostriamo che il perfezionamento di modelli piccoli su modifiche sintetiche al codice porta a una sintesi del codice all'avanguardia per la classe di modelli on-device. Il nostro LM di sequenza di modifiche con 150 milioni di parametri si allinea o supera i modelli di codice con il doppio dei parametri, sia con che senza campionamento ripetuto, inclusi 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.