Перейти к содержимому
Ступень 77.3 Оценка моделей

Бенчмарки и их ловушки

Что на самом деле измеряют MMLU, GSM8K, HumanEval, SWE-bench, C-Eval и MERA, почему одно число на лидерборде стоит меньше, чем кажется, и как распознать контаминацию и подгонку под лидерборд («шуабан»).

УРОКstage-7/7-3-evaluation/01-benchmarks.mdx1 ч 40 минУрок 1 из 2
После урока вы сможете
  • Объяснить, из чего состоит бенчмарк (задачи, формат промпта, извлечение ответа, метрика) и почему одна модель получает на нём разные числа
  • Ориентироваться в главных бенчмарках — знания, математика, код, агенты, китайские и русские — и понимать, что проверяет каждый
  • Посчитать доверительный интервал для результата на бенчмарке и отличить реальное улучшение от шума
  • Распознать контаминацию и подгонку под лидерборд и проверить вопросы бенчмарка на n-граммное пересечение с корпусом

Откройте любой техотчёт — DeepSeek-V3, Qwen3, Kimi K2. На второй-третьей странице будет большая таблица: столбцы — модели, строки — MMLU, GSM8K, HumanEval, C-Eval и ещё два десятка названий, лучшие числа выделены жирным. По этим таблицам выбирают модель для проекта, решают, стоит ли переходить на новую версию, и пишут новости «модель X обогнала модель Y».

В этом модуле вы научитесь читать такие таблицы критически. В уроке 2.2.3 вы узнали, что метрика — это не loss и что работает закон Гудхарта. Теперь посмотрим, как это выглядит в мире LLM. Число на лидербордлидерборд (рейтинговая таблица)EN leaderboardТаблица моделей, отсортированных по результату на бенчмарке или по голосам людей. Полезна для обзора, опасна как единственная цель (закон Гудхарта). зависит от десятка мелких решений, его точность ограничена размером теста, а сама задача могла давно утечь в обучающие данные. После урока вы сможете сказать, что значит «+1.5 балла на MMLU» и когда этому можно верить.

Это нужно и для выпускного проекта (модуль 10.1): вы будете сравнивать свою модель до и после SFT, GRPO и квантования. Если не понимать, где кончается сигнал и начинается шум, легко принять случайность за успех.

