RepoFusion: Обучение моделей кода для понимания вашего репозитория
RepoFusion: Training Code Models to Understand Your Repository
June 19, 2023
Авторы: Disha Shrivastava, Denis Kocetkov, Harm de Vries, Dzmitry Bahdanau, Torsten Scholak
cs.AI
Аннотация
Несмотря на огромный успех крупных языковых моделей (LLM) в ассистентах для написания кода, таких как GitHub Copilot, эти модели испытывают трудности с пониманием контекста, присутствующего в репозитории (например, импорты, родительские классы, файлы с похожими именами и т.д.), что приводит к неточным предложениям по завершению кода. Этот эффект становится более выраженным при использовании таких ассистентов для репозиториев, которые модель не видела во время обучения, таких как проприетарное программное обеспечение или проекты в процессе разработки. Недавние исследования показали перспективность использования контекста из репозитория во время вывода. В данной работе мы развиваем эту идею и предлагаем RepoFusion — фреймворк для обучения моделей с учетом релевантного контекста репозитория. Эксперименты с завершением однострочного кода показывают, что наши модели, обученные с учетом контекста репозитория, значительно превосходят гораздо более крупные модели кода, такие как CodeGen-16B-multi (в 73 раза больше), и приближаются к производительности модели StarCoderBase, которая в 70 раз больше и была обучена с использованием задачи Fill-in-the-Middle. Мы считаем эти результаты новым и убедительным доказательством преимуществ обучения с учетом контекста репозитория. Мы проводим обширные исследования для изучения влияния таких параметров, как тип контекста, количество контекстов, длина контекста и инициализация в рамках нашего фреймворка. В заключение мы публикуем Stack-Repo — набор данных из 200 Java-репозиториев с разрешительными лицензиями и почти дедуплицированными файлами, дополненными тремя типами контекстов репозитория. Кроме того, мы предоставляем код и обученные контрольные точки для нашей работы. Наши опубликованные ресурсы доступны по адресу https://huggingface.co/RepoFusion.
English
Despite the huge success of Large Language Models (LLMs) in coding assistants
like GitHub Copilot, these models struggle to understand the context present in
the repository (e.g., imports, parent classes, files with similar names, etc.),
thereby producing inaccurate code completions. This effect is more pronounced
when using these assistants for repositories that the model has not seen during
training, such as proprietary software or work-in-progress code projects.
Recent work has shown the promise of using context from the repository during
inference. In this work, we extend this idea and propose RepoFusion, a
framework to train models to incorporate relevant repository context.
Experiments on single-line code completion show that our models trained with
repository context significantly outperform much larger code models as
CodeGen-16B-multi (sim73times larger) and closely match the performance of
the sim 70times larger StarCoderBase model that was trained with the
Fill-in-the-Middle objective. We find these results to be a novel and
compelling demonstration of the gains that training with repository context can
bring. We carry out extensive ablation studies to investigate the impact of
design choices such as context type, number of contexts, context length, and
initialization within our framework. Lastly, we release Stack-Repo, a dataset
of 200 Java repositories with permissive licenses and near-deduplicated files
that are augmented with three types of repository contexts. Additionally, we
are making available the code and trained checkpoints for our work. Our
released resources can be found at https://huggingface.co/RepoFusion.