Ricercatori del MIT introducono LILO un quadro neuro-simbolico per imparare biblioteche interpretative per la sintesi dei programmi

Ricercatori del MIT presentano LILO un framework neuro-simbolico per l'apprendimento di librerie interpretative per la sintesi dei programmi

I grandi modelli di linguaggio (LLM) stanno diventando sempre più abili nella programmazione in vari contesti, come completare codice parzialmente scritto, interagire con programmatori umani e persino risolvere enigmi di programmazione impegnativi a livello competitivo. Tuttavia, gli sviluppatori software sono più interessati a creare librerie che possano essere utilizzate per risolvere interi domini di problemi piuttosto che a terminare il lavoro corrente. A tale scopo, la competenza nel refactoring – trovare astrazioni che rendano il codice più comprensibile (intuitivo per altri programmatori), riutilizzabile (generalizzando a nuovi compiti) e compatto (consolidando la struttura condivisa) – rappresenta un componente fondamentale dello sviluppo software. Sarà necessario ampliare le funzionalità degli attuali strumenti di completamento del codice – che attualmente sono utilizzati da milioni di programmatori – per affrontare il problema dell’apprendimento di librerie e risolvere questa ottimizzazione multi-obiettivo.

Per apprendere librerie di astrazioni di funzioni riutilizzabili, in questo studio gli sviluppatori integrano modelli di linguaggio con sviluppi algoritmici attuali nel refactoring automatico delle lingue di programmazione (PL). Ricercatori del MIT CSAIL, del MIT Brain and Cognitive Sciences e del Harvey Mudd College presentano LILO, un framework neurosimbolico composto da tre moduli correlati tra loro (Fig. 1) per l’induzione di librerie dalle osservazioni linguistiche:

• Un modulo di sintesi a doppio sistema, che utilizza due approcci diversi per cercare risposte a problemi di programmazione: nella ricerca guidata da LLM vengono introdotte priorità generali di dominio forte, mentre nella ricerca enumerativa possono essere trovate espressioni specifiche del dominio

• Un modulo di compressione che utilizza STITCH, un sistema di compressione simbolica ad alte prestazioni, per trovare astrazioni rilevanti dall’insieme di soluzioni corrente

• Un modulo di auto-documentazione (AutoDoc) che produce docstring e nomi di funzioni leggibili dagli esseri umani, migliorando l’interpretazione e agevolando la ricerca guidata da LLM in seguito.

Il loro design si basa sull’algoritmo iterativo Wake-Sleep DREAMCODER, che alterna la ricerca di soluzioni a sfide di programmazione (fase Wake) alla riscrittura di astrazioni comuni in una libreria (fase Sleep), che aiuta a indirizzare la ricerca. A differenza delle tecniche convenzionali di deep learning, DreamCoder può trarre generalizzazioni significative da un piccolo numero di campioni, e la libreria appresa rappresenta simbolicamente la conoscenza concettuale del modello. Tuttavia, il processo di ricerca di DreamCoder richiede una quantità considerevole di calcolo, tanto che per apprendere un singolo dominio sono necessari oltre due mesi di CPU.

Figura 1: Panoramica del ciclo di apprendimento DILO. (A1) Utilizzando una metodologia di ricerca a doppio sistema, LILO crea programmi a partire da descrizioni di compiti scritte in linguaggio naturale. LILO combina l’autodocumentazione autogenerata da LLM (C) con un metodo di compressione chiamato STITCH (B) per strutturare un insieme di soluzioni di programmi e creare una libreria di λ-abstrazioni interpretabile. Questo ciclo di ricerca-compressione-documentazione semplifica la struttura delle soluzioni di programmi (A rispetto a D), facilitando così la risoluzione di compiti sempre più difficili nelle fasi successive.

Una parte significativa di questo tempo di ricerca è dedicata a “mettersi in carreggiata”, ovvero a trovare un insieme fondamentale di astrazioni con cui i programmatori sono già familiari o che possono comprendere rapidamente grazie all’esperienza precedente nella risoluzione di problemi specifici di dominio. Inoltre, le librerie di DreamCoder non sono sempre interpretabili; per decifrarle è necessaria conoscenza del dominio e comprensione del calcolo lambda. Per affrontare questi problemi, LILO utilizza i LLM in due modi innovativi: (1) per trovare soluzioni di programmi più velocemente durante le ricerche e (2) per migliorare la documentazione delle librerie apprese rendendole più comprensibili. Su tre domini di sintesi di programmi difficili – modifica di stringhe con espressioni regolari, ragionamento sulla scena nel dataset CLEVR e composizione grafica nel linguaggio di grafica a copertura 2D – confrontano LILO con un equivalente DreamCoder guidato dal linguaggio.

Rispetto a DreamCoder, LILO completa più compiti su tutti e tre i domini e apprende librerie in modo più ricco dal punto di vista empirico che contengono astrazioni impossibili da trovare con le tecniche attuali. Ad esempio, LILO acquisisce il concetto di vocale, un primo passo fondamentale nel campo della modifica delle stringhe, eliminando così la necessità di cercare oltre 265 disgiunzioni di caratteri potenziali. LILO comprime queste informazioni in astrazioni simboliche utili sia per le tecniche di ricerca convenzionali che per la sintesi guidata da LLM, a differenza di soluzioni basate solo su LLM, che possono svolgere compiti comparabili. Il loro modulo AutoDoc è fondamentale per questa integrazione neurosimbolica poiché migliora l’interpretabilità e facilita una migliore utilizzazione della libreria da parte del sintetizzatore LLM. Come sviluppo innovativo in una lunga linea di lavoro nella sintesi induttiva dei programmi, LILO mostra come concetti e risorse della comunità PL possano essere combinati con i progressi attuali nella modellazione del linguaggio.