CrossCodeEval: Un Benchmark Diversificato e Multilingue per il Completamento di Codice Cross-File
CrossCodeEval: A Diverse and Multilingual Benchmark for Cross-File Code Completion
October 17, 2023
Autori: Yangruibo Ding, Zijian Wang, Wasi Uddin Ahmad, Hantian Ding, Ming Tan, Nihal Jain, Murali Krishna Ramanathan, Ramesh Nallapati, Parminder Bhatia, Dan Roth, Bing Xiang
cs.AI
Abstract
I modelli di completamento del codice hanno compiuto progressi significativi negli ultimi anni, tuttavia i dataset di valutazione attualmente più popolari, come HumanEval e MBPP, si concentrano principalmente su task di completamento del codice all'interno di un singolo file. Questo contesto eccessivamente semplificato non rappresenta adeguatamente lo scenario reale dello sviluppo software, in cui i repository si estendono su più file con numerose dipendenze tra file, e l'accesso e la comprensione del contesto tra file sono spesso necessari per completare correttamente il codice.
Per colmare questa lacuna, proponiamo CrossCodeEval, un benchmark diversificato e multilingue per il completamento del codice che richiede una comprensione approfondita del contesto tra file per completare il codice in modo accurato. CrossCodeEval è costruito su un insieme variegato di repository open-source reali, con licenze permissive, in quattro linguaggi di programmazione popolari: Python, Java, TypeScript e C#. Per creare esempi che richiedano strettamente il contesto tra file per un completamento accurato, proponiamo un approccio semplice ma efficiente basato sull'analisi statica per identificare l'uso del contesto tra file all'interno del file corrente.
Esperimenti estesi su modelli linguistici di codice all'avanguardia come CodeGen e StarCoder dimostrano che CrossCodeEval è estremamente impegnativo quando il contesto rilevante tra file è assente, e osserviamo chiari miglioramenti quando tale contesto viene aggiunto al prompt. Tuttavia, nonostante questi miglioramenti, il picco delle prestazioni rimane notevolmente irraggiungibile anche con il modello più performante, indicando che CrossCodeEval è anche in grado di valutare la capacità del modello di sfruttare un contesto esteso per migliorare il completamento del codice. Infine, abbiamo valutato vari metodi per il recupero del contesto tra file e dimostrato che CrossCodeEval può essere utilizzato anche per misurare la capacità dei sistemi di recupero del codice.
English
Code completion models have made significant progress in recent years, yet
current popular evaluation datasets, such as HumanEval and MBPP, predominantly
focus on code completion tasks within a single file. This over-simplified
setting falls short of representing the real-world software development
scenario where repositories span multiple files with numerous cross-file
dependencies, and accessing and understanding cross-file context is often
required to complete the code correctly.
To fill in this gap, we propose CrossCodeEval, a diverse and multilingual
code completion benchmark that necessitates an in-depth cross-file contextual
understanding to complete the code accurately. CrossCodeEval is built on a
diverse set of real-world, open-sourced, permissively-licensed repositories in
four popular programming languages: Python, Java, TypeScript, and C#. To create
examples that strictly require cross-file context for accurate completion, we
propose a straightforward yet efficient static-analysis-based approach to
pinpoint the use of cross-file context within the current file.
Extensive experiments on state-of-the-art code language models like CodeGen
and StarCoder demonstrate that CrossCodeEval is extremely challenging when the
relevant cross-file context is absent, and we see clear improvements when
adding these context into the prompt. However, despite such improvements, the
pinnacle of performance remains notably unattained even with the
highest-performing model, indicating that CrossCodeEval is also capable of
assessing model's capability in leveraging extensive context to make better
code completion. Finally, we benchmarked various methods in retrieving
cross-file context, and show that CrossCodeEval can also be used to measure the
capability of code retrievers.