Una Valutazione Statica del Completamento del Codice da parte di Modelli Linguistici di Grandi Dimensioni
A Static Evaluation of Code Completion by Large Language Models
June 5, 2023
Autori: Hantian Ding, Varun Kumar, Yuchen Tian, Zijian Wang, Rob Kwiatkowski, Xiaopeng Li, Murali Krishna Ramanathan, Baishakhi Ray, Parminder Bhatia, Sudipta Sengupta, Dan Roth, Bing Xiang
cs.AI
Abstract
I modelli linguistici di grandi dimensioni addestrati sul codice hanno dimostrato un grande potenziale nell'aumentare la produttività degli sviluppatori software. Diversi benchmark basati sull'esecuzione sono stati proposti per valutare la correttezza funzionale del codice generato dai modelli su semplici problemi di programmazione. Tuttavia, è costoso eseguire la stessa valutazione su progetti complessi del mondo reale, considerando i costi di esecuzione. Al contrario, strumenti di analisi statica come i linter, che possono rilevare errori senza eseguire il programma, non sono stati sufficientemente esplorati per valutare i modelli di generazione del codice. In questo lavoro, proponiamo un framework di valutazione statica per quantificare gli errori statici nei completamenti di codice Python, sfruttando gli Abstract Syntax Tree. Rispetto alla valutazione basata sull'esecuzione, il nostro metodo non è solo più efficiente, ma anche applicabile al codice in contesti reali. Per gli esperimenti, raccogliamo contesti di codice da repository open source per generare un milione di corpi di funzione utilizzando modelli pubblici. La nostra analisi statica rivela che "Undefined Name" e "Unused Variable" sono gli errori più comuni tra quelli commessi dai modelli linguistici. Attraverso studi approfonditi, mostriamo anche l'impatto della temperatura di campionamento, della dimensione del modello e del contesto sugli errori statici nei completamenti di codice.
English
Large language models trained on code have shown great potential to increase
productivity of software developers. Several execution-based benchmarks have
been proposed to evaluate functional correctness of model-generated code on
simple programming problems. Nevertheless, it is expensive to perform the same
evaluation on complex real-world projects considering the execution cost. On
the contrary, static analysis tools such as linters, which can detect errors
without running the program, haven't been well explored for evaluating code
generation models. In this work, we propose a static evaluation framework to
quantify static errors in Python code completions, by leveraging Abstract
Syntax Trees. Compared with execution-based evaluation, our method is not only
more efficient, but also applicable to code in the wild. For experiments, we
collect code context from open source repos to generate one million function
bodies using public models. Our static analysis reveals that Undefined Name and
Unused Variable are the most common errors among others made by language
models. Through extensive studies, we also show the impact of sampling
temperature, model size, and context on static errors in code completions.