Чтобы написать эту статью, мы рассмотрели множество бенчмарков, которые сосредоточены исключительно на производительности LLM для задач, связанных с разработкой программного обеспечения. Весь прогресс, достигнутый за последние несколько лет, удивителен, однако
в этой области есть некоторые явные недостатки из-за проблем, которые являются уникальными для разработки программного обеспечения:
Разнообразие языков программированияPython — это язык машинного обучения, поэтому неудивительно, что многие бенчмарки генерации кода сосредоточены на Python. Однако в отрасли используется не один, а
огромное количество языков программирования.
К счастью,
уже есть некоторые бенчмарки, которые сосредоточены на языках, отличных от Python. Поскольку производительность языка может различаться, конечной целью должно быть создание единого стандартного бенчмарка, который сможет подсказать нам, разработчикам, какая модель является лучшей для выбранного нами языка.
Количество примеровВ теории, чем больше примеров оценки, тем лучше. Однако на практике
оценка LLM обходится дорого, поэтому необходимо оценивать множество перспективных моделей. Должен быть баланс между наличием достаточного количества примеров для оценки возможностей модели и наличием слишком большого количества примеров до такой степени, чтобы они не добавляли никакой ценности (например,
HumanEval содержит пример, который просто требует сложения двух чисел).
Проверка и оценкаПрактически в любом бенчмарке проверка результатов модели основана на модульных тестах, которые необходимо пройти. Были случаи, когда
наборы модульных тестов популярных бенчмарков оказывались неполными или неверными, поэтому крайне необходимо обеспечивать корректность тестов.
Хотя модульные тесты являются отличным способом автоматизации проверки, они не оценивают качество созданного кода. Каждый программист, который регулярно обозревает код, знает, что многое может пойти не так несмотря на прохождение тестов (например, плохой дизайн кода, вводящие в заблуждение наименования или комментарии, отсутствие документации, плохая оптимизация и т. д.).
Необходимы
дополнительные оценки, которые учитывают качество кода, сгенерированного LLM. Кроме того, некоторые
метаметрики могут играть большую роль в том, как вы оцениваете кандидата для бенчмаркинга. Например, стоимость модели или тот факт, что веса модели являются открытыми исходными кодами, не учитываются при оценке любого из представленных бенчмарков.
Разнообразие задачВ основе разработки программного обеспечения лежит программирование. Поэтому естественно, что большинство бенчмарков, которые мы представили в этой статье, сосредоточены на генерации кода. Однако
реальные навыки, необходимые разработчику программного обеспечения, гораздо более разнообразны.
Написание или обзор нового кода, рефакторинг старого кода, планирование и интеграция нового поведения в разных масштабах, написание тестов на разных уровнях, чтение документации и использование фреймворков, поиск и исправление ошибок, поддержка документации, поддержка сервисов и развертываний - вот лишь несколько примеров. Бенчмаркинг LLM, касающийся только генерации кода, позволяет увидеть лишь часть более широкой картины разработки программного обеспечения.
Устаревшее состояниеПочти все представленные нами бенчмарки были проверены всего один раз при создании, а затем названы «готовыми». Однако разработка программного обеспечения - очень активная профессия, и почти каждый день появляются новые инструменты и методы. Бенчмаркинг
не должен быть «снимком» того, насколько хорошо модель решала какую-то задачу несколько лет назад; это должна быть активная таблица лидеров, которая отображает наилучшую модель для использования прямо сейчас.