Entrenar modelos de lenguaje en secuencias de edición sintéticas mejora la síntesis 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
Resumen
Los ingenieros de software principalmente escriben código editando programas existentes. En contraste, los modelos de lenguaje grandes (LLMs) sintetizan programas de forma autoregresiva en un solo paso. Una explicación para esto es la escasez de datos de edición de código de código abierto. Mientras que los datos de instrucción de alta calidad para la síntesis de código ya son escasos, los datos de edición de alta calidad son aún más escasos. Para llenar este vacío, desarrollamos un algoritmo de generación de datos sintéticos llamado LintSeq. Este algoritmo refactoriza código existente en una secuencia de ediciones de código utilizando un linter para muestrear de forma procedural las inserciones sin errores que se pueden utilizar para escribir programas secuencialmente. Produce secuencias de edición como cadenas de texto que consisten en diferencias de programa consecutivas. Para probar LintSeq, lo utilizamos para refactorizar un conjunto de datos de pares de instrucciones + programa en tuplas de instrucción + secuencia de diferencias de programa. Luego, ajustamos finamente una serie de LLMs más pequeños que van desde 2.6B hasta 14B parámetros en ambas versiones del conjunto de datos, comparando el rendimiento de cero disparos en bancos de pruebas de síntesis de código. Mostramos que durante el muestreo repetido, los modelos ajustados finamente a secuencias de edición producen programas más diversos que las líneas de base. Esto resulta en una mejor escalabilidad en tiempo de inferencia para la cobertura del banco de pruebas en función de las muestras, es decir, la fracción de problemas "pass@k" resueltos por cualquier intento dado "k" intentos. Por ejemplo, en HumanEval pass@50, los LLMs pequeños ajustados finamente en secuencias de edición sintéticas son competitivos con GPT-4 y superan a los modelos ajustados finamente en el conjunto de datos base en un +20% (+/-3%) en puntuación absoluta. Finalmente, también preentrenamos nuestros propios LMs diminutos para la comprensión de código. Mostramos que ajustar finamente modelos pequeños en ediciones de código sintéticas resulta en una síntesis de código de última generación para la clase de modelos en dispositivos. Nuestro LM de secuencia de edición de 150M parámetros coincide o supera a los modelos de código con el doble de parámetros, tanto con como sin muestreo repetido, incluidos Codex y 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