3,583 papers
arXiv:2610.35179 80 26 окт. 2026 г. FREE

Аудит LLM-разметки по кодбуку: высокие общие метрики скрывают провалы по отдельным меткам

КЛЮЧЕВАЯ СУТЬ
Проблема: общая точность разметки прячет провалы по отдельным меткам. Метод позволяет проверить, можно ли доверять LLM при разметке текстов по списку меток с определениями. Считай качество по каждой метке отдельно, а не одним средним числом. Добавь повторные прогоны и подмену названий меток на «Метка 1»: так видно, читает ли модель твои определения. Редкие метки размечаются хуже всего, а частоты по ним плавают от запуска к запуску.
Адаптировать под запрос
⚡

TL;DR

Если вы просите LLM разметить тексты по списку меток с определениями (кодбук, то есть инструкция разметки), общая точность почти ничего не гарантирует. Средний балл может выглядеть прилично, а редкие метки при этом размечаются плохо. Ответы плывут от прогона к прогону. Модель часто опирается на названия меток, а не на ваши определения. Рецепты «как писать кодбук» из других статей на ваших данных могут сработать наоборот.

Типичная боль такая. В отчёте «точность 60%», вы считаете частоты по категориям и делаете выводы. Но редкая метка размечается заметно хуже общего среднего. Модель к тому же ставит метки щедрее, чем эксперты, и завышает частоту явлений. Второй запуск на тех же текстах даёт другие цифры. Причина простая: итоговый балл усредняет все метки, и у частых категорий он высокий. Редкие метки в этом среднем почти не видны. Модель при этом читает название метки и достраивает смысл из общих знаний, а не из вашего определения.

Авторы предлагают минимальный набор проверок. Считать качество по каждой метке отдельно. Прогнать разметку несколько раз. Подменить названия меток нейтральными («Метка 1») или перемешать названия и определения, чтобы проверить, читает ли модель определения. Проверить кодбук на тексте из другого источника. Если промпт улучшала сама LLM, перечитать определения меток: они могли сдвинуться по смыслу.

🔬

Схема метода

ШАГ 1: Собери контрольную выборку, размеченную людьми → таблица «текст — эталонные метки»
ШАГ 2: Разметь её моделью и считай качество ПО КАЖДОЙ метке → найди худшую метку и разрыв со средним
ШАГ 3: Диагностика «читает ли модель определения» (три отдельных запроса):
        • Label-Only — только названия, без определений
        • Generic — названия заменены на «Метка 1, Метка 2…»
        • Swapped — названия и определения перемешаны
ШАГ 4: Повтори разметку 3–10 раз → смотри разброс по меткам, усредняй
ШАГ 5: Проверь на тексте другого типа/источника → сравни метки
ШАГ 6: Если промпт правила LLM → сверь определения меток «до/после» вручную

Каждый шаг — отдельный запрос или отдельная серия запросов. Шаги 3–5 повторяют один и тот же промпт с одним изменением.

🚀

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

Задача: Вы руководитель поддержки на Wildberries-подобном маркетплейсе. Нужно разметить 5 000 отзывов покупателей по меткам: «Доставка», «Качество товара», «Возврат денег», «Несоответствие описанию», «Подозрение на подделку». Последняя метка редкая: в выборке из 200 отзывов её получили всего 6. Директору нужна доля отзывов про подделки по кварталам. Вы сначала проверяете, можно ли доверять модели.

Промпт (основной, запускается 5 раз на одной выборке из 200 отзывов):

Ты размечаешь отзывы покупателей маркетплейса. Для каждого отзыва выбери 
все подходящие метки из списка. Опирайся ТОЛЬКО на определения ниже, 
не додумывай то, чего нет в тексте.

Метки и определения:
1. Доставка — отзыв о сроках, упаковке при доставке, работе курьера или пункта выдачи.
2. Качество товара — отзыв о материалах, поломках, браке, износе.
3. Возврат денег — покупатель описывает попытку вернуть деньги или товар, или проблемы с возвратом.
4. Несоответствие описанию — товар отличается от фото, размера, цвета или характеристик в карточке.
5. Подозрение на подделку — покупатель прямо пишет, что товар, по его мнению, не оригинал 
   (поддельный бренд, отличия от оригинала, отсутствие маркировки). 
   Просто плохое качество — это НЕ подделка.

Ответ: JSON-список меток для каждого отзыва. Если ни одна не подходит — пустой список.

