CrossCodeEval: Разнообразный и многоязычный бенчмарк для кросс-файлового завершения кода
CrossCodeEval: A Diverse and Multilingual Benchmark for Cross-File Code Completion
October 17, 2023
Авторы: 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
Аннотация
Модели автодополнения кода достигли значительного прогресса в последние годы, однако популярные наборы данных для оценки, такие как HumanEval и MBPP, в основном сосредоточены на задачах автодополнения в рамках одного файла. Этот чрезмерно упрощённый сценарий не отражает реальные условия разработки программного обеспечения, где репозитории включают множество файлов с многочисленными межфайловыми зависимостями, и для корректного завершения кода часто требуется доступ и понимание контекста между файлами.
Чтобы заполнить этот пробел, мы предлагаем CrossCodeEval — разнообразный и многоязычный бенчмарк для автодополнения кода, который требует глубокого понимания межфайлового контекста для точного завершения кода. CrossCodeEval построен на основе разнообразного набора реальных, открытых репозиториев с разрешительными лицензиями на четырёх популярных языках программирования: Python, Java, TypeScript и C#. Для создания примеров, которые строго требуют межфайлового контекста для точного завершения, мы предлагаем простой, но эффективный подход на основе статического анализа для выявления использования межфайлового контекста в текущем файле.
Экстенсивные эксперименты с современными языковыми моделями для работы с кодом, такими как CodeGen и StarCoder, демонстрируют, что CrossCodeEval представляет собой крайне сложную задачу при отсутствии соответствующего межфайлового контекста, и мы наблюдаем явные улучшения при добавлении этого контекста в запрос. Однако, несмотря на такие улучшения, пик производительности остаётся недостигнутым даже для самой эффективной модели, что указывает на способность CrossCodeEval оценивать возможности модели в использовании обширного контекста для улучшения автодополнения кода. Наконец, мы провели сравнительный анализ различных методов извлечения межфайлового контекста и показали, что CrossCodeEval также может использоваться для оценки возможностей систем извлечения кода.
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.