ReGAL: Refatoração de Programas para Descobrir Abstrações Generalizáveis
ReGAL: Refactoring Programs to Discover Generalizable Abstractions
January 29, 2024
Autores: Elias Stengel-Eskin, Archiki Prasad, Mohit Bansal
cs.AI
Resumo
Embora os grandes modelos de linguagem (LLMs) estejam sendo cada vez mais utilizados para síntese de programas, eles carecem da visão global necessária para desenvolver abstrações úteis; geralmente preveem programas um de cada vez, frequentemente repetindo a mesma funcionalidade. Gerar código redundante do zero é tanto ineficiente quanto propenso a erros. Para abordar isso, propomos o Refactoring for Generalizable Abstraction Learning (ReGAL), um método sem gradiente para aprender uma biblioteca de funções reutilizáveis por meio de refatoração de código, ou seja, reestruturar o código sem alterar sua saída de execução. O ReGAL aprende a partir de um pequeno conjunto de programas existentes, verificando e refinando iterativamente suas abstrações por meio de execução. Descobrimos que as bibliotecas de funções compartilhadas descobertas pelo ReGAL tornam os programas mais fáceis de prever em diversos domínios. Em três conjuntos de dados (geração de gráficos LOGO, raciocínio sobre datas e TextCraft, um jogo de texto baseado em Minecraft), tanto LLMs de código aberto quanto proprietários melhoram em precisão ao prever programas com funções do ReGAL. Para o CodeLlama-13B, o ReGAL resulta em aumentos absolutos de precisão de 11,5% em gráficos, 26,1% em entendimento de datas e 8,1% no TextCraft, superando o GPT-3.5 em dois dos três domínios. Nossa análise revela que as abstrações do ReGAL encapsulam sub-rotinas frequentemente usadas, bem como dinâmicas do ambiente.
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.