Свежая выжимка ml и AI статей - каждый день
Большие языковые модели (LLM) стали неотъемлемой частью современных инструментов для разработки программного обеспечения, предлагая помощь в автодополнении кода, что значительно улучшает производительность программистов. Однако, несмотря на их успехи, существует значительный вызов, связанный с динамикой изменений в библиотеках программного обеспечения. Эти изменения требуют от моделей не только понимания текущих версий библиотек, но и адаптации к их обновлениям и поддержки совместимости с предыдущими версиями.
В этой статье мы рассмотрим новый бенчмарк, GitChameleon, разработанный для оценки способности LLM генерировать код, который не только синтаксически корректен, но и функционально точен в контексте конкретных версий библиотек. Этот бенчмарк предоставляет уникальный взгляд на то, как модели справляются с задачами, требующими знания о версиях библиотек, что часто упускается из виду в существующих оценках.
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.
Для оценки использовались следующие метрики:
Анализ показал, что модели, как правило, лучше справляются с задачами, связанными с изменениями имен функций и новыми функциями, чем с семантическими изменениями или изменениями аргументов. Крупные модели демонстрируют более высокую производительность, но даже они сталкиваются с трудностями при работе с семантическими изменениями.
Было установлено, что существует положительная корреляция между размером модели и её производительностью:
Инкорпорация обратной связи об ошибках улучшила производительность моделей:
Модели показали снижение производительности на более новых версиях библиотек, что подчеркивает необходимость в адаптации моделей к постоянно меняющемуся ландшафту программного обеспечения.
Анализ распределения сложности задач показал, что модели часто демонстрируют бимодальное поведение - они либо очень хорошо справляются с задачей, либо очень плохо. Однако, в совокупности, распределение сложности задач не является бимодальным, что указывает на то, что разные модели могут хорошо справляться с разными задачами.
GitChameleon представляет собой важный шаг вперед в оценке способности LLM генерировать код, учитывая версии библиотек. Этот бенчмарк подчеркивает текущие ограничения моделей и открывает направления для дальнейших исследований и улучшений в области адаптации к изменениям в коде библиотек. В будущем планируется расширить GitChameleon на другие языки программирования и фреймворки, а также исследовать новые задачи, которые могут способствовать развитию более адаптируемых и надежных моделей генерации кода.