[Перевод] Сравнение бенчмарков LLM для разработки программного обеспечения
В этой статье мы сравним различные бенчмарки, которые помогают ранжировать крупные языковые модели для задач разработки программного обеспечения.
Серия публикаций о бенчмаркинге LLM
Прочтите все остальные статьи из серии Symflower об оценке LLM и ознакомьтесь с нашим последним подробным обзором лучших LLM для генерации кода.
Часть 1: Оценка LLM: как работает бенчмаркинг?
Часть 2: Оценка LLM: сложные оценщики и фреймворки оценки.
Часть 3: Каковы наиболее популярные бенчмарки LLM?
Крупные языковые модели становятся достаточно продвинутыми и полезными для задач разработки программного обеспечения. Модели способны выполнять поиск в вашей кодовой базе, генерировать и исправлять код, однако найти ту, которая лучше всего соответствует вашим потребностям, может быть сложно.
К счастью, существуют бенчмарки, которые помогают оценивать и сравнивать производительность различных моделей при выполнении типичных задач разработки программного обеспечения. В этой статье представлены ключевые бенчмарки, которые помогут вам оценить производительность LLM и возможность использования модели для вашей повседневной работы.
Бенчмарки для генерации кода LLM
Список общих бенчмарков (например, не относящихся к разработке программного обеспечения) можно найти в предыдущей статье этой серии. Далее речь будет идти о бенчмарках, специфичных для кодирования:
HumanEval
Документ | GitHub | Набор данных
Выпущен: июль 2021 г.
Общее количество задач: 164
Языки программирования: Python
Проверка результатов: модульные тесты (в среднем 7,7 тестовых случаев на пример)
HumanEval был разработан OpenAI — именно тогда они представили свою первую модель «Codex» (которая предположительно была первой моделью, лежащей в основе GitHub Copilot). Вместо простого текстового сходства (что было бы типично для задач на естественном языке) он фокусируется на том, действительно ли код, сгенерированный моделью, работает так, как задумано.
Он включает в себя 164 задачи по программированию и модульные тесты для каждой из них. Примеры были написаны вручную, чтобы гарантировать, что они не являются частью обучающего набора данных для каких-либо моделей генерации кода. Задачи состоят из сигнатур методов Python и естественного текста (комментариев, строк документации) на английском языке. Задачи в этом бенчмарке охватывают ряд областей, начиная от алгоритмов и заканчивая пониманием ключевых особенностей языка Python.
Этот бенчмарк оценивает реализацию ответа LLM, проверяя, проходит ли она соответствующие тестовые случаи. Он использует метрику Pass@k для измерения производительности модели (генерируя k примеров кода и измеряя скорость успешного прохождения предоставленных модульных тестов). Поскольку модели становятся все более и более мощными, стало обычной практикой оценивать их с помощью Pass@1, а это означает, что у LLM есть только один шанс решить каждую задачу.
HumanEval помогает определить модели, которые действительно могут решать задачи, а не просто выдавать код, на котором они были обучены. Первоначально он был представлен для Python, но с тех пор сообщество выпустило версии для других языков программирования. Ниже представлены доступные ответвления:
HumanEval-X содержит 820 образцов данных, написанных человеком, с соответствующими тестовыми примерами на Python, C++, Java, JavaScript и Go
HumanEval-XL содержит 80 задач на 23 различных естественных языках и 12 языках программирования: Python, Java, Go, Kotlin, PHP, Ruby, Scala, JavaScript, C#, Perl, Swift и TypeScript
EvalPlus предлагает в 80 раз больше тестов, чем оригинальный HumanEval
DevQualityEval
Выпущен: первый выпуск в апреле 2024 г., новый выпуск — каждый месяц
Общее количество задач: варьируется
Языки программирования: Go, Java, Ruby (количество увеличивается с каждым выпуском)
Проверка результатов: метрики качества статического и динамического анализа
DevQualityEval разделяет разработку программного обеспечения на отдельные подзадачи:
Задачи «написания теста» просят модель написать тесты для фрагмента кода.
Задачи «исправления кода» требуют, чтобы модель исправила фрагмент кода, в котором есть ошибки времени компиляции.
Задачи «транспилирования» требуют, чтобы модель преобразовала исходный код с одного языка на другой.
Бенчмарк периодически обновляется новыми задачами, моделями и их результатами. Таблица лидеров содержит подробные результаты и визуализированные данные, которые помогут подобрать наилучшую модель для вашего варианта использования.
Результаты проверяются автоматически с помощью статического и динамического анализа, например, путем динамической генерации тестов и их выполнения. Модели оцениваются по балльной системе на основе метрик качества (например, предоставление компилируемого кода, достижение достаточного покрытия сгенерированным тестовым кодом и т. д.).
Бенчмарк также измеряет время обработки, необходимое для генерации ответов, и подсчитывает количество символов в ответах модели, чтобы выделить модели, которые предоставляют короткие и эффективные ответы.
DevQualityEval поддерживает любую конечную точку вывода, реализующую API вывода OpenAI, и работает на Linux, Mac и Windows.
Подробный обзор: ознакомьтесь с последними результатами DevQualityEval
ClassEval
Документ | GitHub | Набор данных
Выпущен: август 2023 г.
Общее количество задач: 100
Языки программирования: Python
Проверка результатов: модульные тесты (в среднем 33,1 тестовых случая на пример)
ClassEval — это вручную созданный набор данных, содержащий 100 классов Python с задачами кодирования (100 классов и 410 методов). Он бросает вызов моделям с генерацией кода, охватывающей логику целого класса, а не только одной функции. ClassEval также предоставляет тесты (если быть точным, в среднем 33,1 тестовых случая на класс).
Задачи выбираются из широкого спектра тем (системы управления, форматирование данных, математические операции, разработка игр, обработка файлов, операции с базами данных и обработка естественного языка). Набор данных учитывает зависимости библиотек, полей и методов, а также отдельные методы.
SWE-bench
Документ | GitHub | Набор данных
Выпущен: октябрь 2023 г.
Общее количество задач: 2294
Языки программирования: Python
Проверка результатов: модульные тесты (в зависимости от PR)
SWE-bench содержит более 2000 реальных задач GitHub и PR из 12 популярных репозиториев Python. Решение этих задач требует от LLM понимания описания задачи и координации изменений в нескольких функциях, классах и файлах. Модели должны взаимодействовать со средами выполнения, обрабатывать широкие контексты и выполнять рассуждения, которые превосходят уровень задач генерации кода, обнаруженных в большинстве бенчмарков. Изменения, внесенные моделью, затем проверяются с помощью модульных тестов.
Aider
GitHub | Таблица лидеров
Выпущен: июнь 2023 г.
Общее количество задач: 202
Языки программирования: Python
Проверка результатов: модульные тесты
Aider — это решение с открытым исходным кодом. В основном бенчмарк позволяет использовать модели в качестве парного программирования в вашем терминале. Создатель Aider Пол Готье пояснил, что этим решением он хотел помочь пользователям выбирать между подавляющим большинством доступных моделей. Оценка фокусируется на том, насколько эффективно можно использовать LLM для перевода запроса на кодирование на естественном языке в код, который затем проходит модульные тесты. Доступны два типа бенчмарков: редактирование кода и рефакторинг кода.
133 задачи по редактированию кода, включенные в бенчмарк, представляют собой небольшие проблемы с кодированием, основанные на упражнениях Python Exercism. Ответы моделей проверяются с помощью дополнительных модульных тестов, и у модели даже есть один шанс исправить потенциальные ошибки, если тесты не будут пройдены с первого раза.
89 задач по рефакторингу кода были выбраны для представления нетривиальных рефакторингов из 12 популярных репозиториев Python. Задача всегда заключается в рефакторинге метода класса в отдельный метод, а корректность грубо проверяется с помощью одного модульного теста на рефакторинг.
Aider предлагает собственную таблицу лидеров, чтобы вы могли отслеживать прогресс различных моделей.
BigCodeBench
Документ | GitHub | Набор данных
Выпущен: июнь 2024 г.
Общее количество задач: 1140
Языки программирования: Python
Проверка результатов: модульные тесты (в среднем 5,6 тестовых случаев на пример)
BigCodeBench называют новым поколением HumanEval. Он создан для генерации кода на уровне функций с практическими и сложными задачами кодирования. По сравнению с HumanEval он содержит более сложные инструкции и множество вызовов функций. Он включает в себя 1140 задач функционального уровня и позволяет LLM вызывать функции в 139 библиотеках. Каждая задача включает в среднем 5,6 тестовых случаев. BigCodeBench предоставляет примеры, сгенерированные LLM с открытым исходным кодом.
DS-1000
Документ | GitHub | Набор данных
Выпущен: ноябрь 2022 г.
Общее количество задач: 1000
Языки программирования: Python
Проверка результатов: модульные тесты (в среднем 1,6 тестовых случая на пример)
DS-1000 является результатом сотрудничества исследователей из нескольких известных университетов (включая Университет Гонконга, Стэнфорд и Калифорнийский университет в Беркли) и Meta AI. Это бенчмарк Python; он служит для сценариев использования научных данных и основан на реальных вопросах StackOverflow (451 из них, если быть точным).
Задачи немного изменены по сравнению с оригинальными задачами на StackOverflow, поэтому модули не могут запоминать правильные решения с помощью предварительного обучения. Цель бенчмарка — отразить разнообразный набор реалистичных и практических сценариев использования: все это в сумме составляет 1000 задач, охватывающих 7 популярных (Python) библиотек научных данных.
MBPP
Документ | GitHub | Набор данных
Выпущен: август 2021 г.
Общее количество задач: 974
Языки программирования: Python
Проверка результатов: модульные тесты (3 тестовых случая на задачу)
MBPP (набор данных базовых задач Python) был разработан Google. Он содержит около 1000 краудсорсинговых задач программирования на Python, которые достаточно просты для начинающих программистов Python (включая основы программирования, стандартную функциональность библиотеки и т. д.). Набор данных содержит описание, решение кода и 3 автоматизированных тестовых случая для каждой задачи.
MultiPL-E
Документ | GitHub | Набор данных
Выпущен: август 2022 г.
Общее количество задач: ~530 (на язык)
Языки программирования: Clojure, C++, C#, D, Elixir, Go, Haskell, Java, Julia, JavaScript, Lua, ML, PHP, Perl, R, Ruby, Racket, Rust, Scala, Bash, Swift, TypeScript
Проверка результатов: модульные тесты (в среднем 6,3 тестовых случая на пример)
Аббревиатура расшифровывается как «Мультипрограммная оценка крупных языковых моделей кода». Это система предназначена для перевода бенчмарков генерации нейронного кода на основе модульных тестов на новые языки. Она поддерживает 22 языка программирования, а также имеет тесты перевода самих моделей. Основанная на HumanEval и MBPP от OpenAI, MultiPL-E использует компиляторы для их перевода на другие языки. Этот бенчмарк является частью BigCodeBench, и это самый простой способ его использования;, но вы также можете использовать его напрямую.
APPS
Документ | GitHub | Набор данных
Выпущен: май 2021 г.
Общее количество задач: 10 000
Языки программирования: Python
Проверка результатов: модульные тесты (в среднем 13,2 тестовых случая на пример)
APPS содержит задачи, взятые с различных сайтов по кодированию с открытым доступом (Codeforces, Kattis и т. д.). Цель APPS — отразить оценку программистов-людей; задачи по кодированию представлены на естественном языке.
Набор данных содержит 10 000 задач (с 131 836 соответствующими тестовыми случаями и 232 444 написанными человеком решениями). Задачи в APPS варьируются от задач начального уровня до сложных задач соревновательного уровня. Средняя длина задачи в APPS составляет 293,2 слова, поэтому задачи могут быть довольно сложными. APPS направлен на измерение как способностей к кодированию, так и решения задач.
CodeXGLUE
Документ | GitHub | Набор данных
Выпущен: февраль 2021 г.
Общее количество задач: 10 (по 14 наборам данных)
Языки программирования: C/C++, C#, Java, Python, PHP, JavaScript, Ruby, Go
Проверка результатов: включенные тесты
CodeXGLUE — это бенчмарк оценки общего понимания языка для КОДА. Он содержит 14 наборов данных для 10 задач, связанных с программированием. Бенчмарки охватывают множество сценариев:
код-код (обнаружение клонов, поиск кода, обнаружение дефектов, автодополнение кода, исправление кода и перевод кода в код)
текст-код (поиск кода на естественном языке, генерация текста в код)
код-текст (суммирование кода)
текст-текст (перевод документации)
Чтобы оценить свою модель на этом тестовом наборе, отправьте ее разработчикам бенчмарка.
Сравнение бенчмарков LLM для генерации кода
Чтобы написать эту статью, мы рассмотрели множество бенчмарков, которые сосредоточены исключительно на производительности LLM для задач, связанных с разработкой программного обеспечения. Весь прогресс, достигнутый за последние несколько лет, удивителен, однако в этой области есть некоторые явные недостатки из-за проблем, которые являются уникальными для разработки программного обеспечения:
Разнообразие языков программирования
Python — это язык машинного обучения, поэтому неудивительно, что многие бенчмарки генерации кода сосредоточены на Python. Однако в отрасли используется не один, а огромное количество языков программирования.
К счастью, уже есть некоторые бенчмарки, которые сосредоточены на языках, отличных от Python. Поскольку производительность языка может различаться, конечной целью должно быть создание единого стандартного бенчмарка, который сможет подсказать нам, разработчикам, какая модель является лучшей для выбранного нами языка.
Количество примеров
В теории, чем больше примеров оценки, тем лучше. Однако на практике оценка LLM обходится дорого, поэтому необходимо оценивать множество перспективных моделей. Должен быть баланс между наличием достаточного количества примеров для оценки возможностей модели и наличием слишком большого количества примеров до такой степени, чтобы они не добавляли никакой ценности (например, HumanEval содержит пример, который просто требует сложения двух чисел).
Проверка и оценка
Практически в любом бенчмарке проверка результатов модели основана на модульных тестах, которые необходимо пройти. Были случаи, когда наборы модульных тестов популярных бенчмарков оказывались неполными или неверными, поэтому крайне необходимо обеспечивать корректность тестов.
Хотя модульные тесты являются отличным способом автоматизации проверки, они не оценивают качество созданного кода. Каждый программист, который регулярно обозревает код, знает, что многое может пойти не так несмотря на прохождение тестов (например, плохой дизайн кода, вводящие в заблуждение наименования или комментарии, отсутствие документации, плохая оптимизация и т. д.).
Необходимы дополнительные оценки, которые учитывают качество кода, сгенерированного LLM. Кроме того, некоторые метаметрики могут играть большую роль в том, как вы оцениваете кандидата для бенчмаркинга. Например, стоимость модели или тот факт, что веса модели являются открытыми исходными кодами, не учитываются при оценке любого из представленных бенчмарков.
Разнообразие задач
В основе разработки программного обеспечения лежит программирование. Поэтому естественно, что большинство бенчмарков, которые мы представили в этой статье, сосредоточены на генерации кода. Однако реальные навыки, необходимые разработчику программного обеспечения, гораздо более разнообразны.
Написание или обзор нового кода, рефакторинг старого кода, планирование и интеграция нового поведения в разных масштабах, написание тестов на разных уровнях, чтение документации и использование фреймворков, поиск и исправление ошибок, поддержка документации, поддержка сервисов и развертываний — вот лишь несколько примеров. Бенчмаркинг LLM, касающийся только генерации кода, позволяет увидеть лишь часть более широкой картины разработки программного обеспечения.
Устаревшее состояние
Почти все представленные нами бенчмарки были проверены всего один раз при создании, а затем названы «готовыми». Однако разработка программного обеспечения — очень активная профессия, и почти каждый день появляются новые инструменты и методы. Бенчмаркинг не должен быть «снимком» того, насколько хорошо модель решала какую-то задачу несколько лет назад; это должна быть активная таблица лидеров, которая отображает наилучшую модель для использования прямо сейчас.
Таблица лидеров DevQualityEval
Бенчмарк оценки DevQualityEval и фреймворк для сравнения и развития качества генерации кода LLM. Таблица лидеров периодически обновляется новыми задачами, моделями и их результатами.