Ай Дайджест

Свежая выжимка ml и AI статей - каждый день

M2RC-EVAL: Массивно мультиязыковая оценка завершения кода на уровне репозитория

В современном мире программирования, где автоматизация и эффективность являются ключевыми факторами успеха, задача завершения кода становится все более актуальной. Завершение кода на уровне репозитория (repository-level code completion) позволяет разработчикам предсказывать и предлагать код, основываясь на контексте всего репозитория, что значительно упрощает процесс разработки и повышает производительность. Однако, несмотря на значительные достижения в этой области, существующие бенчмарки и инструменты часто ограничиваются небольшим числом языков программирования и не учитывают специфические особенности различных сценариев завершения кода.

Обзор M2RC-EVAL

M2RC-EVAL представляет собой новый бенчмарк для оценки способностей крупных языковых моделей (LLMs) к завершению кода на уровне репозитория, охватывающий 18 различных языков программирования. Этот бенчмарк не только расширяет горизонты оценки за счет мультиязычности, но и вводит новые аспекты анализа через детализированные аннотации, которые позволяют лучше понять, как LLM справляются с различными сценариями завершения кода.

Основные компоненты M2RC-EVAL

  1. Мультиязычность: Включает 18 популярных языков программирования, что позволяет оценивать модели на широком спектре синтаксических и семантических структур.

  2. Аннотации:

    • Уровень ведра (Bucket-level annotations): Код разделен на фиксированные ведра на основе глубины абстрактного синтаксического дерева (AST), что помогает оценить сложность задач завершения кода.
    • Семантический уровень (Semantic-level annotations): Предоставляет детальные метки для каждой позиции курсора завершения, основанные на семантических категориях, таких как структура программы, объявления и определения, управляющие структуры и т.д.
  3. Корпус инструкций M2RC-INSTRUCT: Создан для улучшения способностей LLM к завершению кода, этот корпус содержит примеры кода на всех 18 языках, что позволяет моделям обучаться на реальных примерах из различных контекстов.

Методология сбора данных

  • Общий пул данных: Данные были собраны из The Stack v2, включающего лицензированные репозитории GitHub, с последующей обработкой и фильтрацией для получения качественного набора данных.
  • Выбор позиции курсора для завершения: В отличие от случайного выбора, позиции курсора выбираются на основе AST, что гарантирует целостность идентификаторов и операторов.

Контроль качества

Для обеспечения высокого качества данных и результатов были применены следующие фильтры:

  • Длина позиции завершения не должна превышать 5 строк.
  • Если истинное завершение короче 20 символов, по крайней мере 20% из них должны быть буквенными.
  • Репозитории в тестовом наборе не должны присутствовать в обучающем наборе.

Эксперименты и результаты

Эксперименты проводились с использованием трех популярных LLM: StarCoder-7B, DeepSeekCoder-6.7B и CodeLlama-7B. Были оценены следующие аспекты:

  • Метрики оценки: Использовались точное совпадение (Exact Match, EM) и редакционная схожесть (Edit Similarity, ES) для сравнения сгенерированного кода с эталонным.

  • Экспериментальная настройка:

    • Базовая линия: Использование только контекста текущего файла.
    • +Восстановление: Добавление контекста из других файлов репозитория.
    • +Восстановление & Настройка: Дополнительная настройка моделей на M2RC-INSTRUCT.
  • Основные результаты: Показано, что использование контекста из других файлов значительно улучшает результаты, а настройка на M2RC-INSTRUCT приводит к еще большему прогрессу.

Анализ

  • Разные размеры моделей: Модели с большим количеством параметров показывают лучшие результаты, однако настройка на M2RC-INSTRUCT может существенно улучшить производительность даже для меньших моделей.
  • Разные размеры обучающих данных: Увеличение объема обучающих данных улучшает результаты, что подчеркивает важность обширных и разнообразных данных для обучения LLM.
  • Гранулярность уровней ведра и семантических уровней: Показано, что сложность задач завершения кода возрастает с уменьшением уровня ведра и изменением семантического контекста.
  • Завершение на разных линиях: Модели лучше справляются с короткими задачами завершения, но производительность снижается с увеличением длины кода для завершения.
  • Кросс-языковой перенос: Настройка на одном языке может улучшить производительность на других, что свидетельствует о способности моделей к обобщению.

Заключение

M2RC-EVAL представляет собой значительный шаг вперед в оценке и улучшении способностей LLM к завершению кода на уровне репозитория. С его помощью можно не только оценить текущие модели, но и направить дальнейшие исследования в области кодовой интеллектуальности и инженерии программного обеспечения. Этот бенчмарк подчеркивает важность мультиязычности и детализированного анализа для создания более универсальных и эффективных инструментов для разработчиков.