3,583 papers
arXiv:2610.08162 74 6 окт. 2026 г. FREE

Verification elicitation: вместо списка на выходе — закрытый вопрос по каждой категории и чтение вероятности «да»

КЛЮЧЕВАЯ СУТЬ
«Назови ровно 25 эмоций из 40» роняет модель до уровня случайного угадывания. «Назови около пяти» поднимает ту же модель на тех же картинках до уровня согласия экспертов-людей. Метод проверки закрытым вопросом (verification elicitation) позволяет получить от модели число по каждой категории, а не список из N пунктов. На каждую категорию идёт отдельный вопрос «Да/Нет», а читаем не слово, а вероятность «Да» в первом токене ответа (logprobs). Модель перестаёт выдумывать лишние пункты. Градация уверенности не пропадает. Результат: от уровня случайного угадывания до уровня экспертов. Но нужен API, который отдаёт вероятности.
Адаптировать под запрос
⚡

TL;DR

Verification elicitation («извлечение через проверку») — способ получить оценки от модели без генерации текста. На каждую категорию задаётся отдельный закрытый вопрос вида «Выражает ли это X?». Из ответа берут не слово «да» или «нет», а вероятность токена «да» (logprobs, то есть логиты первого токена ответа). В итоге у каждой категории есть число, и по этим числам можно ранжировать.

Главная находка: требование «назови ровно N пунктов» ломает результат. В исследовании модель просили вернуть ровно 25 эмоций из 40, даже если на лице видны две-три. Остальные ~22 она выдумывала, и по числу пунктов нельзя было понять, что в данных. Одна и та же модель на тех же картинках с тем же метрикой показала качество на уровне случайного угадывания при «ровно 25». Когда ей позволили назвать около пяти, качество дошло до уровня согласия экспертов-людей. Выводы «модели не умеют» оказались ошибкой способа считывания ответа, а не способностей модели.

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

🔬

Схема метода

ШАГ 1: Разбить задачу на категории → список из N категорий
ШАГ 2: На каждую категорию отдельный запрос «Выражает ли это X? Answer:» → один токен ответа
ШАГ 3: Прочитать P(да) из logprobs первого токена → число 0..1 на категорию
ШАГ 4: Ранжировать/сравнивать по числам → НЕ округлять до да/нет

Шаги выполняются в N отдельных запросах через API с logprobs или на локальной модели. В обычном чате метод не воспроизвести.

🚀

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

Задача: Команда маркетплейса разбирает 5 000 отзывов на Wildberries и Ozon. Нужно понять, какие отзывы затрагивают темы «доставка», «брак», «не подошёл размер», «упаковка», «цена». Отзыв может касаться сразу трёх тем или одной. Сначала попробовали «выдели ровно 5 тем из списка» и получили мусор: у каждого отзыва пять тем, у всех одинаково.

Промпт (один запрос на каждую пару «отзыв × тема», 5 запросов на отзыв):

Отзыв покупателя: «Курьер привёз на три дня позже, коробка была помята, но сама кофточка хорошая, села идеально.»

Вопрос: Жалуется ли автор отзыва на доставку?
Ответь одним словом: Да или Нет.
Answer:

Дальше из API берётся вероятность токена «Да» в первой позиции (параметры logprobs и top_logprobs).

Результат: Для каждого отзыва получится таблица «тема → вероятность». Тема, о которой в тексте сказано явно, будет близка к 1. Тема, которой нет, будет около 0. Спорные случаи окажутся посередине. Количество «сработавших» тем будет разным у разных отзывов и будет отражать содержание. По этим числам можно сортировать отзывы («самые сильные жалобы на упаковку») и сравнивать темы между собой. Порог «да/нет» лучше ставить поздно, а при возможности не ставить вовсе.

🧠

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

Слабость. Когда модель пишет ответ текстом, он проходит через формат и парсер. Если промпт требует «ровно 25 пар», счёт пунктов определяется промптом, а не картинкой. Модель не может сказать «подходят только три», и остальные пункты придумывает. Даже если она колеблется, в тексте это не видно: остаётся «7» или слово. Градация уверенности стирается при генерации.

Сильная сторона. Внутри модели информация о степени уверенности есть. На первой позиции ответа у «да» и «нет» разные вероятности, и разница между 0.99 и 0.34 несёт сигнал. Четыре эмоции с вероятностью 0.99+ для глаза выглядят одинаково, но их порядок совпадал с оценками экспертов (7, 5, 3, 2). Ответ «да/нет» сохраняет четыре категории и теряет порядок.

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

