Открыть сервис

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 проводится следующим образом:

  1. Генерация кода: модели подаётся текстовое описание задачи, и она генерирует код функции.
  2. Выполнение тестов: сгенерированный код запускается в изолированной среде (песочнице) с использованием всех тестовых примеров, входящих в задачу.
  3. Подсчёт 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 →