Бенчмарки и их ловушки
Что на самом деле измеряют MMLU, GSM8K, HumanEval, SWE-bench, C-Eval и MERA, почему одно число на лидерборде стоит меньше, чем кажется, и как распознать контаминацию и подгонку под лидерборд («шуабан»).
Зачем это нужно
Заголовок раздела «Зачем это нужно»Откройте любой техотчёт — 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 — это не просто «набор вопросов». Это четыре части, и каждая влияет на итоговое число:
- Задачи — вопросы с эталонными ответами (или тестами для кода).
- Формат промпта — сколько примеров показать перед вопросом (0-shot, 5-shot), просить ли рассуждение (CoT), какой chat-шаблон использовать.
- Извлечение и проверка ответа — как найти ответ в тексте модели («Ответ: B», «#### 42», код в блоке) и сравнить с эталоном.
- Метрика — 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 п.п. разницы (п.п. — процентные пункты: разность двух процентов, ). Правило для чтения: число без протокола ничего не значит. Ищите сноску с настройками.
Как модель сдаёт тест с вариантами ответа
Заголовок раздела «Как модель сдаёт тест с вариантами ответа»Большинство бенчмарков на знания (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 раза подряд — ). Цена — в 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 — подвыборка из 500 | exact match по выражению |
| AIME | американская олимпиада: ответ — целое от 0 до 999 | 30 задач в год | 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 модели немного изменилась бы. Насколько? Каждый ответ — «монетка» с вероятностью успеха , поэтому разброс доли верных ответов описывает стандартная ошибкастандартная ошибкаEN standard errorСтандартное отклонение оценки метрики из-за конечного числа вопросов. Для доли — √(p(1−p)/n).:
Что здесь написано. Каждый ответ — испытание Бернулли (урок 1.3.1), а доля верных ответов при большом распределена почти нормально со стандартным отклонением SE. По правилу «68–95–99.7» из того же урока в пределах двух стандартных отклонений лежит около 95% значений; точнее множитель равен 1.96. Пример: , (HumanEval): , полуширина интервала , то есть ±7.7 п.п. Чем больше вопросов , тем меньше разброс — но только как . Чтобы сузить доверительный интервалдоверительный интервал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.9HumanEval 164 0.50 7.7GPQA Diamond 198 0.60 6.8MATH-500 500 0.90 2.6GSM8K (test) 1319 0.80 2.2MMLU (test) 14042 0.70 0.8Выводы из этой таблицы стоит запомнить:
- Интервал разницы шире интервала каждой модели. Если две модели оценены независимо, стандартная ошибка их разницы в раза больше (дисперсии независимых величин складываются: ): на MMLU это уже ±1.1 п.п. Поэтому разница в 0.5 п.п. на MMLU — в пределах шума, а 3 п.п. на HumanEval (интервал разницы около ±11 п.п.) — тем более.
- AIME с его 30 задачами даёт интервал ±18 п.п. (это оценка для одной попытки на задачу). DeepSeek-R1 сэмплирует на каждую задачу несколько ответов с температурой и усредняет — это заметно уменьшает шум сэмплирования. Но шум выбора задач остаётся: задач всё равно 30. Модель «на 5 п.п. лучше на AIME» может не быть лучше вообще.
- Правильнее сравнивать две модели на одних и тех же вопросах (парный тест). Он точнее, чем сравнение двух отдельных интервалов, — как это сделать бутстрэпом, увидите в следующем уроке.
Ловушка 1: контаминация
Заголовок раздела «Ловушка 1: контаминация»загрязнение данныхзагрязнение данных (утечка бенчмарка в обучение)EN data contaminationЗадачи из тестового бенчмарка попали в обучающий корпус LLM — оценка становится завышенной. Родственное явление — «шуабан», подгонка модели под лидерборд. — тестовые задачи попали в обучающие данные. Вы уже встречали её в уроке 2.1.2 как частный случай утечки. С LLM это происходит почти неизбежно: бенчмарки лежат на GitHub и Hugging Face, их разбирают на форумах и в блогах, решения публикуют в задачниках. Претрейн на триллионах токенов из интернета всё это проглатывает, даже если никто не хотел жульничать.
Как контаминацию обнаруживают:
- N-граммное пересечение. Ищем длинные куски вопроса в обучающем корпусе. Авторы GPT-3 проверяли совпадения по 13-граммам. Метод требует доступа к корпусу, поэтому годится разработчикам модели, а не внешним проверяющим.
- Свежий двойник теста. Делают новые задачи того же стиля и сложности и сравнивают точность. Scale AI в 2024 году собрала GSM1k — 1 250 новых задач в духе GSM8K, написанных людьми без помощи LLM. У части семейств моделей (авторы называют Mistral и Phi) точность на новых задачах систематически падала, до ~10 п.п. У фронтирных моделей падения почти не было.
- Сравнение loss. Если обучающих данных нет, сравнивают перплексияперплексияEN perplexity модели на тесте и на свежем двойнике. Модель, которая видела тест, «узнаёт» его — loss на нём заметно ниже (подробно в «Китайском углу»).
- Разделение по времени. LiveCodeBench хранит дату публикации каждой задачи. Модель с датой среза знаний в марте честно оценивают только на задачах после марта. Если точность резко падает именно на этой границе — тревожный знак.
- Закрытый тест. 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.
Ловушка 2: «шуабан» и закон Гудхарта
Заголовок раздела «Ловушка 2: «шуабан» и закон Гудхарта»подгонка под лидербордподгонка под лидерборд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.70public = rng.random((n_ckpt, n_public)) < true_acchidden = 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.
Ловушка 3: ошибки в разметке и насыщение
Заголовок раздела «Ловушка 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: оценка людьми
Заголовок раздела «Chatbot Arena: оценка людьми»Chatbot Arena запустила в 2023 году группа LMSYS (Беркли). Устроено так:
- Пользователь задаёт любой вопрос и получает ответы двух анонимных моделей.
- Он голосует: «лучше A», «лучше B», «ничья» или «оба плохи». Только после этого имена моделей раскрываются.
- По миллионам голосов строят рейтинг. Сначала это был рейтинг Элорейтинг ЭлоEN Elo ratingШахматный рейтинг, который пересчитывают по исходам попарных партий. В Chatbot Arena его заменили оценкой модели Брэдли–Терри по всем голосам сразу., затем перешли к оценке модели Брэдли–Терри по всем голосам сразу — той же, что лежит в основе reward model (урок 6.3.2): . Бутстрэпбутстрэп (выборка с возвращением)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 (анонс). Используйте её как один из сигналов, но не как истину в последней инстанции.
Как читать таблицу из техотчёта
Заголовок раздела «Как читать таблицу из техотчёта»Чек-лист на каждую строку таблицы:
- Протокол. Сколько примеров (n-shot)? С CoT или без? Greedy или сэмплирование, какая температуратемпература (сэмплирования)EN temperatureЛогиты делятся на T перед softmax. T < 1 — распределение острее, T > 1 — площе, T → 0 — greedy.? pass@1 по скольким сэмплам? Если судья — LLM, то какой?
- Одинаковые правила для всех. Числа конкурентов посчитаны тем же кодом или взяты из чужих отчётов?
- Шум. Какой размер теста? Разница больше двух стандартных ошибок?
- Контаминация. Что авторы сделали для очистки данных? Есть ли результаты на свежих наборах (LiveCodeBench, AIME текущего года)?
- Кто считал. Числа самих авторов или независимая проверка (OpenCompass, MERA, Arena)?
- Подходит ли бенчмарк вам. Высокий MMLU ничего не говорит о том, как модель пишет SQL по вашей схеме. Для своей задачи нужен свой эвал (урок 7.3.2).
Практика
Заголовок раздела «Практика»Весь код урока выше — запустите его у себя через python и поиграйте с параметрами:
- в симуляции «шуабан» замените
n_ckpt = 30на 3 и на 300. Как растёт «подарок»? - в детекторе контаминации уменьшите
nс 8 до 3. Что произойдёт с честной второй задачей и почему короткие n-граммы дают ложные срабатывания? - в CircularEval сделайте модель, которая при незнании угадывает случайно (как
guesser), а не пишет «A». Сколько процентных пунктов ей «подарит» обычная accuracy и что покажет CircularEval?
Проверь себя
Заголовок раздела «Проверь себя»- Бенчмарк — это задачи плюс протокол: промпт, извлечение ответа, метрика. Число без протокола ничего не значит.
- Точность ограничена размером теста: . На маленьких наборах (AIME, HumanEval, GPQA) разница в несколько пунктов — часто просто шум.
- Контаминация почти неизбежна для открытых бенчмарков. Её ловят n-граммами, свежими двойниками теста, сравнением loss, разделением по времени и закрытыми ответами.
- Подгонка под лидерборд («шуабан») бывает и без злого умысла: выбор лучшего из многих вариантов по тесту завышает результат.
- Chatbot Arena меряет то, что нравится людям, но и у неё есть смещения: стиль, длина, приватные тесты.
Дальше: соберём собственный eval-набор, реализуем pass@k и exact match с нормализацией и научимся пользоваться LLM-судьёй, не попадая в ловушки его смещений.