Отзывы:
{отзывы}

Промпт (диагностика Generic — тот же, но метки без смысла в названии):

Те же отзывы, те же определения, но названия меток заменены:
Метка A — отзыв о сроках, упаковке при доставке, работе курьера или пункта выдачи.
Метка B — отзыв о материалах, поломках, браке, износе.
...
Метка E — покупатель прямо пишет, что товар, по его мнению, не оригинал...

Результат: Вы получите пять таблиц разметки одной и той же выборки. Сравните их с ручной разметкой по каждой метке отдельно. Вероятно, у «Доставки» качество высокое, а у «Подозрения на подделку» заметно ниже и разброс между прогонами больше. По авторам, редкие метки страдают сильнее всего. Если в варианте Generic качество резко падает, модель опирается на названия меток. Тогда в определениях нужно явно прописать, чем «подделка» отличается от «просто плохого качества», и перепроверить. Если вы не посчитали частоты по прогонам, вы не узнаете, что доля подделок в отчёте директору «плавает».

🧠

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

Слабость. Итоговая метрика (точность, общий F1) усредняет метки по числу примеров. Частые категории тянут среднее вверх, а редкие почти не влияют на итог. Модель к тому же не «читает определения как закон»: она генерирует ответ по общему впечатлению от текста и по названиям меток, которые для неё уже что-то значат. Плюс случайность генерации: при температуре выше нуля прогоны различаются.

Сильная сторона. Модель хорошо замечает формальные различия: заменили названия на «Метка 1» — результат изменился. Такие подмены дёшевы и однозначны. Сравнить свою разметку с ручной по каждой метке тоже просто.

Как метод это использует. Подмены и повторы превращают смутное «кажется, работает» в измеримые сигналы. Падение качества при Generic или Swapped означает, что модель опирается на названия. Большой разброс между прогонами означает, что метку нельзя брать из одного запуска. Большой разрыв между худшей меткой и средним означает, что по этой метке нельзя считать частоты.

Рычаги: - Число прогонов: 3 уже заметно сглаживает шум (по данным авторов), 10 даёт надёжнее; для дорогих моделей хватит 3. - Формат кодбука (короткий / полный / с пометками «определение:», «пример:»): не принимайте на веру, проверяйте на своих текстах. Авторы показали, что эффект зависит от данных. - Порядок меток: проверьте прямой и обратный порядок. - Редкие метки: держите в контрольной выборке достаточно примеров именно для них.

📋

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

Основной промпт разметки и три диагностических варианта (меняется только блок меток):

Ты размечаешь {тип_текстов}. Для каждого текста выбери {одну_или_несколько} 
меток из списка. Опирайся ТОЛЬКО на определения ниже. Не додумывай то, 
чего нет в тексте. Если ничего не подходит — верни пустой список.

[ВАРИАНТ 0: исходный]
{Название_1} — {определение_1}
{Название_2} — {определение_2}
...

[ВАРИАНТ Label-Only: без определений]
{Название_1}
{Название_2}
...

[ВАРИАНТ Generic: нейтральные названия]
Метка 1 — {определение_1}
Метка 2 — {определение_2}
...

[ВАРИАНТ Swapped: названия и определения перемешаны]
{Название_1} — {определение_2}
{Название_2} — {определение_1}
...

Формат ответа: JSON, для каждого текста список меток.

Тексты:
{тексты}

Подставляйте: тип текстов (отзывы, обращения, посты), метки с определениями, выборку 100–200 текстов с ручной разметкой для сравнения. Запускайте варианты по очереди и каждый несколько раз.

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

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

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

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

⚠️

Ограничения

⚠️ Нужна эталонная разметка. Без ручной разметки контрольной выборки сравнивать не с чем. Хотя бы 100–200 текстов размечают люди из вашей команды, и редкие метки в них должны быть представлены.

⚠️ Старые и малые модели. Основные эксперименты шли на компактной открытой модели (Mistral-7B) при небольшой случайности. Сравнение с пятью моделями есть, но это тоже небольшие и средние модели. Как это выглядит у самых сильных моделей сегодня, статья не показала.

⚠️ Универсального рецепта кодбука нет. Совет «пиши короче», «ставь структурные маркеры» или «ставь частые метки первыми» помогал на одних данных и вредил на других. Эти правила нужно проверять на своём материале.

⚠️ Нет победителя среди моделей. Лучшая модель на одной задаче оказывалась худшей на другой. Выбор «самой сильной» без теста на своих данных ненадёжен.

