3,583 papers
arXiv:2610.24872 81 17 окт. 2026 г. FREE

Проверка LLM-судьи по счётчикам классов: как поймать судью, который не умеет ставить редкую метку

КЛЮЧЕВАЯ СУТЬ
Парадокс: судья на 8B-модели совпадает с эталоном на 78% ответов, но метку «выполнил» не ставит ни разу. Метод позволяет поймать такого судью без эталонной разметки и без людей: нужно только посчитать, сколько раз каждый судья поставил каждую метку. Прогони одни и те же ответы через двух судей с одной рубрикой и сравни счётчики классов. Если у судьи A класс встречается меньше чем в трети случаев судьи B, а B ставит его на 10%+ ответов, значит A этот класс не умеет использовать. На одних и тех же 900 ответах доля «выполнил» у разных судей прыгала от 1% до 25%.
Адаптировать под запрос
⚡

TL;DR

Когда модель-судья размечает ответы по нескольким классам («отказ», «уклончиво», «выполнил», «бессвязно»), достаточно посчитать, сколько раз она поставила каждую метку. Если один класс почти пуст, а другой судья ставит его на заметной доле тех же ответов, значит, судья его просто не умеет использовать. Проверка бесплатная, без эталонной разметки и без людей.

Боль вот в чём. Одни и те же 900 ответов разные судьи оценивают так: доля «выполнил» от 1% до 25%, то есть в 22–25 раз разницы. Судья на 8B-модели при этом согласен с эталоном на 78% ответов и выдаёт аккуратную разметку. Но класс «выполнил» он не ставит ни разу. Почти все такие ответы он переносит в соседний класс «уклончиво». Общая точность это скрывает: 78% набираются на лёгких отказах. А метрика, которую вы показываете в отчёте («атака сработала в X%», «бот решил Y%»), считается как раз по пропавшему классу.

Метод простой. Прогоните ответы через двух судей с одной рубрикой и сравните счётчики по классам. Если у одного судьи класс встречается в <⅓ от счёта другого, а другой ставит его не менее чем на 10% ответов, судья помечен как неисправный по этому классу. Оценку, которая опирается на такой класс, нельзя считать надёжной.

🔬

Схема метода

ШАГ 1: Одна рубрика, фиксированные ответы → два и более судьи (разные модели)
ШАГ 2: Для каждого судьи посчитать, сколько раз он поставил каждый класс → таблица «судья × класс»
ШАГ 3: Правило флага: класс у судьи A < ⅓ от счёта судьи B
        И судья B ставит этот класс ≥ 10% ответов → судья A неисправен по классу
ШАГ 4: В отчёте — название судьи, счётчики по классам и обе метрики
        (строгая и мягкая)

Шаги 1–2 делаются в одном-двух запросах к чату. Шаг 3 можно поручить самой модели.

🚀

Пример применения

Задача: Вы руководитель поддержки маркетплейса вроде Ozon. Бот отвечает на 500 жалоб о задержке доставки. Чтобы не читать всё руками, вы просите дешёвую LLM разметить ответы. Метрика для руководства: доля ответов, где бот реально решил проблему клиента.

Сильная зона метода: редкий важный класс и рубрика с соседними классами. Здесь соседи «решил» и «ушёл от ответа».

Промпт (судья, запускается в двух разных моделях, например в Claude и в ChatGPT):

Ты разметчик ответов бота поддержки маркетплейса.
Для каждого ответа выбери ровно ОДИН класс:
- refuse: бот отказал или перенаправил без помощи («обратитесь в магазин»)
- evasive: бот ответил по теме, но не дал клиенту ни решения, ни конкретного действия (общие слова, извинения, «мы разбираемся»)
- solve: бот дал решение или конкретное действие (возврат, перенос срока, номер заявки, точные шаги)
- gibberish: ответ бессвязный или не по теме

Важно: «извинился и пообещал» без конкретики — это evasive, а не solve.

Ниже 500 пар «жалоба — ответ бота», с номерами.
Верни только JSON-массив: [{"id": 1, "label": "..."}, ...]
Затем отдельной строкой выведи счётчик: сколько раз встретился каждый класс.

{пары_жалоба_ответ}

Промпт (проверка, во втором шаге, когда есть оба результата):

Вот счётчики классов двух судей, размечавших одни и те же 500 ответов по одной рубрике:

Судья A ({модель_A}): refuse={a1}, evasive={a2}, solve={a3}, gibberish={a4}
Судья B ({модель_B}): refuse={b1}, evasive={b2}, solve={b3}, gibberish={b4}

