ReGAL: Refactorización de Programas para Descubrir Abstracciones Generalizables
ReGAL: Refactoring Programs to Discover Generalizable Abstractions
January 29, 2024
Autores: Elias Stengel-Eskin, Archiki Prasad, Mohit Bansal
cs.AI
Resumen
Si bien los modelos de lenguaje de gran escala (LLMs) se utilizan cada vez más para la síntesis de programas, carecen de la visión global necesaria para desarrollar abstracciones útiles; generalmente predicen programas uno por uno, repitiendo con frecuencia la misma funcionalidad. Generar código redundante desde cero es tanto ineficiente como propenso a errores. Para abordar esto, proponemos Refactoring for Generalizable Abstraction Learning (ReGAL), un método sin gradientes para aprender una biblioteca de funciones reutilizables mediante la refactorización de código, es decir, reestructurar el código sin cambiar su salida de ejecución. ReGAL aprende a partir de un pequeño conjunto de programas existentes, verificando y refinando iterativamente sus abstracciones mediante la ejecución. Descubrimos que las bibliotecas de funciones compartidas descubiertas por ReGAL hacen que los programas sean más fáciles de predecir en diversos dominios. En tres conjuntos de datos (generación de gráficos LOGO, razonamiento de fechas y TextCraft, un juego de texto basado en Minecraft), tanto los LLMs de código abierto como los propietarios mejoran en precisión al predecir programas con funciones de ReGAL. Para CodeLlama-13B, ReGAL resulta en aumentos absolutos de precisión del 11.5% en gráficos, 26.1% en comprensión de fechas y 8.1% en TextCraft, superando a GPT-3.5 en dos de los tres dominios. Nuestro análisis revela que las abstracciones de ReGAL encapsulan subrutinas de uso frecuente, así como dinámicas del entorno.
English
While large language models (LLMs) are increasingly being used for program
synthesis, they lack the global view needed to develop useful abstractions;
they generally predict programs one at a time, often repeating the same
functionality. Generating redundant code from scratch is both inefficient and
error-prone. To address this, we propose Refactoring for Generalizable
Abstraction Learning (ReGAL), a gradient-free method for learning a library of
reusable functions via code refactorization, i.e. restructuring code without
changing its execution output. ReGAL learns from a small set of existing
programs, iteratively verifying and refining its abstractions via execution. We
find that the shared function libraries discovered by ReGAL make programs
easier to predict across diverse domains. On three datasets (LOGO graphics
generation, Date reasoning, and TextCraft, a Minecraft-based text game), both
open-source and proprietary LLMs improve in accuracy when predicting programs
with ReGAL functions. For CodeLlama-13B, ReGAL results in absolute accuracy
increases of 11.5% on graphics, 26.1% on date understanding, and 8.1% on
TextCraft, outperforming GPT-3.5 in two of three domains. Our analysis reveals
ReGAL's abstractions encapsulate frequently-used subroutines as well as
environment dynamics.