⚠️ Автооптимизация промпта. Авторы предупреждают, что автоматическая доработка кодбука по метрике может незаметно сдвигать смысл меток и усиливать провалы. Детали этой части в доступном тексте обрезаны. Здесь есть только заявленный вывод, без цифр.

⚠️ Статья не даёт готового промпта. Диагностики описаны, но шаблон выше собран на их основе.

🔍

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

Исследователи взяли четыре набора данных. Два уже существовали: протесты в США (CCC, 4 метки) и влияние минимальной зарплаты (12 меток). Два новых создали сами по теме «создание ценности»: один по научным текстам (8 меток), второй по новостям (60 документов, чтобы проверить перенос на другой источник). Основной моделью была компактная Mistral-7B, дополнительно сравнили ещё четыре, включая GPT-4o-mini и DeepSeek-V3. Каждый эксперимент повторяли 10 раз, считали доверительные интервалы и проверяли значимость.

Главное в дизайне: отдельно считали качество по каждой метке, включая F1 худшей метки. Разрыв между микро-F1 и худшей меткой составил около 26–30 пунктов. В агрегированном отчёте это не видно. На научных текстах доля документов, где все метки угаданы верно, оказалась около 2%, хотя микро-F1 был около 45%. Точность по меткам оказалась ниже полноты в 17 из 24 меток: модель ставит метки щедрее, чем эксперты.

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

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

💡

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

🔧 Техника: добавить голосование по прогонам → стабильная метка. Запустите разметку 3 раза и берите метку, которую поставили минимум 2 из 3 прогонов. Для редких меток отдельно отмечайте тексты, где прогоны разошлись, и отправляйте их на ручную проверку. Усреднение трёх прогонов сглаживало разброс, по данным статьи. Голосование как правило — идея, а не из статьи.

🔧 Техника: усилить контрольную выборку редкими метками → честная оценка. Если в случайной выборке из 200 текстов нужная метка встретилась 5 раз, добавьте вручную ещё 20–30 примеров именно с ней и считайте качество по ней отдельно. Статья показывает, что редкие метки страдают сильнее всего. Способ добора примеров — это моя экстраполяция.

🔗

Ресурсы

  • High Scores, Hidden Failures: Evaluating Codebook-Based LLM Content Analysis: Elena Senger, Yuri Campbell, Rob van der Goot, Barbara Plank.
  • Университеты и институты: MaiNLP (LMU Munich & MCML), Fraunhofer ISI, IT University of Copenhagen.
  • Данные: huggingface.co/datasets/ElenaSenger/value-creation-science, huggingface.co/datasets/ElenaSenger/value-creation-news
  • Код: github.com/elenasenger/high-scores-hidden-failures
  • Упоминаемые работы: Halterman & Keith (2025), диагностики Generic Label и Swapped Label; Ruckdeschel (2025), про переинтерпретацию; Abraham et al. (2025), Automatic Prompt Optimization; Zhao et al. (2025), SCALE.

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

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

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

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

Итоговая метрика усредняет все метки. Частые категории тянут среднее вверх. Редкие почти не видны. Для директора отчёт «точность 60%» выглядит нормально. А доля редкой метки может быть полной цифрой с потолка. Поэтому проверка идёт в несколько шагов. Сначала собираешь 100–200 текстов с ручной разметкой. Потом считаешь качество по каждой метке. Потом гоняешь тот же промпт 3–10 раз и смотришь разброс. Подмени названия меток на «Метка 1, Метка 2» – если качество рухнуло, модель опиралась на названия, а не на твои определения. Ещё один тест: перемешай названия и определения. Модель, которая читает определения, запутается. Модель, которая читает названия, не заметит подвоха. Прикол: рецепты «как писать кодбук» из других статей на твоих данных могут сработать наоборот. Совет «пиши короче» помогал на одних текстах и вредил на других.

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

Модель не читает определения как закон. Она отвечает по общему впечатлению от текста и по названиям меток, у которых уже есть смысл из обучения. Плюс случайность: при ненулевой температуре два запуска дают разные цифры. Подмены дёшевы и однозначны. Название заменили на «Метка 1» – результат изменился, значит, опора шла на название. Сравнить с ручной разметкой по каждой метке тоже просто. Проверка превращает «кажется, работает» в три измеримых сигнала: разрыв худшей метки со средним, разброс между прогонами и падение при подмене названий. Ещё модель ставит метки щедрее экспертов. Это завышает частоты явлений в отчёте. Три прогона уже заметно сглаживают шум, десять надёжнее.

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