Рычаги управления: - Формулировка вопроса: закрытая, с одним токеном ответа («Да/Нет»), чтобы вся масса вероятности легла на нужные токены. - Префилл Answer: — чтобы модели с «рассуждением» не потратили первый токен на мысль, а сразу ответили. - Не бинаризуй: сохраняй число и принимай решение по порогу в самом конце, на своей выборке. - Не фиксируй число пунктов: если генерация неизбежна, разреши «только то, что реально есть».

📋

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

{входной_объект}

Вопрос: {закрытый_вопрос_про_категорию}
Ответь одним словом: Да или Нет.
Answer:

Подставляй: - {входной_объект} — отзыв, письмо, тикет, описание вакансии или другой объект, который оцениваешь. - {закрытый_вопрос_про_категорию} — вопрос в форме «Выражает/содержит/затрагивает ли это X?». Один запрос на одну категорию.

Из ответа бери вероятность токена «Да» из logprobs, а не слово.

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

Нужен небольшой Python-скрипт: для каждого {объекта} из CSV и каждой категории из списка делает отдельный запрос в API с закрытым вопросом «Да/Нет» и сохраняет вероятность токена «Да» из logprobs. Вот шаблон запроса. Адаптируй под мою задачу: {моя задача}. Задавай вопросы, чтобы заполнить поля.

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

LLM спросит про список категорий, формат данных и используемую модель (поддерживает ли она logprobs). Это нужно, потому что метод держится на конкретных токенах «Да/Нет» и на том, что API возвращает вероятности.

⚠️

Ограничения

⚠️ Нужны логиты: метод требует API с logprobs или локальную модель. В обычных чатах и у ряда популярных API вероятностей нет — метод там не воспроизвести. Основное в статье — инженерный приём, а не текстовый промпт.

⚠️ Бинаризация вредит: округление вероятностей до «да/нет» не просто сохраняет часть пользы, а ухудшает результат ниже обычной генерации. Если приходится брать только «да/нет», выигрыша не будет.

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

⚠️ Ранжирование моделей нестабильно: между моделями разница стирается внутри погрешности измерения. По такому бенчмарку нельзя уверенно выбрать «лучшую».

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

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

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

🔍

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

Исследователи взяли готовый бенчмарк EmoNet-Face-HQ: 2 500 сгенерированных портретов, разметка экспертов по 40 категориям эмоций. Авторы бенчмарка показали, что обычные VLM (модели, понимающие картинки) на нём провалились, и вывели: нужна специально дообученная модель EIF. Команда не стала менять ни картинки, ни категории, ни оценки экспертов — изменила только способ считывания ответа. Вместо «напиши JSON из 25 эмоций» — 40 закрытых вопросов и чтение вероятности «да».

Ключевая проверка пришла из самого бенчмарка. Gemini 2.5 Flash там запускали с двумя промптами. С «ровно 25 категорий» она называла 25 на каждой картинке и получала κ ≈ 0.002 (случайность). С другим промптом называла в среднем около 5 и получала 0.419. Одна модель, те же картинки, та же метрика — разница целиком из-за способа извлечения ответа.

Все 11 открытых VLM при генерации не дотянули до уровня согласия экспертов (κ 0.468). При чтении логитов все 11 его превзошли (0.507–0.586), а три статистически обогнали дообученную EIF. Самое неожиданное: дообучение на 21 тыс. запросов почти не изменило результат, а смена способа считывания дала прирост больше. Контрольный эксперимент показал, что вся польза в градации: если те же вероятности округлить до «да/нет», качество упало ниже генерации. Практический вывод: способ считывания ответа может быть важнее самой модели.

💡

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

🔧 Техника: убрать фиксированное число пунктов → вернуть сигнал в обычном чате

В статье показано, что требование «ровно N» вредит. Это можно применить прямо в промпте, хотя этот вариант в статье отдельно не измеряли:

Отметь только те темы из списка, которые реально есть в тексте. Если подходит одна — назови одну, если ни одной — напиши «ни одной». Не добавляй темы ради количества.

🔧 Техника: добавить Answer: в конец → не потерять первый токен

Для моделей с рассуждением заверши закрытый вопрос префиксом Answer:. В статье это нужно, чтобы первый токен был ответом, а не началом рассуждения.

Экстраполяция: вместо вероятностей — шкала уверенности по каждой категории в чате

Если logprobs нет, можно воспроизвести дух метода: попросить оценить каждую категорию отдельным запросом по шкале 0–100. Это не проверено в статье и может дать грубую градацию, а не настоящую вероятность:

Отзыв: «{текст}»
Оцени от 0 до 100, насколько отзыв затрагивает тему «{тема}». Ответь одним числом.
🔗

Ресурсы

  • «The Failure Is in the Readout: Fine-Grained Emotion Recognition Benchmarks Measure Elicitation, Not Perception» — Tobias Hallmen, Fabian Deuser, Robin-Nico Kampa, Norbert Oswald, Elisabeth André. Университет Аугсбурга (Chair for Human-Centered AI), Университет Бундесвера, Мюнхен.
  • Код, валидационный фильтр и предсказания по каждому изображению: https://github.com/saveli/emonet-readout
  • Исходный бенчмарк: EmoNet-Face-HQ (Schuhmann et al.). Набор для переноса: FACES. Близкая работа по чтению вероятности «Yes»: Atabuzzaman et al.

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

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

«Назови ровно 25 эмоций из 40» роняет модель до уровня случайного угадывания. «Назови около пяти» поднимает ту же модель на тех же картинках до уровня согласия экспертов-людей. Метод проверки закрытым вопросом (verification elicitation) позволяет получить от модели число по каждой категории, а не список из N пунктов. На каждую категорию идёт отдельный вопрос «Да/Нет», а читаем не слово, а вероятность «Да» в первом токене ответа (logprobs). Модель перестаёт выдумывать лишние пункты. Градация уверенности не пропадает. Результат: от уровня случайного угадывания до уровня экспертов. Но нужен API, который отдаёт вероятности.

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

Работает так:
1. Разбей задачу на категории.
2. На каждую задай свой вопрос «Выражает ли это X? Answer:».
3. Возьми вероятность токена «Да» из первой позиции ответа.
4. Сравнивай и сортируй по числам.

Число пунктов определяют данные, а не промпт. У одного отзыва сработают три темы, у другого одна. Это как термометр вместо лампочки. Лампочка говорит «горячо» или «холодно». Термометр показывает 37, 39 и 41. Прикол: округлишь вероятности до «да/нет» — получишь результат хуже обычной генерации. Вся польза сидит в оттенках уверенности.

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

Текстовый ответ проходит через формат и парсер. Промпт говорит «ровно 25», и модель набирает 25. Из них около 22 она выдумывает. Сказать «подходят только три» она не может. Колебание в тексте не видно, остаётся просто пункт в списке. Внутри модели уверенность есть. У «Да» и «Нет» на первой позиции разные вероятности, и разница между 0.99 и 0.34 несёт сигнал. Четыре эмоции с вероятностью 0.99+ выглядят одинаково. Но их порядок совпал с оценками экспертов (7, 5, 3, 2). Ответ «да/нет» сохраняет все четыре эмоции и теряет порядок. Дообучение на 21 тыс. запросов почти ничего не изменило. Значит, модель всё «видит», а портит результат способ считывания, то есть генерация текста.

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

Разметка с несколькими метками → отзывы, тикеты, письма, описания вакансий, особенно когда в одном объекте может быть от одной до пяти тем. Также подходит для сортировки по силе признака («самые сильные жалобы на упаковку»). НЕ подходит для обычного чата и API без logprobs. На реальных фото эффект слабее: из десяти моделей выиграла лишь часть, одна стала хуже. Для моделей с рассуждением нужна затравка «Answer:». Без неё вероятность уходит на другие токены, и число превращается в правдоподобный шум. Порог «да/нет» ставь в самом конце и на своей выборке. Перенос на ваши категории надо проверять.

Мини-рецепт

1. Проверь API: отдаёт ли модель logprobs. Нет — метод не заработает.
2. Нарежь категории: один запрос на одну пару «объект × категория».
3. Задай закрытый вопрос: «Затрагивает ли это X? Ответь одним словом: Да или Нет. Answer:».
4. Добавь затравку: Answer: в конце, чтобы модель с рассуждением сразу ответила, а не думала.
5. Забери число: вероятность токена «Да» из первой позиции (logprobs, top_logprobs).
6. Проверь массу: сколько вероятности лежит на «Да/Нет». Если мало, формулировка плохая.
7. Не округляй: сортируй и сравнивай по числам. Порог ставь в конце на своих данных.

Примеры

[ПЛОХО] : Выдели ровно 5 тем из списка: доставка, брак, размер, упаковка, цена. Отзыв: Курьер привёз на три дня позже, коробка была помята, но кофточка села идеально. Итог: у каждого отзыва по пять тем, и все одинаковые.

