HumanEval¶
HumanEval — это набор данных и бенчмарк (эталонный тест) для оценки способности больших языковых моделей (LLM) генерировать программный код на языке Python. Разработанный исследователями из OpenAI, HumanEval предназначен для измерения функциональной корректности кода, а не его стиля или синтаксической правильности. В отличие от многих других бенчмарков, основанных на сравнении с эталонными ответами, HumanEval проверяет, решает ли сгенерированная программа поставленную задачу, проходя набор заранее написанных тестов.
¶История создания
HumanEval был впервые представлен в 2021 году в статье «Evaluating Large Language Models Trained on Code» (оценка больших языковых моделей, обученных на коде) группой исследователей OpenAI, включая Марка Чена, Джерри Творска и других. Работа была опубликована на платформе arXiv и стала важным шагом в развитии методов оценки генерации кода.
До появления HumanEval оценка моделей генерации кода часто основывалась на метриках, заимствованных из машинного перевода (например, BLEU). Эти метрики измеряли лексическое сходство между сгенерированным и эталонным кодом, но не учитывали, выполняет ли код свою функцию. HumanEval был создан для преодоления этого ограничения, предлагая подход, ориентированный на функциональную корректность.
¶Структура и состав набора данных
HumanEval состоит из 164 задач по программированию. Каждая задача включает в себя:
- Описание задачи: текстовое описание на естественном языке (английском), формулирующее, что должна делать функция.
- Сигнатура функции: объявление функции на Python с указанием имени, параметров и возвращаемого типа (с использованием аннотаций типов).
- Документирующая строка (docstring): описание задачи, часто содержащее примеры использования.
- Набор тестовых примеров: от 5 до 50 тестов, проверяющих корректность работы функции на различных входных данных. Тесты включают как простые случаи, так и граничные условия.
¶Пример задачи
Задача: написать функцию, которая возвращает наибольшее число из трёх переданных целых чисел.
Сигнатура функции: ``python def max_of_three(a: int, b: int, c: int) -> int: ``
Документирующая строка: `` """Return the largest of three integers.""" ``
Тестовые примеры: ``python assert max_of_three(1, 2, 3) == 3 assert max_of_three(5, 5, 5) == 5 assert max_of_three(-1, -10, 0) == 0 ``
¶Методология оценки
Оценка модели с помощью HumanEval проводится следующим образом:
- Генерация кода: модели подаётся текстовое описание задачи, и она генерирует код функции.
- Выполнение тестов: сгенерированный код запускается в изолированной среде (песочнице) с использованием всех тестовых примеров, входящих в задачу.
- Подсчёт pass@k: основная метрика — pass@k. Она измеряет вероятность того, что хотя бы один из k сгенерированных моделью вариантов кода пройдёт все тесты. Наиболее часто используемые значения — pass@1 (один вариант) и pass@100 (из 100 вариантов). Для уменьшения статистической погрешности при расчёте pass@k применяется несмещённая оценка.
¶Особенности методологии
- Функциональная корректность: код считается правильным только если он проходит все тесты. Частичное выполнение тестов не засчитывается.
- Изоляция: код выполняется в безопасной среде, чтобы предотвратить выполнение вредоносных операций или бесконечных циклов, которые могут нарушить работу системы.
- Отсутствие утечки данных: задачи HumanEval были специально разработаны так, чтобы они не встречались в открытых репозиториях кода, используемых для обучения моделей. Это снижает риск «заучивания» ответов.
¶Применение
HumanEval стал стандартным бенчмарком для оценки и сравнения языковых моделей, способных генерировать код. Он используется для:
- Сравнения моделей: исследователи и компании используют HumanEval для демонстрации превосходства своих моделей над конкурентами. Например, результаты на HumanEval часто приводятся в статьях о GPT-4, Codex, Gemini, Claude и других моделях.
- Отслеживания прогресса: улучшение результатов на HumanEval со временем отражает общий прогресс в области генерации кода.
- Оценки влияния техник обучения: бенчмарк позволяет оценить эффективность различных методов, таких как fine-tuning (дообучение), instruction tuning (настройка по инструкциям) и reinforcement learning from human feedback (RLHF, обучение с подкреплением на основе обратной связи от человека).
¶Критика и ограничения
Несмотря на широкое распространение, HumanEval имеет ряд критических замечаний и ограничений:
- Небольшой размер: 164 задачи — это относительно небольшой набор данных, что может привести к высокой статистической погрешности при оценке. Небольшие различия в результатах между моделями могут быть незначимыми.
- Ограниченный язык: бенчмарк оценивает только генерацию кода на Python. Он не измеряет способность модели работать с другими языками программирования (например, Java, C++, JavaScript).
- Простота задач: многие задачи HumanEval являются относительно простыми и не отражают сложность реальных задач программирования, которые могут включать работу с большими кодовыми базами, библиотеками, фреймворками и архитектурными решениями.
- Фокус на функциональной корректности: бенчмарк не оценивает другие важные аспекты кода, такие как эффективность, читаемость, безопасность, масштабируемость и соответствие стандартам кодирования.
- Потенциальная утечка данных: хотя задачи были созданы специально, существует вероятность, что некоторые из них или их вариации могли появиться в обучающих данных более поздних моделей, что ставит под сомнение объективность оценки.
- Отсутствие оценки понимания контекста: задачи представлены изолированно, без учёта более широкого контекста проекта, что не отражает реальную работу программиста, который часто работает с существующей кодовой базой.
¶Влияние и развитие
HumanEval оказал значительное влияние на область искусственного интеллекта и генерации кода. Он стимулировал разработку более совершенных моделей и методов оценки. Вслед за HumanEval появились другие бенчмарки, стремящиеся преодолеть его ограничения:
- MBPP (Mostly Basic Python Programming): набор из 974 задач на Python, также ориентированный на функциональную корректность, но с более простыми задачами.
- HumanEval-X: расширение HumanEval, включающее задачи на нескольких языках программирования (C++, Java, JavaScript, Go).
- APPS (Automated Programming Progress Standard): более сложный набор из 10 000 задач, включающий задачи с соревнований по программированию.
- CodeContests: набор данных, включающий задачи с платформы Codeforces.
- SWE-bench: бенчмарк, оценивающий способность моделей решать реальные задачи из GitHub (pull requests).
¶Источники
- Chen, M., et al. (2021). «Evaluating Large Language Models Trained on Code». arXiv:2107.03374.
- Официальный репозиторий HumanEval на GitHub (OpenAI).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →

