Бенчмарк · coding
EvalPlus
EvalPlus строго проверяет корректность кода, сгенерированного LLM, расширяя бенчмарки HumanEval и MBPP (как HumanEval+ и MBPP+) значительно бо́льшим числом тестов; метрика — pass@k (обычно pass@1).
Подробнее
- Пример
- Задача на дописывание Python-функции: по сигнатуре и docstring на естественном языке с несколькими примерами модель пишет тело функции, которое затем прогоняется по сильно расширенному набору тестов, добавляющему граничные случаи (пустой ввод, границы, большие значения), пропущенные исходным бенчмарком.
- Метрика
- Метрика — pass@k, почти всегда pass@1. Задача считается решённой, только если сгенерированный код проходит все тесты (исходные «base» плюс новые «plus»). pass@k — несмещённая оценка: при n≥k сэмплах и c верных это 1 − C(n−c, k)/C(n, k); итоговый балл — доля решённых задач по всему набору.
- Приёмка
- Каждое решение выполняется в песочнице на полном наборе base+plus с таймаутом на тест и принимается, только если проходят все проверки. Дополнительные входные данные генерируются мутацией с учётом типов и LLM-затравкой и фильтруются по проверенным эталонным решениям, поэтому вердикт «passed» означает совпадение с эталоном на каждом входе.
- Почему важно
- Исходные наборы тестов HumanEval/MBPP слишком скудны и пропускают правдоподобный, но неверный код, завышая корректность моделей; наборы EvalPlus в ~80× (HumanEval+) и ~35× (MBPP+) больше ловят такие ошибки и обычно снижают pass@1 на несколько пунктов, что делает их более надёжным стандартом оценки код-LLM.
Разбор примера
Задача
Репрезентативный элемент в стиле EvalPlus (HumanEval+) — допишите тело функции по её сигнатуре и docstring:
```python
from typing import List
def sum_even_at_odd_index(numbers: List[int]) -> int:
"""Return the sum of all even values located at odd indices.
>>> sum_even_at_odd_index([3, 8, 7, 4, 5])
12
>>> sum_even_at_odd_index([1, 3, 5])
0
"""
```
Решение
```python
def sum_even_at_odd_index(numbers: List[int]) -> int:
return sum(n for i, n in enumerate(numbers) if i % 2 == 1 and n % 2 == 0)
```
Разбор
Решение проходит по списку через enumerate, оставляет значения на нечётных индексах (i % 2 == 1), которые чётны (n % 2 == 0), и суммирует их, что соответствует обоим примерам из docstring и граничным случаям вроде пустого или полностью нечётного списка. Оценка бинарна (pass/fail): функция прогоняется по всему набору base+plus, и элемент засчитывается, только если проходят все тесты.
По этому бенчмарку пока нет проверенных результатов.