[ХОРОШО] : пять отдельных запросов на один отзыв, вот первый из них: Отзыв покупателя: «Курьер привёз на три дня позже, коробка была помята, но сама кофточка хорошая, села идеально.» Вопрос: Жалуется ли автор отзыва на доставку? Ответь одним словом: Да или Нет. Answer: Из API берём вероятность токена «Да». Получается таблица: доставка 0.97, упаковка 0.91, размер 0.03, брак 0.06, цена 0.02. Две темы сработали, остальные нет. Следующий отзыв может дать одну тему или четыре. По колонке «упаковка» легко отсортировать самые злые жалобы.
Источник: The Failure Is in the Readout: Fine-Grained Emotion Recognition Benchmarks Measure Elicitation, Not Perception
ArXiv ID: 2610.08162 | Сгенерировано: 2026-10-07 06:00

Проблемы LLM

ПроблемаСутьКак обойти
Текстовый ответ стирает оттенки уверенностиПросишь модель оценить много категорий и вернуть список или оценки текстом. Внутри у модели есть градация: где-то почти точно, где-то сомнение. В тексте остаётся голое слово или цифра "7". Сомнение не видно. Четыре "уверенных" пункта выглядят одинаково, хотя порядок между ними важен.Не бери оценку из текста. Задай по одному закрытому вопросу на категорию. Читай вероятность токена "Да" из API. Подробности в методе ниже.

Методы

МетодСуть
Вопрос "Да/Нет" на каждую категорию и чтение вероятности — число вместо спискаЧто делать: раздели задачу на N категорий. На каждую категорию отправь отдельный запрос. Например: Отзыв: {текст} / Вопрос: Жалуется ли автор на доставку? / Ответь одним словом: Да или Нет. / Answer:. Из API возьми вероятность первого токена ответа (параметры logprobs, top_logprobs). Получишь число от 0 до 1 на категорию. Сортируй и сравнивай по этим числам. Почему работает: каждая категория решается независимо от остальных. Никто не навязывает число пунктов. Уверенность читается до того, как генерация текста её сотрёт. Дообучение не нужно. Нюансы: вопрос должен быть закрытым, с одним токеном ответа. Так вся вероятность ляжет на "Да" и "Нет". Начало ответа Answer: подставь заранее. Иначе модели с рассуждениями потратят первый токен на мысль, и число станет шумом. Проверь, сколько вероятности лежит на "Да/Нет". Порог "да/нет" ставь в самом конце, на своей выборке. Когда да: много категорий, объект может подходить под несколько, нужно ранжирование (отзывы, тикеты, письма, вакансии). Когда нет: обычный чат или API без вероятностей. Один ответ без сравнения. Нишевые категории без проверки на своих данных. На реальных данных выигрыш бывает слабым, поэтому сверяй с эталоном.

Тезисы

ТезисКомментарий
Требование "ровно N пунктов" заставляет модель выдумыватьЕсли в запросе зафиксировано число пунктов, их количество определяет запрос, а не данные. Реально подходят три пункта, а просили двадцать пять. Остальные модель придумает. По длине списка уже нельзя понять, что было в объекте. Качество может упасть почти до случайного. Виновата не слабая модель, а способ считывания ответа. Применяй: пиши "только то, что реально есть, от 0 до N". Разреши пустой ответ. Если можно, переходи на отдельные вопросы по категориям.
📖 Простыми словами

The Failure Is in the Readout: Fine-Grained Emotion Recognition Benchmarks Measure Elicitation, Not Perception

arXiv: 2610.08162

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

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

Реально работает метод verification elicitation — извлечение смысла через закрытую проверку. Вместо простыни текста ты задаёшь модели отдельный вопрос на каждую категорию и забираешь logprobs — вероятность токена «да». Получаешь честную математику от 0.0 до 1.0, по которой можно объективно ранжировать признаки, забыв про ненадёжный парсинг текста.

Исследовали распознавание микроэмоций, но принцип универсален. Метод идеально решает сортировку 5 000 отзывов на маркетплейсе, тегирование обращений в саппорт или модерацию контента. Везде, где у объекта может быть ноль меток или сразу три, обычная генерация даёт сбой, а логиты первого токена вытаскивают чистую суть без лишних фантазий.

Короче: хватит мучить модель текстом там, где нужна банальная калибровка уверенности. Генерация убивает полутона восприятия, а извлечение скрытых вероятностей возвращает адекватность. Внедряй ранжирование через logprobs во все пайплайны классификации: сохранишь точность данных и забудешь вопрос, откуда модель опять высрала этот бред.

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

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

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