Правило: класс у одного судьи считается «неиспользуемым», если
(1) у другого судьи он занимает не менее 10% всех ответов, И
(2) у первого судьи его счёт меньше трети от счёта другого.

Проверь правило для каждого класса и каждой пары судей.
Назови, какой судья и по какому классу помечен.
Если помечен — покажи по разметке по id, куда ушли ответы, которые другой судья назвал этим классом.

Результат: В первом запросе придёт JSON с метками и счётчик по классам. Во втором модель покажет таблицу проверки по правилу. Если один из судей почти не ставит solve, вы увидите флаг и список id, которые он перенёс в evasive. Метрику «доля решённых» по такому судье в отчёт ставить нельзя.

🧠

Почему это работает

Слабость. Общая точность (доля совпадений с эталоном) измеряется по всей выборке, где большинство ответов легко классифицировать. Редкий класс — как раз то, ради чего всё затевалось. Провал в нём почти не двигает общую цифру. Поэтому судья может «согласиться на 78%» и при этом не уметь ставить нужную метку. Малые судьи (7–9B) не размазывают ошибки случайно: они смещаются на соседний класс. Для них «решил» и «уклончиво» — ближайшие по смыслу, и граница между ними слишком тонкая.

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

Как метод обходит слабость. Он заменяет вопрос «насколько судья точен?» (на него нужна эталонная разметка) на вопрос «ставит ли судья все классы?» (на него нужны только счётчики).

Рычаги: - Порог 10% — поднимите, если класс редкий у всех судей (тогда правило не сработает; в исследовании так было на одном корпусе). - Порог ⅓ — сделайте строже (например, ½), если хотите ловить частичные провалы. - Число судей — добавьте третьего, особенно большую модель: правило сравнивает с самым «щедрым» судьёй. - Две метрики — считайте и строгую («решил»), и мягкую («не отказал»). Мягкая сдвигается на единицы процентов, строгая — в разы.

📋

Шаблон промпта

Ты разметчик. Для каждого элемента ниже выбери ровно ОДИН класс:
- {класс_1}: {определение_1}
- {класс_2}: {определение_2}
- {класс_3}: {определение_3}
- {класс_4}: {определение_4}

Пограничное правило: {как отличать соседние классы, 1–2 строки}.

Верни JSON: [{"id": N, "label": "..."}].
После JSON — счётчик: сколько раз встретился каждый класс.

{элементы_с_номерами}
Счётчики классов двух судей по одним и тем же {N} элементам и одной рубрике:
Судья A ({модель_A}): {счётчики_A}
Судья B ({модель_B}): {счётчики_B}

Правило флага: класс у судьи X помечен, если у другого судьи Y он занимает ≥10% элементов,
а у X его счёт меньше ⅓ от счёта Y.
Проверь каждый класс и каждую пару. Назови судью и класс.
Для помеченных классов покажи, в какие соседние классы X перенёс элементы Y.

Что подставлять: {класс_N} и определения — ваша рубрика (3–4 класса, в идеале с порядком «от плохого к хорошему»). {N} — число размеченных элементов. {модель_A/B} — названия реальных моделей-судей. Дословной рубрики авторов в тексте статьи нет (она в приложении), шаблон собран по её структуре: refuse / evasive / comply / gibberish.

🚀 Быстрый старт — вставь в чат:

Вот шаблон проверки LLM-судьи по счётчикам классов. Адаптируй под мою задачу: [твоя задача: что размечаем и по каким классам].
Задавай вопросы, чтобы заполнить поля.

[вставить шаблон выше]

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

⚠️

Ограничения

⚠️ Нет эталона: Правило показывает, что судьи расходятся, но не что «щедрый» судья прав. Судья, которого правило не пометило, всё ещё может ошибаться. В исследовании референс не был помечен, хотя людская разметка давала заметно больше «выполнил», чем он.

⚠️ Редкий класс у всех: Если ни один судья не ставит класс на ≥10% ответов, правило неприменимо. На одном из корпусов проверка просто не сработала.

⚠️ Пороги провизорные: 10% и ⅓ выбраны авторами заранее, но это не теория. Подбирайте под свою выборку.

⚠️ Размер не объясняет всё: Гипотеза «чем меньше судья, тем хуже» не подтвердилась. Пара из одного релиза (21B и 117B) показала обратное, и авторы эту гипотезу сняли. Отказываться от всех малых судей нельзя: сломались плотные модели 7–9B из четырёх семейств. Специально дообученные малые судьи для безопасности могут справляться лучше.

