Ай Дайджест

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

GitChameleon: Разоблачение возможностей генерации версионного кода LLM

Большие языковые модели (LLM) стали неотъемлемой частью современных инструментов для разработки программного обеспечения, предлагая помощь в автодополнении кода, что значительно улучшает производительность программистов. Однако, несмотря на их успехи, существует значительный вызов, связанный с динамикой изменений в библиотеках программного обеспечения. Эти изменения требуют от моделей не только понимания текущих версий библиотек, но и адаптации к их обновлениям и поддержки совместимости с предыдущими версиями.

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

GitChameleon: Бенчмарк для версионно-специфичной генерации кода

Статистика бенчмарка

GitChameleon включает в себя 116 задач на Python, каждая из которых ориентирована на популярные библиотеки, такие как PyTorch, Geopandas, NLTK, NetworkX, GeoPy, Gradio, Scikit-Learn, Matplotlib, PyCaret, Pandas и NumPy. Задачи охватывают версии библиотек, выпущенные с 2014 по 2023 год, исключая устаревшие и отозванные версии.

Каждая задача в бенчмарке сопровождается ручными тестами, которые проверяют правильность выполнения кода. Среднее количество токенов в проблемных заявлениях составляет 20.4, а в начальном коде - 47.4, что в сумме дает 67.8 токенов на образец. Общий объем токенов для всех образцов, включая шаблоны подсказок, составляет 19,409 токенов.

Сбор данных

Для создания GitChameleon, авторы изучили журналы изменений (changelogs) популярных библиотек, чтобы выявить изменения в API, включая устаревшие функции, изменения аргументов, поведения и новые функции. На основе этих изменений были созданы конкретные задачи, которые требуют от модели знания о версиях библиотек для корректной генерации кода.

Проверка образцов

Каждая задача в GitChameleon проходит через несколько этапов проверки:

  • Компиляция: Убедиться, что начальный код компилируется без ошибок.
  • Ассертивные тесты: Проверка корректности работы тестов.
  • Зависимости: Убедиться, что все необходимые внешние зависимости установлены, кроме тех, которые тестируются.

Этот процесс включает создание виртуальной среды, установку соответствующей версии библиотеки и выполнение скрипта, который объединяет начальный код, ожидаемый результат и тесты.

Эмпирическое исследование

Экспериментальная установка

Для оценки моделей использовались веса из Hugging Face и серверы моделей на базе Text Generation Inference (TGI) и VLLM. Модели с менее чем 70 миллиардами параметров запускались на одном GPU NVIDIA H100 с 95GB памяти, а модели с более чем 70 миллиардами параметров - на двух таких GPU. Параметры генерации были настроены на температуру 0.3 для Pass@1 и 0.8 для Pass@10, с максимальным количеством генерируемых новых токенов 256.

Оценочные метрики

Для оценки использовались следующие метрики:

  • Pass@k: Процент задач, для которых хотя бы одно из первых k решений прошло все ассертивные тесты.
  • Greedy: Стандартный жадный метод декодирования, где выбирается наиболее вероятный токен.
  • Error Feedback: Добавление логов ошибок в подсказку для повторной генерации кода.
  • Doc-prompting: Использование документации функции в подсказке.

Основные результаты

Анализ показал, что модели, как правило, лучше справляются с задачами, связанными с изменениями имен функций и новыми функциями, чем с семантическими изменениями или изменениями аргументов. Крупные модели демонстрируют более высокую производительность, но даже они сталкиваются с трудностями при работе с семантическими изменениями.

Производительность моделей

  • DeepSeek-Coder-33B достигла наивысшего результата Pass@1 (35.7%), показывая свою эффективность в генерации корректных решений с первого раза.
  • CodeLlama-34B превзошла другие модели по метрике Pass@10 (42.8%), демонстрируя способность генерировать корректные решения при нескольких попытках.

Корреляция с размером модели

Было установлено, что существует положительная корреляция между размером модели и её производительностью:

  • Для базовых моделей коэффициент корреляции Спирмена составил 0.82 для Pass@1 и 0.69 для Pass@10.
  • Для инструкционно-настроенных моделей коэффициенты были 0.45 для Pass@1 и 0.42 для Pass@10.

Влияние обратной связи об ошибках

Инкорпорация обратной связи об ошибках улучшила производительность моделей:

  • В среднем, улучшение составило 5.4% для Pass@1 и 4.7% для Pass@10 у инструкционно-настроенных моделей.

Анализ результатов

Производительность по годам выпуска версий

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

Типы изменений API

  • Семантические изменения: Все модели показали слабые результаты, указывая на потенциальную область для улучшения.
  • Изменения аргументов/атрибутов: Обратная связь об ошибках оказала значительное влияние, улучшив результаты в этой категории.

Анализ сложности задач

Анализ распределения сложности задач показал, что модели часто демонстрируют бимодальное поведение - они либо очень хорошо справляются с задачей, либо очень плохо. Однако, в совокупности, распределение сложности задач не является бимодальным, что указывает на то, что разные модели могут хорошо справляться с разными задачами.

Заключение

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