CrossCodeEval: Un punto de referencia diverso y multilingüe para la finalización de código entre archivos
CrossCodeEval: A Diverse and Multilingual Benchmark for Cross-File Code Completion
October 17, 2023
Autores: 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
Resumen
Los modelos de completado de código han logrado avances significativos en los últimos años, sin embargo, los conjuntos de datos de evaluación populares actuales, como HumanEval y MBPP, se centran predominantemente en tareas de completado de código dentro de un solo archivo. Este escenario excesivamente simplificado no representa adecuadamente el escenario real de desarrollo de software, donde los repositorios abarcan múltiples archivos con numerosas dependencias entre archivos, y a menudo es necesario acceder y comprender el contexto entre archivos para completar el código correctamente.
Para llenar este vacío, proponemos CrossCodeEval, un benchmark diverso y multilingüe para el completado de código que requiere una comprensión profunda del contexto entre archivos para completar el código con precisión. CrossCodeEval se construye sobre un conjunto diverso de repositorios de código abierto del mundo real, con licencias permisivas, en cuatro lenguajes de programación populares: Python, Java, TypeScript y C#. Para crear ejemplos que requieran estrictamente el contexto entre archivos para un completado preciso, proponemos un enfoque sencillo pero eficiente basado en análisis estático para identificar el uso de contexto entre archivos dentro del archivo actual.
Experimentos extensos con modelos de lenguaje de código de última generación como CodeGen y StarCoder demuestran que CrossCodeEval es extremadamente desafiante cuando el contexto relevante entre archivos está ausente, y observamos mejoras claras al agregar este contexto al prompt. Sin embargo, a pesar de estas mejoras, el máximo rendimiento no se alcanza ni siquiera con el modelo de mayor rendimiento, lo que indica que CrossCodeEval también es capaz de evaluar la capacidad del modelo para aprovechar un contexto extenso y realizar un mejor completado de código. Finalmente, evaluamos varios métodos para recuperar el contexto entre archivos y demostramos que CrossCodeEval también puede utilizarse para medir la capacidad de los recuperadores de código.
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.