Разметка отзывов, обращений, постов и комментариев по списку меток → особенно когда по меткам считают частоты и показывают цифры руководству, а часть меток редкая. Хорошо для задач, где вывод строится на доле явления по кварталам. НЕ подходит, если разметка разовая, цифры никому не нужны и нет эталонной выборки с ручной разметкой. Без неё сравнивать не с чем.

Мини-рецепт

1. Собери эталон: 100–200 текстов, размеченных людьми. Редкие метки должны быть в выборке.
2. Разметь моделью и посчитай по меткам: найди худшую метку и разрыв со средним. Не смотри на одно общее число.
3. Гони тот же промпт 3–10 раз: смотри, как скачут цифры по каждой метке. Для дорогих моделей хватит 3.
4. Проверь, читает ли модель определения. Сделай три запроса: только названия без определений, названия заменены на «Метка 1, Метка 2», названия и определения перемешаны. Если качество не меняется, модель определения не читает.
5. Проверь на тексте из другого источника. Кодбук мог подойти только под один тип текстов.
6. Если промпт правила сама LLM: перечитай определения меток до и после. Смысл мог сдвинуться.
7. Реши по результату. Метку с большим разбросом не бери из одного запуска. Метку с большим провалом не используй для частот. Прямо допиши в определении, чем она отличается от соседней.

Примеры

[ПЛОХО] : Разметь 5000 отзывов по меткам: доставка, качество, возврат денег, подделка. Дай итоговую долю подделок. Один запуск, один общий балл, никакой проверки.
[ХОРОШО] : Ты размечаешь отзывы покупателей маркетплейса. Выбери все подходящие метки из списка. Опирайся ТОЛЬКО на определения ниже. Подделка – покупатель прямо пишет, что товар не оригинал. Просто плохое качество – это НЕ подделка. Ответ: JSON-список меток. Запусти 5 раз на 200 отзывах, посчитай качество по каждой метке, потом повтори с названиями Метка A, Метка B, Метка C и сравни. Если у редкой метки «подделка» качество низкое, а разброс между прогонами большой – не показывай директору её долю по кварталам.
Источник: High Scores, Hidden Failures: Evaluating Codebook-Based LLM Content Analysis
ArXiv ID: 2610.35179 | Сгенерировано: 2026-10-29 13:02

Проблемы LLM

ПроблемаСутьКак обойти
Общая точность разметки скрывает провалы по отдельным меткамПросишь модель разметить тексты по списку меток. Смотришь один общий балл. Он выглядит прилично. Но редкие метки модель размечает заметно хуже среднего. Частые метки тянут итог вверх. Редкие в нём почти не видны. Доли по редким меткам в отчёте получаются невернымиСчитай качество по каждой метке отдельно. Найди худшую метку и разрыв со средним. Для редких меток держи в проверочной выборке достаточно примеров. Если метка плохая, не публикуй по ней частоты
Один и тот же запрос на тех же текстах даёт разные цифрыЗапускаешь разметку дважды. Получаешь разные результаты. Особенно скачут редкие метки. Если взять один запуск, доля явления в отчёте случайна. Выводы по кварталам строятся на шумеЗапусти тот же запрос 3–10 раз. Смотри разброс по каждой метке. Метку с большим разбросом не бери из одного запуска. Усредняй результаты. Для дорогих моделей хватит трёх запусков
Модель опирается на названия меток, а не на ваши определенияВы прописали определение метки. Модель читает название и достраивает смысл из общих знаний. Определение работает как слабая подсказка. Метка «подделка» ловит любое плохое качество, потому что слово звучит похожеПроверь подменой. Замени названия на «Метка 1, Метка 2». Или перемешай названия и определения. Если качество почти не меняется, определения не читаются. Если рухнуло, модель шла по названиям. Тогда прямо допиши в определении, чем метка отличается от соседней
Модель ставит метки щедрее людейМодель отмечает явление там, где эксперт его не видит. Частота явления в отчёте завышена. Разница особенно заметна на редких меткахСравни число меток у модели и у людей на проверочной выборке. Добавь в запрос границу: «просто плохое качество не считается подделкой». Не переноси долю модели в отчёт без поправки

Методы

