Загружаем научный разбор
Подготавливаем текст, источники и редакционные примечания без изменения разметки страницы.
Подготавливаем текст, источники и редакционные примечания без изменения разметки страницы.
Автор: Казачкин Даниил Михайлович · Обновлено
Как проверяют попадание бенчмарка в обучение LLM: исследование ICLR 2024, предпосылки статистического теста и собственный пример с перестановками на Python.
Бенчмарк нужен, чтобы сравнивать модели на общей проверке. Но открытые задачи, ответы и обсуждения могут оказаться в данных обучения. Тогда высокая оценка смешивает два разных умения: решать новую задачу и воспроизводить знакомый материал. Это называют загрязнением бенчмарка, или benchmark contamination.
Материал разбирает научную постановку этой проблемы и отдельный учебный эксперимент. Он не проверяет конкретный коммерческий сервис: все вычисления ниже выполняются локально на шести выдуманных обозначениях, без API и без скачивания языковой модели. Источники и статус публикаций проверены 16 сентября 2026 года.
| Ситуация | Какая граница нарушена | Какой вывод становится сомнительным |
|---|---|---|
| Preprocessing обучили на всей таблице | Проверочные данные повлияли на подготовку модели | Оценка качества на новых наблюдениях |
| Проверочные задания попали в обучение LLM | Экзамен перестал быть полностью новым | Вывод об обобщении по результатам бенчмарка |
| Модель воспроизвела чувствительный обучающий текст | Содержимое обучения оказалось доступно через ответы | Предположение о конфиденциальности данных |
Первую проблему подробно объясняет разбор честной train/test-оценки. Здесь основной вопрос второй: можно ли получить свидетельство знакомства модели с набором, когда обучающий корпус недоступен? Это не то же самое, что определить причину каждого правильного ответа.
В рецензируемой работе Oren и соавторов, ICLR 2024, предложено сравнивать логарифмическую вероятность опубликованного порядка примеров с вероятностями перестановок. Предпосылки — обменность примеров и независимость проверяемой модели от набора при нулевой гипотезе. Доступ к весам и обучающему корпусу не требуется, но нужны запросы вероятности текста: одного разговорного интерфейса недостаточно. Авторы строят статистическую проверку и исследуют её на контролируемом загрязнении и доступных моделях. Proving Test Set Contamination in Black-Box Language Models.
Пусть есть шесть условных карточек. Их обозначения не несут смыслового порядка. Сначала случайно выберем один порядок, а затем намеренно обучим на нём маленькую модель: она считает, какой символ следовал за предыдущим. Для начала последовательности используется отдельный маркер.
Для каждого перехода вычисляем вероятность с добавлением единицы к счётчикам. Это сглаживание оставляет ненулевую вероятность и у невстречавшихся переходов. Оценка всей последовательности — сумма логарифмов вероятностей переходов. Контрольная модель не получает ни одной карточки и поэтому одинаково оценивает любые порядки.
Теперь можно перебрать все 6! = 720 перестановок. Нас интересует доля порядков с оценкой не ниже, чем у выбранного исходного. Мы включаем сам исходный порядок в перебор и учитываем равенства. Это полный перебор, а не выборка случайных перестановок.
from collections import Counter, defaultdict
from itertools import permutations
from math import log
from random import Random
symbols = tuple("ABCDEF")
canonical = tuple(Random(7).sample(symbols, len(symbols)))
def train(order):
counts = defaultdict(Counter)
previous = "<start>"
for symbol in order:
counts[previous][symbol] += 1
previous = symbol
return counts
def score(order, counts):
value = 0.0
previous = "<start>"
for symbol in order:
row = counts.get(previous, Counter())
probability = (row[symbol] + 1) / (sum(row.values()) + len(symbols))
value += log(probability)
previous = symbol
return value
def exact_tail_fraction(counts):
observed = score(canonical, counts)
all_scores = [score(order, counts) for order in permutations(symbols)]
tail = sum(value >= observed - 1e-12 for value in all_scores)
return tail / len(all_scores)
clean = train(())
exposed = train(canonical)
p_clean = exact_tail_fraction(clean)
p_exposed = exact_tail_fraction(exposed)
assert p_clean == 1.0
assert abs(p_exposed - 1 / 720) < 1e-12
print("control:", f"{p_clean:.6f}")
print("trained on order:", f"{p_exposed:.6f}")Ожидаемый вывод:
control: 1.000000
trained on order: 0.001389Вторая модель выделяет именно последовательность, которую мы ей передали. Первая не выделяет ничего: все оценки совпадают. В этой конструкции источник зависимости известен заранее, потому что мы сами задали обучение. Вычисление демонстрирует ранжирование наблюдения среди перестановок; это не воспроизведение LLM, разбиения на сегменты или экспериментальных результатов статьи.
Статистический смысл появляется только вместе с нулевой гипотезой и схемой получения данных. В нашем примере при отсутствии связи с моделью выбранный порядок должен был быть случайным среди тех же 720 вариантов. Нельзя сначала найти самый удачный порядок по самой модели, а затем считать, будто он был выбран независимо.
Малый p-value не равен вероятности того, что гипотеза верна, и не измеряет величину эффекта. ASA отдельно подчёркивает эти ограничения интерпретации и необходимость полного описания анализа. Поэтому фраза «вероятность отсутствия утечки — 0,14%» из нашего вывода не следует. Заявление American Statistical Association о p-values.
Полезно изменить опыт. Обучите модель на другом заранее выбранном порядке; затем уменьшите число карточек до трёх. Во втором случае возможны только шесть перестановок, поэтому минимальная ненулевая доля полного перебора равна 1/6. Число наблюдений ограничивает различимость такого маленького эксперимента. Если же перебирается лишь случайная часть порядков, нужна уже корректная процедура приближённого тестирования, а не механическая замена списка в коде.
Рассмотрим выдуманный пример. У модели 100% правильных ответов на знакомой группе и 40% на новой. Если знакомая группа составляет 75% проверки, общая оценка равна 0.75 × 1 + 0.25 × 0.4 = 0.85. Это 85%, хотя результат на новой группе — только 40%.
Пример показывает, почему нужно знать состав проверки. Он не позволяет по любой наблюдаемой accuracy 85% вычислить долю загрязнения: ту же цифру могут дать множество других сочетаний. Тем более необычная вероятность порядка не измеряет напрямую, сколько правильных ответов появилось благодаря запоминанию.
Для отчёта полезны раздельные вопросы: есть ли свидетельство знакомства с набором, насколько оно устойчиво к проверочным вариантам и как меняется качество на действительно новых задачах? Ответы требуют разных измерений; одной отметки «contaminated» недостаточно.
Следующая таблица — редакционный шаблон отчёта, а не дополнительные результаты исследователей.
| Поле отчёта | Зачем оно нужно |
|---|---|
| Версия набора и контрольная сумма | Убедиться, что проверяли одни и те же задания |
| Порядок и правила формирования примеров | Проверить, допустимы ли перестановки |
| Версия модели и режим доступа | Понять, какое поведение наблюдалось |
| Заранее выбранные статистика и порог | Отличить проверку гипотезы от подбора удачного теста |
| Число проверенных наборов и вариантов | Увидеть множественные сравнения |
| Контрольные условия и размер эффекта | Оценить альтернативные объяснения и практический смысл |
Если после каждого результата менять разметку, длину фрагментов и порог, анализ сам становится процедурой выбора. Нужны отдельные данные для разработки проверки или заранее описанный план сравнения. Для подготовки полезны уроки о разделении выборки и кросс-валидации.
Гарантия теста Oren и соавторов условна: при нарушении обменности статистический аргумент неприменим. Например, главы рассказа или задания, упорядоченные по сложности, могут иметь естественно предпочтительный порядок. Отрицательный тест не исключает загрязнение: модель могла видеть отдельные задания, но не сохранить их порядок. Положительный результат не сообщает весь обучающий корпус и не измеряет автоматически прибавку к качеству. Эти границы важны и при чтении слова «proving» в названии. Предпосылки и ограничения исследования.
Практическая задача читателя — сохранить цепочку рассуждения: какой именно сигнал измерили, какие предпосылки дали ему смысл и какой вывод разрешают данные. Независимое решение новых задач и знакомство с опубликованным экзаменом нельзя подменять друг другом.
Самостоятельный русскоязычный научный разбор ЯдроКода. Результаты первичных исследований отделены от авторских пояснений и синтетического учебного эксперимента; текст не является переводом или перепечаткой.
Таблицы, синтетические данные и исполняемый пример на Python созданы для статьи. Рисунки, программный код и реальные извлечённые данные из первоисточников не воспроизводятся.