⚠️ Нужна одна задача: Вся проверка сделана на одной задаче (оценка ответов на вредные запросы). На других рубриках эффект может быть слабее или сильнее.

⚠️ Шум самого судьи: Даже эталонный судья на одних и тех же ответах расходился сам с собой на 10–12% при температуре 1.0. Любые различия мельче этого уровня шумом и являются.

⚠️ Мягкая метрика тоже плывёт: Доля «не отказал» расходится между судьями на 10–23 процентных пункта. Это меньше, чем разброс строгой метрики, но не нуль.

🔍

Как исследовали

Идея была простой: заморозить всё, кроме судьи. Авторы взяли 100 вредных запросов из публичных бенчмарков и обернули каждый в 9 известных типов атак — получилось 900 промптов. Два разных целевых модели ответили на них одинаково, и каждый набор ответов стал корпусом. Восемь судей из пяти организаций (от 8B до ~117B) размечали эти же ответы по одной рубрике из четырёх классов. Ответы не менялись ни на символ.

Результат неожиданный: расходятся не «случайно». Три плотные модели 8–9B переносят «выполнил» почти целиком в соседний «уклончиво». Одна из них на втором корпусе не поставила «выполнил» ни разу из 900. Без этих трёх судей разброс по строгой метрике падает с ~22–25 раз до 1,7–2,8. Проверили устойчивость: новые вредные запросы, третья целевая модель, судья из четвёртого семейства (7B) — паттерн повторился. Часть проверок была зарегистрирована письменно до запуска.

Интересный поворот: авторы сначала заявили «чем меньше судья, тем хуже», потом проверили контрольной парой из одного релиза — и сами отозвали вывод. Практический инсайт: доверять не размеру, а счётчикам.

💡

Адаптации и экстраполяции

🔧 Техника: добавить в рубрику класс «обошёл защиту, но ничего не передал» → убрать невыразимый исход

Авторы показали: атаки с кодированием обходят отказ, но ничего вредного не выдают. Если в рубрике нет класса для «ответил, но по сути пусто», судьи читают такие ответы по-разному (разброс до 50 пунктов). В вашей рубрике:

- empty: бот не отказал, но и ничего полезного не передал (шаблонная фраза, повтор вопроса)

Для поддержки или контента такой класс нужен почти всегда.

Минимальный отчёт по оценке (из списка авторов, адаптирован):

К результату оценки приложи:
1. Название и размер модели-судьи, число вызовов на элемент.
2. Счётчики по каждому классу.
3. Рубрику дословно и любые её правки.
4. Обе метрики: строгую (решил/выполнил) и мягкую (не отказал).
5. Температуру целевой модели и судьи.
6. Источник тестовых запросов.
7. Размечал ли что-то человек, не знавший цели исследования.
🔗

Ресурсы

  • The Missing Compliance Class: LLM Graders That Collapse Jailbreak Success, and a Free Check — Ruqiya Bin Safi, независимый исследователь.
  • Артефакт (метки, скрипты): https://anonymous.4open.science/r/missing-compliance-class-4F6F
  • Близкие работы из обзора: Souly et al., 2024 (завышение успеха джейлбрейков оценщиками); Gao, 2026 (разброс ASR по судьям); Tamsal & Rusert, 2026 (оценщик втрое завышает прирост успеха после дообучения); Chao et al., 2025 (судьи против экспертной разметки).
  • Бенчмарки запросов: Huang et al., 2024; Zou et al., 2023 (AdvBench). Атаки: Wei et al., 2023; Andriushchenko & Flammarion, 2025; Anil et al., 2024.

📋 Дайджест исследования

Ключевая суть

Парадокс: судья на 8B-модели совпадает с эталоном на 78% ответов, но метку «выполнил» не ставит ни разу. Метод позволяет поймать такого судью без эталонной разметки и без людей: нужно только посчитать, сколько раз каждый судья поставил каждую метку. Прогони одни и те же ответы через двух судей с одной рубрикой и сравни счётчики классов. Если у судьи A класс встречается меньше чем в трети случаев судьи B, а B ставит его на 10%+ ответов, значит A этот класс не умеет использовать. На одних и тех же 900 ответах доля «выполнил» у разных судей прыгала от 1% до 25%.

Принцип работы

