ChatPaper.aiChatPaper

Uma Avaliação Estática da Conclusão de Código por Modelos de Linguagem de Grande Escala

A Static Evaluation of Code Completion by Large Language Models

June 5, 2023
Autores: 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

Resumo

Modelos de linguagem de grande escala treinados em código têm demonstrado grande potencial para aumentar a produtividade de desenvolvedores de software. Vários benchmarks baseados em execução foram propostos para avaliar a correção funcional de códigos gerados por modelos em problemas de programação simples. No entanto, é caro realizar a mesma avaliação em projetos complexos do mundo real, considerando o custo de execução. Por outro lado, ferramentas de análise estática, como linters, que podem detectar erros sem executar o programa, não foram bem exploradas para avaliar modelos de geração de código. Neste trabalho, propomos uma estrutura de avaliação estática para quantificar erros estáticos em completações de código Python, utilizando Árvores de Sintaxe Abstrata. Em comparação com a avaliação baseada em execução, nosso método não é apenas mais eficiente, mas também aplicável a códigos em cenários reais. Para os experimentos, coletamos contextos de código de repositórios de código aberto para gerar um milhão de corpos de função usando modelos públicos. Nossa análise estática revela que Nome Indefinido e Variável Não Utilizada são os erros mais comuns entre outros cometidos por modelos de linguagem. Através de estudos extensivos, também mostramos o impacto da temperatura de amostragem, do tamanho do modelo e do contexto nos erros estáticos em completações de código.
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.
PDF30December 15, 2024