бенчмаркбенчмаркEN benchmark — это не просто «набор вопросов». Это четыре части, и каждая влияет на итоговое число:

  1. Задачи — вопросы с эталонными ответами (или тестами для кода).
  2. Формат промпта — сколько примеров показать перед вопросом (0-shot, 5-shot), просить ли рассуждение (CoT), какой chat-шаблон использовать.
  3. Извлечение и проверка ответа — как найти ответ в тексте модели («Ответ: B», «#### 42», код в блоке) и сравнить с эталоном.
  4. Метрика — accuracy, точное совпадениеточное совпадение (EM)EN exact matchМетрика «1, если нормализованный ответ совпал с эталоном, иначе 0». Всё решает нормализация и извлечение ответа., pass@k, доля побед в парных сравнениях; плюс правило усреднения (по вопросам, по предметам, по нескольким сэмплам).
flowchart LR
A["Задача из набора"] --> B["Промпт: шаблон, few-shot, CoT"]
B --> C["Модель: greedy или сэмплирование, T, top-p"]
C --> D["Извлечение ответа: регулярка, парсер, LLM"]
D --> E["Сравнение с эталоном или тесты"]
E --> F["Метрика и усреднение"]
F --> G["Одно число в таблице"]
Каждая стрелка — место, где два честных исследователя могут получить разные числа

Поэтому у одной и той же модели в разных отчётах встречаются разные числа на «одном и том же» бенчмарке. В уроках 2.2.3 и 6.4.2 вы видели пример DeepSeek-R1: pass@1, усреднённый по нескольким сэмплам, и точность голосования большинством (self-consistencyсамосогласованность (голосование большинством)EN self-consistency (majority voting)Сгенерировать N ответов и выбрать самый частый итоговый. В отчётах — maj@k или cons@k., cons@64) у R1-Zero на AIME 2024 — 71.0% и 86.7%, почти 16 п.п. разницы (п.п. — процентные пункты: разность двух процентов, 86.7−71.0=15.786.7 - 71.0 = 15.7). Правило для чтения: число без протокола ничего не значит. Ищите сноску с настройками.

Как модель сдаёт тест с вариантами ответа

Заголовок раздела «Как модель сдаёт тест с вариантами ответа»

Большинство бенчмарков на знания (MMLU, C-Eval, CMMLU) — вопросы с четырьмя вариантами. Проверить ответ можно двумя способами:

  • По правдоподобию. Модель ничего не генерирует. Считаем лог-вероятность каждого варианта (или буквы A/B/C/D) после вопроса и берём максимум. Так удобно оценивать базовые моделибазовая модельEN base model: они ещё не умеют следовать инструкциям «ответь одной буквой».
  • По генерации. Чат-модель пишет ответ (часто с рассуждением), а парсер ищет в нём букву. Если модель написала «Правильный ответ — второй», регулярка его не найдёт, и это засчитают как ошибку.

У обоих способов есть скрытая ловушка — позиционная привычка. Слабая модель, которая «не знает — пишет A», получает бонус каждый раз, когда правильный ответ стоит на месте A. Китайская команда MMBench (Shanghai AI Lab) предложила CircularEval: вопрос задают четыре раза, циклически сдвигая варианты, и засчитывают его, только если модель права во всех четырёх прогонах. Сравним на симуляции:

import random
random.seed(0)
N = 2000 # вопросов с 4 вариантами
knows = [random.random() < 0.5 for _ in range(N)] # модель реально знает половину ответов
gold = [random.randrange(4) for _ in range(N)] # позиция правильного варианта: 0=A … 3=D
def model(i, correct_pos):
"""Знает ответ — выбирает его. Не знает — по привычке отвечает «A»."""
return correct_pos if knows[i] else 0
def guesser(i, correct_pos):
return random.randrange(4)
def vanilla(m):
return sum(m(i, gold[i]) == gold[i] for i in range(N)) / N
def circular(m):
"""CircularEval: 4 циклических сдвига вариантов, засчитываем только если верно ВО ВСЕХ."""
ok = 0
for i in range(N):
ok += all(m(i, (gold[i] + s) % 4) == (gold[i] + s) % 4 for s in range(4))
return ok / N
for name, m in [("модель с привычкой «A»", model), ("случайный угадыватель", guesser)]:
print(f"{name:24} обычная: {vanilla(m):.3f} circular: {circular(m):.3f}")
модель с привычкой «A» обычная: 0.615 circular: 0.499
случайный угадыватель обычная: 0.239 circular: 0.004

Обычная accuracy добавила модели 11.6 п.п. за угадывание. CircularEval вернула честные 50%, а случайного угадывателя опустила почти до нуля (вероятность угадать 4 раза подряд — 0.254≈0.0040.25^4 \approx 0.004). Цена — в 4 раза больше запросов.

Бенчмарков сотни. Ниже — те, что встречаются почти в каждом техотчёте, и те, что важны нам как русско- и китаеязычным инженерам.

БенчмаркЧто проверяетРазмер и форматМетрика
MMLU (2020)знания по 57 предметам — от школьной математики до права и медицины14 042 тестовых вопроса, 4 вариантаaccuracy; случайный уровень 25%
MMLU-Pro (2024)то же, но сложнее и с упором на рассуждение10 вариантов ответаaccuracy; случайный уровень 10%
GSM8K (2021)школьные текстовые задачи на 2–8 действий1 319 задач в тесте, ответ — число после ####exact match по числу
MATH / MATH-500олимпиадная математика, 7 разделов, 5 уровней5 000 задач в тесте; MATH-500 — подвыборка из 500exact match по выражению
AIMEамериканская олимпиада: ответ — целое от 0 до 99930 задач в годpass@1 по многим сэмплам
GPQA Diamondвопросы уровня аспирантуры по физике, химии, биологии, которые трудно нагуглить198 вопросов, 4 вариантаaccuracy
HumanEval (2021)написать функцию на Python по докстрингу164 задачи с юнит-тестамиpass@k (урок 7.3.2)
LiveCodeBenchсвежие задачи с LeetCode, AtCoder, Codeforces с датой публикациипостоянно пополняетсяpass@1 на задачах после даты среза модели
SWE-bench Verifiedисправить реальный issue в Python-репозитории500 задач (из 2 294 исходных), проверенных людьмидоля задач, где проходят скрытые тесты
C-Eval (2023)знания на китайском: 52 дисциплины, 4 уровня — от средней школы до профессионального13 948 вопросов, 4 варианта, ответы теста закрытыaccuracy
CMMLU (2023)67 тем, включая специфически китайские (например, правила дорожного движения КНР)4 вариантаaccuracy
MERA (2023–)русский язык: знания (ruMMLU), код (ruHumanEval), ЕГЭ по русскому (USE), вопросы «Что? Где? Когда?» (CheGeKa), логика, этикав статье 21 задача, в текущей версии 23; ответы теста закрытысвоя для каждой задачи + общий балл
Chatbot Arenaкакой ответ нравится людям большемиллионы анонимных попарных голосоврейтинг Брэдли–Терри

Несколько пояснений к таблице.

Знания (MMLU, C-Eval, CMMLU, ruMMLU) — тесты с вариантами. Дёшевы и стабильны, но меряют скорее эрудицию, чем умение решать задачи. Национальные версии нужны не только из-за языка: в CMMLU есть вопросы, правильный ответ на которые зависит от китайских реалий, и англоязычная модель ошибётся на них даже при идеальном переводе.

Математика (GSM8K, MATH, AIME) — ответ проверяется автоматически, поэтому именно на таких задачах обучают рассуждающие модели с проверяемой наградойпроверяемое вознаграждениеEN verifiable reward (RLVR) (модуль 6.4). Оборотная сторона: на них же сильнее всего давление «шуабан» — подгонки под лидерборд.

Код. HumanEval сделал стандартом проверку кода запуском тестов, а не сравнением текста. В статье о Codex модель на 12B решала 28.8% задач с одной попытки и 70.2% — если разрешить 100 попыток на задачу. Отсюда метрика pass@k, которую вы реализуете в следующем уроке. SWE-bench — следующий уровень: агент получает целый репозиторий и описание бага (урок 8.3.4).

Люди (Chatbot Arena) — единственный пункт без фиксированного набора задач. Его разберём отдельно.

Бенчмарк — это выборка вопросов (подробно о выборке, стандартной ошибке и доверительных интервалах — в уроке 1.3.4; здесь коротко напомним главное). Если бы авторы MMLU выбрали другие 14 тысяч вопросов того же типа, accuracy модели немного изменилась бы. Насколько? Каждый ответ — «монетка» с вероятностью успеха pp, поэтому разброс доли верных ответов описывает стандартная ошибкастандартная ошибкаEN standard errorСтандартное отклонение оценки метрики из-за конечного числа вопросов. Для доли — √(p(1−p)/n).:

SE=p(1−p)n,95% интервал≈p±1.96⋅SE\mathrm{SE} = \sqrt{\frac{p(1-p)}{n}}, \qquad \text{95\% интервал} \approx p \pm 1.96\cdot\mathrm{SE}

Что здесь написано. Каждый ответ — испытание Бернулли (урок 1.3.1), а доля верных ответов при большом nn распределена почти нормально со стандартным отклонением SE. По правилу «68–95–99.7» из того же урока в пределах двух стандартных отклонений лежит около 95% значений; точнее множитель равен 1.96. Пример: p=0.5p = 0.5, n=164n = 164 (HumanEval): SE=0.25/164≈0.039\mathrm{SE} = \sqrt{0.25 / 164} \approx 0.039, полуширина интервала 1.96⋅0.039≈0.0771.96 \cdot 0.039 \approx 0.077, то есть ±7.7 п.п. Чем больше вопросов nn, тем меньше разброс — но только как 1/n1/\sqrt{n}. Чтобы сузить доверительный интервалдоверительный интервалEN confidence intervalДиапазон вокруг измеренного значения метрики, построенный так, что при многократном повторении эксперимента он накрывает истинное значение с заданной частотой (обычно 95%). Для доли верных ответов ≈ p ± 1.96·√(p(1−p)/n). вдвое, вопросов нужно вчетверо больше. Посчитаем для реальных размеров:

import math
def ci(p, n):
se = math.sqrt(p * (1 - p) / n) # стандартная ошибка доли
return se, 1.96 * se # полуширина 95% интервала
benchmarks = [("AIME 2024", 30, 0.50), ("HumanEval", 164, 0.50), ("GPQA Diamond", 198, 0.60),
("MATH-500", 500, 0.90), ("GSM8K (test)", 1319, 0.80), ("MMLU (test)", 14042, 0.70)]
print(f"{'бенчмарк':14} {'n':>6} {'p':>5} {'±95% (п.п.)':>12}")
for name, n, p in benchmarks:
se, h = ci(p, n)
print(f"{name:14} {n:6d} {p:5.2f} {100*h:12.1f}")
бенчмарк n p ±95% (п.п.)
AIME 2024 30 0.50 17.9
HumanEval 164 0.50 7.7
GPQA Diamond 198 0.60 6.8
MATH-500 500 0.90 2.6
GSM8K (test) 1319 0.80 2.2
MMLU (test) 14042 0.70 0.8

Выводы из этой таблицы стоит запомнить:

  • Интервал разницы шире интервала каждой модели. Если две модели оценены независимо, стандартная ошибка их разницы в 2≈1.4\sqrt{2} \approx 1.4 раза больше (дисперсии независимых величин складываются: SE2+SE2=2⋅SE\sqrt{\mathrm{SE}^2 + \mathrm{SE}^2} = \sqrt{2} \cdot \mathrm{SE}): на MMLU это уже ±1.1 п.п. Поэтому разница в 0.5 п.п. на MMLU — в пределах шума, а 3 п.п. на HumanEval (интервал разницы около ±11 п.п.) — тем более.
  • AIME с его 30 задачами даёт интервал ±18 п.п. (это оценка для одной попытки на задачу). DeepSeek-R1 сэмплирует на каждую задачу несколько ответов с температурой и усредняет — это заметно уменьшает шум сэмплирования. Но шум выбора задач остаётся: задач всё равно 30. Модель «на 5 п.п. лучше на AIME» может не быть лучше вообще.
  • Правильнее сравнивать две модели на одних и тех же вопросах (парный тест). Он точнее, чем сравнение двух отдельных интервалов, — как это сделать бутстрэпом, увидите в следующем уроке.

загрязнение данныхзагрязнение данных (утечка бенчмарка в обучение)EN data contaminationЗадачи из тестового бенчмарка попали в обучающий корпус LLM — оценка становится завышенной. Родственное явление — «шуабан», подгонка модели под лидерборд. — тестовые задачи попали в обучающие данные. Вы уже встречали её в уроке 2.1.2 как частный случай утечки. С LLM это происходит почти неизбежно: бенчмарки лежат на GitHub и Hugging Face, их разбирают на форумах и в блогах, решения публикуют в задачниках. Претрейн на триллионах токенов из интернета всё это проглатывает, даже если никто не хотел жульничать.

Как контаминацию обнаруживают:

  1. N-граммное пересечение. Ищем длинные куски вопроса в обучающем корпусе. Авторы GPT-3 проверяли совпадения по 13-граммам. Метод требует доступа к корпусу, поэтому годится разработчикам модели, а не внешним проверяющим.
  2. Свежий двойник теста. Делают новые задачи того же стиля и сложности и сравнивают точность. Scale AI в 2024 году собрала GSM1k — 1 250 новых задач в духе GSM8K, написанных людьми без помощи LLM. У части семейств моделей (авторы называют Mistral и Phi) точность на новых задачах систематически падала, до ~10 п.п. У фронтирных моделей падения почти не было.
  3. Сравнение loss. Если обучающих данных нет, сравнивают перплексияперплексияEN perplexity модели на тесте и на свежем двойнике. Модель, которая видела тест, «узнаёт» его — loss на нём заметно ниже (подробно в «Китайском углу»).
  4. Разделение по времени. LiveCodeBench хранит дату публикации каждой задачи. Модель с датой среза знаний в марте честно оценивают только на задачах после марта. Если точность резко падает именно на этой границе — тревожный знак.
  5. Закрытый тест. C-Eval и MERA не публикуют ответы тестовой части. Вы отправляете предсказания, сервер возвращает балл. Выучить ответы так нельзя. Но сами вопросы открыты, и их можно, например, разметить вручную.

Есть и профилактика для авторов бенчмарков — канареечная строка: уникальная строка-маркер в файлах набора (так сделано в BIG-bench). Разработчики корпусов фильтруют документы, где она встречается. А если модель умеет воспроизвести такую строку, значит, файлы бенчмарка попали в её обучающие данные.

Мини-детектор n-граммного пересечения пишется за десять строк. Проверим три задачи «бенчмарка» по маленькому «корпусу»:

import re
def words(text):
"""Нижний регистр, только буквы и цифры — так перефразы пунктуацией не спасают."""
return re.findall(r"\w+", text.lower()) # \w+ — подряд идущие буквы, цифры и «_», то есть слова
def ngrams(tokens, n):
return {tuple(tokens[i:i + n]) for i in range(len(tokens) - n + 1)}
def contamination(question, corpus_docs, n=8):
"""Доля n-грамм вопроса, которые встречаются хотя бы в одном документе корпуса."""
q = ngrams(words(question), n)
if not q:
return 0.0
seen = set()
for doc in corpus_docs:
seen |= q & ngrams(words(doc), n) # & — пересечение множеств, |= — добавить найденное в seen
return len(seen) / len(q)
benchmark = [
"У Маши было 12 яблок. Она отдала треть брату, а потом купила ещё 5. Сколько яблок у Маши теперь?",
"Поезд проехал 240 км за 3 часа. С какой средней скоростью он ехал?",
"В классе 28 учеников, девочек на 4 больше, чем мальчиков. Сколько в классе мальчиков?",
]
corpus = [
"Форум: решите задачу! у маши было 12 яблок, она отдала треть брату, а потом купила ещё 5. сколько яблок у маши теперь? Ответ 13",
"Задачник: какова средняя скорость поезда, если 240 километров он преодолел за три часа? Ответ: 80 км/ч.",
"В классе 28 учеников. Девочек на 4 больше, чем мальчиков. Сколько в классе мальчиков? Решение: (28-4)/2 = 12.",
]
for q in benchmark:
print(f"{contamination(q, corpus):5.0%} {q[:45]}…")
100% У Маши было 12 яблок. Она отдала треть брату,…
0% Поезд проехал 240 км за 3 часа. С какой средн…
100% В классе 28 учеников, девочек на 4 больше, че…

Первая и третья задачи пойманы: регистр и пунктуация не спасли. А вторая «чистая» — хотя в корпусе лежит её перефраз с тем же ответом. N-граммы ловят копипасту, но не пересказ. Для перефразов нужны эмбеддинги (урок 8.2.1) или сравнение с двойником теста, как в GSM1k.

подгонка под лидербордподгонка под лидербордEN leaderboard gaming / benchmark hackingБуквально «натирать рейтинг». Обучение на тесте или похожих данных, перебор вариантов до удачного числа, выбор удобных настроек оценки — всё, что поднимает цифру сильнее, чем умение. (по-китайски «шуабан», буквально «натирать рейтинг») — всё, что поднимает число на лидерборде сильнее, чем реальное умение. Это проявление закона Гудхартазакон ГудхартаEN Goodhart's law«Когда мера становится целью, она перестаёт быть хорошей мерой».. Формы бывают грубые и тонкие:

  • Обучение на тесте — прямое жульничество. Работа Жэньминьского университета (2023) показала: если подмешать в обучение данные бенчмарков, результаты на них резко растут, и маленькая модель может обогнать гораздо большую.
  • Обучение на «очень похожем» — на обучающей части того же бенчмарка или на синтетике, сгенерированной по его образцу. Формально тест не тронут, а умение решать «задачи вообще» выросло гораздо меньше, чем число.
  • Выбор лучшего из многих. Перебрали 30 чекпоинтов, промптов или seed’ов, опубликовали лучший по тесту. Никто не жульничал, а число завышено.
  • Выбор удобного протокола — 5-shot вместо 0-shot, maj@64 вместо pass@1, «свой» парсер ответов и сравнение с конкурентами, посчитанными по другим правилам.

Третий пункт неочевиден, поэтому проверим его симуляцией. У всех 30 вариантов модели одинаковое истинное умение — 70%:

import numpy as np
rng = np.random.default_rng(0)
n_public, n_hidden = 500, 500 # публичный тест и скрытый «свежий» тест
n_ckpt = 30 # сколько чекпоинтов/вариантов промпта перебрали
true_acc = 0.70 # у ВСЕХ вариантов одинаковое истинное умение
# Каждый вариант отвечает на вопросы случайно правильно с вероятностью 0.70
public = rng.random((n_ckpt, n_public)) < true_acc
hidden = rng.random((n_ckpt, n_hidden)) < true_acc
pub_scores = public.mean(axis=1)
best = pub_scores.argmax() # «шуабан»: выбираем лучший по публичному тесту
print(f"лучший на публичном тесте: {pub_scores[best]:.3f}")
print(f"тот же вариант на скрытом: {hidden[best].mean():.3f}")
print(f"среднее по всем вариантам: {pub_scores.mean():.3f}")
# Повторим эксперимент 2000 раз, чтобы увидеть систематическое смещение
gaps = []
for _ in range(2000):
pub = (rng.random((n_ckpt, n_public)) < true_acc).mean(axis=1)
hid = (rng.random(n_hidden) < true_acc).mean()
gaps.append(pub.max() - hid)
print(f"средний «подарок» от выбора лучшего: {100*np.mean(gaps):.1f} п.п.")
лучший на публичном тесте: 0.734
тот же вариант на скрытом: 0.718
среднее по всем вариантам: 0.699
средний «подарок» от выбора лучшего: 4.2 п.п.

Четыре пункта «улучшения» из чистого шума. Если сто команд по всему миру подбирают модели под один и тот же открытый тест, тест постепенно перестаёт быть тестом — это переобучениепереобучениеEN overfitting целого сообщества. Лекарство то же, что в уроке 2.1.2: решения принимать на валидации, а тест открывать один раз. Как то же самое перетряхивает лидерборды соревнований, как атака Блюма–Хардта поднимается в таблице, не глядя в данные, и как от неё защищает механизм Ladder — в уроке 11.4.3.

Ошибки. Бенчмарки собирают люди, иногда в спешке. Авторы работы «Are We Done with MMLU?» (2024) вручную перепроверили 5 700 вопросов MMLU и оценили, что ошибки содержат около 6.5% вопросов. В разделе по вирусологии проблемы нашлись в 57% проверенных вопросов. Когда лучшие модели набирают 90%, такие ошибки — уже заметная часть оставшейся «погрешности».

Насыщение. Как только лучшие модели упираются в потолок, бенчмарк перестаёт различать модели: все в районе 90%, а разницу определяют ошибки разметки и шум. Сообщество отвечает новыми, более сложными наборами: MMLU → MMLU-Pro → GPQA; GSM8K → MATH → AIME. Отсюда практическое правило: для сильных моделей смотрите на свежие и трудные бенчмарки, для маленьких (вашей в выпускном проекте) — на простые. Модель на 64M параметров честно покажет на MMLU уровень случайного угадывания — около 25%, и это не провал, а неверно выбранный инструмент.

Chatbot Arena запустила в 2023 году группа LMSYS (Беркли). Устроено так:

  1. Пользователь задаёт любой вопрос и получает ответы двух анонимных моделей.
  2. Он голосует: «лучше A», «лучше B», «ничья» или «оба плохи». Только после этого имена моделей раскрываются.
  3. По миллионам голосов строят рейтинг. Сначала это был рейтинг Элорейтинг ЭлоEN Elo ratingШахматный рейтинг, который пересчитывают по исходам попарных партий. В Chatbot Arena его заменили оценкой модели Брэдли–Терри по всем голосам сразу., затем перешли к оценке модели Брэдли–Терри по всем голосам сразу — той же, что лежит в основе reward model (урок 6.3.2): P(A≻B)=σ(rA−rB)P(A \succ B) = \sigma(r_A - r_B). Бутстрэпбутстрэп (выборка с возвращением)EN bootstrap samplingОснова бэггинга (bagging) и случайного леса. по голосам (много раз пересчитать рейтинг на случайных выборках голосов с возвращением и посмотреть разброс) даёт доверительные интервалы рейтинга.

Сильные стороны: настоящие вопросы настоящих людей, нет фиксированного теста, который можно выучить, оценка того, что важно пользователю. Слабые стороны проявились со временем:

  • Стиль побеждает суть. Голосующие любят длинные ответы с заголовками, списками и эмодзи. Арена ввела поправку на стиль (style control): рейтинг считают с учётом длины и разметки ответа как отдельных факторов.
  • История с Llama 4 (апрель 2025). Meta выставила на арену «экспериментальную» чат-версию Llama 4 Maverick — многословную, с эмодзи. Она заняла второе место. Публично выпущенная версия, когда её добавили отдельно, по сообщениям СМИ оказалась лишь в четвёртом десятке. После скандала арена ужесточила правила для таких вариантов.
  • «The Leaderboard Illusion» (2025). Исследователи из Cohere и соавторы показали: крупные компании могли тестировать на арене много закрытых вариантов и публиковать только лучший. По их подсчёту, перед выходом Llama 4 Meta протестировала 27 таких вариантов. Это та самая симуляция «лучший из 30», только в реальной жизни.

В 2025 году проект отделился от LMSYS в компанию LMArena, а 28 января 2026 года сменил название на просто Arena и переехал на arena.ai (анонс). Используйте её как один из сигналов, но не как истину в последней инстанции.

Чек-лист на каждую строку таблицы:

  1. Протокол. Сколько примеров (n-shot)? С CoT или без? Greedy или сэмплирование, какая температуратемпература (сэмплирования)EN temperatureЛогиты делятся на T перед softmax. T < 1 — распределение острее, T > 1 — площе, T → 0 — greedy.? pass@1 по скольким сэмплам? Если судья — LLM, то какой?
  2. Одинаковые правила для всех. Числа конкурентов посчитаны тем же кодом или взяты из чужих отчётов?
  3. Шум. Какой размер теста? Разница больше двух стандартных ошибок?
  4. Контаминация. Что авторы сделали для очистки данных? Есть ли результаты на свежих наборах (LiveCodeBench, AIME текущего года)?
  5. Кто считал. Числа самих авторов или независимая проверка (OpenCompass, MERA, Arena)?
  6. Подходит ли бенчмарк вам. Высокий MMLU ничего не говорит о том, как модель пишет SQL по вашей схеме. Для своей задачи нужен свой эвал (урок 7.3.2).

Весь код урока выше — запустите его у себя через python и поиграйте с параметрами:

  • в симуляции «шуабан» замените n_ckpt = 30 на 3 и на 300. Как растёт «подарок»?
  • в детекторе контаминации уменьшите n с 8 до 3. Что произойдёт с честной второй задачей и почему короткие n-граммы дают ложные срабатывания?
  • в CircularEval сделайте модель, которая при незнании угадывает случайно (как guesser), а не пишет «A». Сколько процентных пунктов ей «подарит» обычная accuracy и что покажет CircularEval?
Проверь себя6 вопросов
1 Модель A набрала на HumanEval (164 задачи) 52%, модель B — 49%. Что можно сказать?
2 Сколько вопросов нужно, чтобы полуширина 95% интервала при p=0.5p = 0.5 была 1 п.п.? Округлите до сотен.
3 Какие приёмы помогают обнаружить или предотвратить контаминацию?Можно выбрать несколько ответов
4 Команда перебрала 50 вариантов промпта и опубликовала результат лучшего на открытом тесте. Что, скорее всего, произойдёт на свежем тесте того же уровня?
5 Слабая модель при незнании всегда отвечает «A». Что сделает с её результатом CircularEval по сравнению с обычной accuracy?
6 Подгонку модели под лидерборд в Китае называют «шуабан» — «натирать рейтинг». Какой закон описывает эту ловушку: мера, ставшая целью, перестаёт быть хорошей мерой? Напишите фамилию автора.
  • Бенчмарк — это задачи плюс протокол: промпт, извлечение ответа, метрика. Число без протокола ничего не значит.
  • Точность ограничена размером теста: ±1.96p(1−p)/n\pm 1.96\sqrt{p(1-p)/n}. На маленьких наборах (AIME, HumanEval, GPQA) разница в несколько пунктов — часто просто шум.
  • Контаминация почти неизбежна для открытых бенчмарков. Её ловят n-граммами, свежими двойниками теста, сравнением loss, разделением по времени и закрытыми ответами.
  • Подгонка под лидерборд («шуабан») бывает и без злого умысла: выбор лучшего из многих вариантов по тесту завышает результат.
  • Chatbot Arena меряет то, что нравится людям, но и у неё есть смещения: стиль, длина, приватные тесты.

Дальше: соберём собственный eval-набор, реализуем pass@k и exact match с нормализацией и научимся пользоваться LLM-судьёй, не попадая в ловушки его смещений.