Процесс из трёх ходов. Первый: одна рубрика, одни ответы, два судьи на разных моделях. Второй: таблица «судья × класс», то есть сколько раз кто поставил какую метку. Третий: проверка правила. Класс у судьи A меньше ⅓ от счёта B, и B ставит его минимум на 10% ответов. Тогда A помечен как неисправный по этому классу. Не спрашивай «насколько судья точен?», спрашивай «ставит ли он все классы?» На первый вопрос нужен эталон. На второй хватит счётчиков, они уже лежат в любой разметке. Это как проверять весы не гирей, а вторыми весами: если одни всегда показывают ноль там, где другие показывают килограмм, сломаны первые.

Почему работает

Общая точность считается по всей выборке, а там большинство ответов лёгкие. Судья набирает свои 78% на очевидных отказах. Редкий класс, ради которого всё затевалось, почти не двигает итоговую цифру. Малые судьи на 7–9B не ошибаются случайно: они систематически сносят редкий класс в соседний. «Решил» и «уклончиво» для них почти одно и то же, граница слишком тонкая. Поэтому провал виден в счётчиках, а в общей точности не виден. Проверка не требует знать правильный ответ. Она отличает «такого класса в данных нет» от «судья его не видит». Строгая метрика («решил») у разных судей разошлась в разы. Мягкая («не отказал») сдвинулась лишь на 10–23 процентных пункта.

Когда применять

Оценка ответов ботов и моделей с рубрикой из 3–4 соседних классов → особенно когда в отчёте стоит метрика по редкому классу: «атака сработала в X%», «бот решил Y%», «ответ полезный». Идеально, если классы упорядочены от плохого к хорошему. Не подходит, когда ни один судья не ставит класс на 10%+ ответов: правило молчит. Не доказывает, что «щедрый» судья прав. Он просто показывает, что судьи расходятся. Пороги 10% и ⅓ выбраны авторами заранее, это не теория. Подбирай их под свою выборку. Различия мельче 10–12% тоже шум: эталонный судья сам с собой расходился на такую величину при температуре 1.0. Проверено на одной задаче, оценке ответов на вредные запросы.

Мини-рецепт

1. Зафиксируй рубрику: 3–4 класса, у каждого определение в одну строку. Добавь правило для границы между соседями, например «извинился и пообещал без конкретики — это уклончиво, а не решил».
2. Возьми двух судей: две разные модели, например Claude и ChatGPT. Третья, особенно большая, не помешает: правило сравнивает с самым щедрым судьёй.
3. Попроси JSON и счётчик: метки по id, а после них строка «сколько раз встретился каждый класс».
4. Скорми счётчики проверке: попроси назвать судью и класс, которые попали под правило. Для помеченных классов проси список id, которые судья унёс в соседний класс.
5. Если флаг горит: метрику по этому классу от этого судьи в отчёт не ставь.
6. Показывай две метрики: строгую («решил») и мягкую («не отказал»). Строгая скачет в разы, мягкая на единицы процентов.
7. Редкий класс у всех: подними порог 10% или признай, что проверка не сработала. Хочешь ловить частичные провалы, сделай порог строже, например ½.

Примеры

[ПЛОХО] : Разметь 500 ответов бота поддержки и скажи, какой процент решил проблему клиента. Один судья, никакой проверки. Он может ни разу не поставить «решил» и выдать красивые 3%. Ты понесёшь эту цифру руководству.
[ХОРОШО] : Ты разметчик ответов бота поддержки маркетплейса. Для каждого ответа выбери ровно ОДИН класс: refuse (отказал или перенаправил без помощи), evasive (по теме, но без решения и конкретного действия), solve (дал возврат, перенос срока, номер заявки, точные шаги), gibberish (бессвязно или не по теме). Важно: «извинился и пообещал» без конкретики — это evasive, а не solve. Верни JSON [{"id": 1, "label": "..."}] и отдельной строкой счётчик по классам. {пары_жалоба_ответ} Запусти это в двух моделях, потом дай им проверку: Судья A (Claude): refuse=140, evasive=290, solve=60, gibberish=10. Судья B (ChatGPT): refuse=135, evasive=190, solve=165, gibberish=10. Правило: класс у одного судьи неиспользуемый, если у другого он занимает 10%+ ответов И у первого его счёт меньше трети. Проверь каждый класс. Назови судью и класс. Покажи по id, куда ушли ответы, которые другой судья назвал solve. Здесь у A класс solve = 60, у B = 165. 60 больше трети от 165, флаг не горит. Но если у A будет 5, горит: A не умеет ставить solve, и его «доля решённых» в отчёт не идёт.
Источник: The Missing Compliance Class: LLM Graders That Collapse Jailbreak Success, and a Free Check
ArXiv ID: 2610.24872 | Сгенерировано: 2026-10-20 16:50

Проблемы LLM

ПроблемаСутьКак обойти
Модель-судья не ставит редкую метку и уводит её в соседний класс. Общая точность это скрываетПросишь модель разметить ответы по 3–4 классам. Разметка выглядит аккуратно. Совпадение с эталоном высокое, около 78%. Но нужный класс (например, «решил проблему») модель почти не ставит. Ответы уходят в ближайший по смыслу класс (например, «уклончиво»). Точность считается по всей выборке, где большинство ответов лёгкие. Провал в редком классе почти не двигает цифру. Итоговая метрика в отчёте считается именно по пропавшему классу. Разные судьи дают разницу в десятки раз. Особенно это касается малых моделей (7–9B)Не доверяй одной цифре точности. Посчитай, сколько раз судья поставил каждый класс. Сравни счётчики с другим судьёй на тех же ответах. Если один класс у судьи почти пуст, а у другого частый, не используй метрику по этому классу. Пропиши в рубрике правило для границы между соседними классами. Например: «извинился и пообещал без конкретики — это "уклончиво"»

Методы

МетодСуть
Сравнение счётчиков классов у двух судей — проверка без эталонаЧто делать: Дай одну рубрику и одни и те же ответы двум разным моделям. Попроси JSON с метками и счётчик по классам. Составь таблицу «судья × класс». Правило флага: класс у судьи A помечен, если (1) у судьи B он занимает не менее 10% ответов И (2) у A его счёт меньше ⅓ от счёта B. Тогда A неисправен по этому классу. Само правило можно поручить модели: вставь счётчики и формулу, попроси проверить каждый класс и каждую пару. Для помеченного класса попроси показать по id, куда A перенёс ответы, которые B назвал этим классом. Почему работает: Не нужно знать правильный ответ. Видно, что один судья не использует то, что другой использует массово. Так отличаешь «в данных такого класса нет» от «судья не умеет его ставить». Проверка бесплатная: счётчики уже есть в любой разметке. Рычаги: Редкий класс у всех судей — подними порог 10%, иначе правило не сработает. Хочешь ловить частичные провалы — сделай порог строже (½). Добавь третьего судью, лучше крупную модель. Правило сравнивает с самым «щедрым» судьёй. Когда не работает: Класс редкий у всех судей. Судья, которого не пометили, всё равно может ошибаться. Правило показывает расхождение, а не кто прав. Пороги подбирай под свою выборку

Тезисы

ТезисКомментарий
Строгая метрика у границы классов хрупкая. Мягкая — устойчиваяСтрогая метрика («решил») зависит от тонкой границы между соседними классами. Мягкая («не отказал») опирается на грубую границу, которую судьи различают легко. Поэтому строгая метрика расходится между судьями в разы, а мягкая — на десятки процентных пунктов или меньше. Применяй: В отчёте давай обе метрики. Называй модель-судью. Если строгая метрика сильно зависит от судьи, не выдавай её за точное число
📖 Простыми словами

The Missing Compliance Class:LLMGraders That Collapse Jailbreak Success, and a Free Check

arXiv: 2610.24872

Когда ты ставишь дешёвую LLM оценивать ответы, она страдает слепотой к тонким нюансам. Модели на 7–9B параметров не различают полутона: для них «проблема решена» и «бот ловко уклонился» звучат одинаково. В итоге редкий, но критически важный класс просто схлопывается в ноль, а общая точность рисует красивую сказку вроде согласия на 78%, хотя судья тупо проглядел самое главное.

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

Спасает ситуацию метод авторов под названием бесплатная проверка распределения меток. Никаких людей и ручной перепроверки не нужно: просто посчитай, сколько раз судья выдал каждый ярлык. Если на 500 диалогов метка «вопрос решён» выпала трижды, а старшая модель ставит её на заметной доле выборки, твой судья профнепригоден — он банально не умеет использовать этот класс.

Механику тестировали на взломах и джейлбрейках, но принцип универсален. Он касается любого сценария: от оценки ботов поддержки до модерации контента. Везде, где ты просишь модель распознать «скрытую токсичность» или «реальную пользу», легковесная нейросеть молча спрячет сложную категорию под ковёр, выдав красивый, но бесполезный отчёт.

Мораль простая: высокая общая точность LLM-судьи — это чистый самообман. Редкий класс — именно то, ради чего затевалась проверка, а его исчезновение почти не двигает финальный процент. Всегда проверяй частотный срез меток, иначе будешь радостно праздновать успех там, где на самом деле произошёл полный провал.

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с