МетодСуть
Подмена названий меток — проверка, читает ли модель определенияВозьми запрос с метками и определениями. Сделай три копии. Первая: только названия, без определений. Вторая: названия заменены на «Метка 1, Метка 2». Третья: названия и определения перемешаны. Запусти все на одной выборке с ручной разметкой. Сравни качество по каждой метке. Почему работает: название метки несёт смысл из обучения модели. Если убрать или перепутать его, остаётся только определение. Падение показывает, на что опиралась модель. Падения нет – определения не читаются. Когда да: есть размеченная выборка, нужно доверять частотам. Когда нет: выборки с ручной разметкой нет, сравнивать не с чем
Повторные запуски разметки — оценка разбросаЗапусти один запрос на одних текстах 3–10 раз. Считай качество и частоты по каждой метке в каждом запуске. Смотри размах между запусками. Усредняй. Почему работает: модель генерирует ответ с долей случайности. Один запуск — одна случайная выборка из возможных ответов. Несколько запусков показывают, какие метки стабильны, а какие плавают. Когда да: по меткам считаются доли и показываются цифры. Когда нет: разовая разметка без отчёта
Проверка списка меток на тексте другого типаВозьми список меток и определения. Прогони их на текстах из другого источника. Сравни качество по меткам с первым набором. Почему работает: список меток мог подойти под один тип текстов, а на другом ломается. Совет «пиши короче» или «ставь частые метки первыми» помогал на одних данных и вредил на других. Когда да: собираешься использовать один список на разных каналах. Когда нет: все тексты из одного источника и одного вида
Ручная сверка определений после правки запроса модельюЕсли запрос улучшала сама LLM, положи рядом определения меток до и после. Прочитай глазами. Отметь, где смысл сдвинулся. Верни прежнее определение там, где метка потеряла границу. Почему работает: автоматическая доработка гонится за общей метрикой и может незаметно менять смысл меток. Общий балл растёт, а редкая метка при этом портится. Когда да: любая автодоработка запроса. Когда нет: запрос написан вручную и не менялся

Тезисы

ТезисКомментарий
Общий балл усредняет метки и прячет слабыеИтоговая точность считается по всем примерам сразу. Частые категории дают большинство примеров. Редкие почти не влияют на число. Применяй: смотри таблицу качества по каждой метке. Худшая метка важнее среднего
Рецепты оформления списка меток зависят от данныхКороткие определения, структурные пометки, порядок меток — всё это помогает на одних текстах и вредит на других. Универсального правила нет. Применяй: проверяй каждый приём на своей выборке. Не копируй совет из чужого опыта без теста
Лучшая модель для одной разметки может быть худшей для другойВыбор по общей репутации модели ненадёжен. Разные задачи и списки меток дают разный порядок моделей. Применяй: сравни две-три модели на своей проверочной выборке, прежде чем размечать всё
Падение качества при подмене названий — признак опоры на слова, а не на определенияЕсли после замены названий на нейтральные результат заметно хуже, модель шла по смыслу самого слова. Если не изменился, определения читаются. Применяй: делай подмену до запуска большой разметки и допиши границы там, где просело
📖 Простыми словами

High Scores, Hidden Failures: Evaluating Codebook-BasedLLMContent Analysis

arXiv: 2610.35179

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

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

Исследование вскрывает конкретные грабли: общая точность и Micro-F1 здесь бесполезны, оценивать разметку нужно только по метрикам редких классов. Если категория вроде «подделка» встречается всего в 6 отзывах из 200, модель запросто проигнорирует их все, а общий отчёт останется зелёным. Вдобавок разметка плывёт от запуска к запуску, а распиаренные в статьях фишки оформления инструкций на твоих реальных данных могут дать ровно противоположный эффект.

Тестировали на отзывах, но грабли абсолютно универсальны. Та же беда вылезет в модерации контента, поиске багов в логах, юридическом аудите или разборе инцидентов безопасности — везде, где редкое событие стоит кучу денег. Пока ты радуешься, как ловко алгоритм сортирует типовой спам, он стабильно сливает критические судебные риски и токсичные скандалы просто потому, что они редко встречаются в выборке.

Короче: перестань молиться на средний балл — усреднённая точность всегда врёт. Всегда выкатывай отдельные стресс-тесты на редкие метки, зажимай температуру генерации и выбирай говорящие имена для категорий, ведь модель всё равно поймёт их буквально. Иначе твоя автоматизация останется генератором липового спокойствия, который на первой же проверке директором разобьётся о суровую реальность.

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

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

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