3,583 papers
arXiv:2606.26541 79 25 июня 2026 г. FREE

Structured Codebook Prompting: как LLM надёжно кодирует открытые ответы при правильной структуре промпта

КЛЮЧЕВАЯ СУТЬ
Опытный аналитик понимает, куда отнести ответ «нас не пускали на общее собрание» — это дискриминация, просто высказанная косвенно. LLM так не может. Но если записать явно то, что аналитик держит в голове после лет практики, — модель достигает α = 0.8+ по Крипендорфу, а это профессиональный стандарт согласованности между экспертами. Метод позволяет автоматизировать ручную классификацию открытых ответов — опросы, интервью, обращения — без найма аналитиков и без потери точности. Фишка: к каждой категории добавь граничный случай — где заканчиваются «инструменты» и начинаются «процессы». Это именно то, что нельзя угадать, но можно написать.
Адаптировать под запрос

TL;DR

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

Главная ловушка: если просто написать "классифицируй по темам: еда, медицина, безопасность" — модель будет работать хуже. Качество промпта напрямую определяет качество классификации. LLM, в отличие от человека, не может "додуматься" по контексту — ей нужно явно написать то, что опытный аналитик делает по умолчанию из профессиональной интуиции.

Исследование показывает: при структурированном кодбуке + включённом рассуждении несколько моделей достигают согласованности с экспертами уровня α = 0.8+ по Крippendorff (это профессиональный стандарт). Но точность сильно варьируется по категориям — модели особенно слабы там, где нужда выражена косвенно: намёками, через описание отказа в услуге, без прямого называния проблемы.


🔬

Схема метода

ШАГ 1: Составь кодбук → для каждой категории: название + определение + граничные случаи
        (выполняется один раз, в начале промпта)

ШАГ 2: Дай инструкцию на рассуждение → "сначала проанализируй контекст, потом присвой код"
        (часть системного промпта)

ШАГ 3: Передай текст на классификацию → одна или несколько единиц за раз
        (основной рабочий запрос)

[Опционально] ШАГ 4: Повтори шаг 3 несколько раз с одними текстами → возьми 
        наиболее частый ответ для спорных случаев

Всё выполняется в одном чате. Шаги 1–2 — это системный промпт или первое сообщение. Шаг 3 — рабочие запросы с текстами.


🚀

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

Задача: HR-менеджер Яндекса анализирует 200 открытых ответов из ежегодного опроса сотрудников: "Что мешает тебе работать эффективнее?" Нужно разбить ответы по темам, чтобы передать приоритеты руководству.

Промпт:

Ты — аналитик HR. Твоя задача — кодировать открытые ответы сотрудников 
по заранее заданным категориям (деductive coding).

КОДБУК:

1. ИНСТРУМЕНТЫ
   Ответ говорит о нехватке или плохом качестве рабочих инструментов, 
   ПО, оборудования, доступов, инфраструктуры.
   Граничный случай: жалоба на медленный VPN — сюда. Жалоба на 
   бюрократию при получении доступов — ПРОЦЕССЫ.

2. ПРОЦЕССЫ
   Ответ говорит о неэффективных внутренних процессах: согласования, 
   бюрократия, ненужные встречи, непрозрачные процедуры.
   Граничный случай: "слишком много митингов" — сюда. "Нет нормального 
   инструмента для планирования встреч" — ИНСТРУМЕНТЫ.

3. КОММУНИКАЦИЯ
   Ответ говорит о проблемах с передачей информации: между командами, 
   с руководством, непонятные приоритеты, нет обратной связи.

4. НАГРУЗКА
   Ответ говорит об объёме задач, приоритизации, перегрузке, 
   невозможности фокусироваться. Включает размытость зоны ответственности.

5. ДРУГОЕ
   Ответ содержит проблему, которая не входит ни в одну из категорий выше.

6. НЕ ПО ТЕМЕ
   Ответ не содержит конкретной проблемы или не отвечает на вопрос.

ИНСТРУКЦИЯ:
Для каждого ответа:
а) Сначала кратко опиши, что именно говорит сотрудник (1-2 предложения)
б) Укажи, какая категория подходит и почему
в) Присвой финальный код

Ответ сотрудника: "[вставить текст]"

Результат: Модель покажет явную цепочку рассуждений для каждого ответа: о чём говорит сотрудник → почему это та или иная категория → финальный код. Спорные случаи будут видны сразу — модель укажет, почему сложно выбрать. Для 200 ответов можно передавать по 10-20 за раз или оформить как таблицу.


🧠

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

Проблема "в лоб": Когда просишь LLM "классифицируй по темам" без чёткого кодбука — модель опирается на статистические паттерны из обучения, а не на твою логику. Категории размываются, граничные случаи летят в разные стороны, результат непредсказуем.

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

Как метод использует эту силу: Кодбук убирает двусмысленность. Модель не "интерпретирует" — она сопоставляет текст с конкретными определениями. Инструкция "сначала рассуждай" заставляет модель генерировать промежуточный текст о смысле ответа — и это снижает ошибки, потому что на этапе рассуждения часто обнаруживается то, что "в лоб" игнорировалось бы.

Рычаги управления: - Детальность кодбука → больше граничных случаев = меньше ошибок на краях, но длиннее промпт - Инструкция на рассуждение → убери её, если нужна скорость; оставь, если важна точность на спорных текстах - Повтор классификации → для критически важных решений прогони один и тот же текст 2-3 раза, возьми совпадающий ответ - Граничные случаи → самый мощный рычаг: напиши примеры именно из твоей области, где интуитивно непонятно куда отнести


📋

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

Ты — [роль аналитика]. Твоя задача — кодировать тексты по заранее 
заданным категориям.

КОДБУК:

1. {КАТЕГОРИЯ_1}
   Определение: {что именно сюда входит — конкретно и без размытых слов}
   Граничный случай: {где заканчивается эта категория и начинается соседняя}

2. {КАТЕГОРИЯ_2}
   Определение: {определение}
   Граничный случай: {граничный случай}

[... все категории]

{ПОСЛЕДНЯЯ}: ДРУГОЕ
   Текст содержит проблему, которая не входит ни в одну из категорий выше.

{ПРЕДПОСЛЕДНЯЯ}: НЕ ПО ТЕМЕ
   Текст не содержит ответа на вопрос или нерелевантен задаче.

ИНСТРУКЦИЯ:
Для каждого текста:
а) Кратко опиши суть (1-2 предложения)
б) Объясни, почему подходит именно эта категория
в) Присвой финальный код

Текст: "{текст_для_классификации}"

Плейсхолдеры: - {роль аналитика} — HR-аналитик, контент-модератор, исследователь обратной связи - {КАТЕГОРИЯ_N} — твои конкретные темы (3-10 штук) - {определение} — что конкретно входит в категорию, без абстракций - {граничный случай} — где заканчивается одна категория и начинается соседняя - {текст_для_классификации} — один ответ или несколько нумерованных


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

Вот шаблон для структурированной классификации текстов (qualitative coding). 
Адаптируй под мою задачу: [опиши что нужно классифицировать и зачем].
Задавай вопросы, чтобы заполнить поля.

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

LLM спросит: какие категории нужны, что считать граничным случаем, какие тексты будут типичными — потому что без этого кодбук будет размытым и даст нестабильный результат.


⚠️

Ограничения

⚠️ Деductive only: Метод работает только если категории уже известны заранее. Если нужно найти темы из данных с нуля (inductive coding) — LLM справляется плохо: генерирует непоследовательные категории, которые не сходятся между запусками.

⚠️ Косвенное выражение: Модели плохо распознают нужду, выраженную намёком или через описание последствий. "Нас не пускали на общее собрание" как сигнал дискриминации — не "нас дискриминировали". В таких категориях ошибаются даже лучшие модели. Добавляй в кодбук примеры именно косвенных формулировок.

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

⚠️ Синтетические данные: Исследование проводилось на искусственно созданных транскриптах. Реальные данные — с диалектами, опечатками, эмоциональной нагрузкой — могут давать другие результаты.


🔍

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

Команда из KoboToolbox, McGill и Harvard взяла 150 синтетических транскриптов гуманитарных интервью — разговоры беженцев о своих нуждах. Сначала два опытных кодировщика независимо разметили все тексты по 9 темам (еда, медицина, безопасность, доход и т.д.), спорные случаи — 5,3% — разрешал третий эксперт. Получился "золотой стандарт" с уровнем согласованности α = 0.938.

Затем 46 моделей прогнали через те же 150 транскриптов — 48 300 итераций классификации — и сравнили с золотым стандартом. Интересно, что несколько моделей с включённым режимом рассуждения (reasoning-enabled) вышли на уровень α ≈ 0.8, что соответствует порогу надёжного человека-кодировщика. Без структурированного промпта и рассуждений — хуже.

Самое поучительное: агрегированный показатель лгал. Модели с высоким общим α систематически проваливались на категории "Инклюзивность" (дискриминация, выраженная косвенно) — именно там, где цена ошибки наибольшая. Это предупреждение: смотри не только на общую цифру, но на производительность по каждой теме отдельно.


💡

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

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

В кодбуке после определения добавь:

Прямое выражение: "Нас дискриминируют по национальности"
Косвенное выражение: "Врачи всегда заняты, когда приходим мы, 
но не когда приходят другие"
Оба примера — категория ДИСКРИМИНАЦИЯ

LLM опирается на паттерны формулировок из кодбука. Дашь косвенные примеры — начнёт распознавать косвенное.


🔧 Техника: multi-run валидация для спорных кейсов

Если результат классификации влияет на важное решение — прогони один и тот же текст 3 раза в отдельных запросах (или в трёх чатах). Возьми код, который встретился минимум 2 раза из 3. Это снижает стохастический шум — LLM иногда "флипает" между двумя близкими вариантами, и повтор стабилизирует результат.


🔧 Экстраполяция: классификация обратной связи о продукте

Принцип кодбука универсален. Команда в Авито, которая разбирает жалобы продавцов, может использовать тот же подход: категории (проблемы с верификацией / технические баги / вопросы оплаты / политика площадки), определения под каждую, граничные случаи — и LLM кодирует поток обратной связи предсказуемо и воспроизводимо.


🔗

Ресурсы

Can Large Language Models Reliably Code Qualitative Humanitarian Data? A Benchmark Study Against Human Expert Adjudication Preprint, не прошёл рецензирование на момент публикации.

Авторы: Jerome Marston, Tino Kreutzer, Salomé Garnier (KoboToolbox / Kobo Inc), Ella Boone (McGill University), Phuong N. Pham, Patrick Vinck (Harvard University)

Контакт: tino.kreutzer@kobo.ngo

Платформа KoboToolbox: kobo.ngo — open-source инструмент для гуманитарных данных, в котором разрабатывается AI-функциональность для кодирования


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

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

Опытный аналитик понимает, куда отнести ответ «нас не пускали на общее собрание» — это дискриминация, просто высказанная косвенно. LLM так не может. Но если записать явно то, что аналитик держит в голове после лет практики, — модель достигает α = 0.8+ по Крипендорфу, а это профессиональный стандарт согласованности между экспертами. Метод позволяет автоматизировать ручную классификацию открытых ответов — опросы, интервью, обращения — без найма аналитиков и без потери точности. Фишка: к каждой категории добавь граничный случай — где заканчиваются «инструменты» и начинаются «процессы». Это именно то, что нельзя угадать, но можно написать.

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

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

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

Без кодбука модель угадывает по паттернам из обучения — не по твоей логике. Паттерны чужие, категории размываются, граничные случаи летят куда попало. С кодбуком модель не угадывает — сопоставляет. Граничные случаи — самый мощный рычаг: они убирают именно ту зону неоднозначности, где человек-аналитик опирается на интуицию, а модель теряется. Инструкция на рассуждение снижает ошибки ещё раз: на этапе «опиши суть своими словами» модель часто замечает косвенный смысл, который при прямой классификации проигнорировала бы.

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

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

Мини-рецепт

1. Составь кодбук: для каждой темы — название + что конкретно входит + граничный случай с примером (где кончается эта категория и начинается соседняя). Без граничных случаев кодбук почти бесполезен.
2. Добавь две обязательные категории в конец: «Другое» (проблема есть, но в список не попадает) и «Не по теме» (нет ответа на вопрос). Без них модель будет впихивать всё в ближайшую подходящую категорию.
3. Добавь инструкцию на рассуждение: «Для каждого текста: а) опиши суть своими словами (1-2 предложения), б) объясни почему именно эта категория, в) присвой код». Это занимает больше токенов, зато спорные случаи становятся видимыми.
4. Проверь каждую категорию отдельно на выборке из 10-15 ответов — хороший общий результат не значит, что все темы работают одинаково хорошо.

Примеры

[ПЛОХО] : Проанализируй ответы сотрудников и раздели по темам: инструменты, процессы, коммуникация, нагрузка
[ХОРОШО] : Ты — HR-аналитик. Кодируй открытые ответы по заранее заданным категориям. КОДБУК: 1. ИНСТРУМЕНТЫ: проблемы с рабочими инструментами, ПО, оборудованием, доступами. Граничный случай: медленный VPN — сюда; бюрократия при запросе доступа — ПРОЦЕССЫ. 2. ПРОЦЕССЫ: неэффективные согласования, лишние встречи, непрозрачные процедуры. Граничный случай: «слишком много митингов» — сюда; «нет нормального инструмента для планирования встреч» — ИНСТРУМЕНТЫ. 3. ДРУГОЕ: проблема есть, но не входит в категории выше. 4. НЕ ПО ТЕМЕ: нет конкретной проблемы или ответ не по существу. ИНСТРУКЦИЯ: для каждого ответа — а) опиши суть (1-2 предложения), б) объясни выбор категории, в) присвой код. Ответ: «Постоянно жду согласования от трёх отделов, пока задача не устаревает»
Источник: Can Large Language Models Reliably Code Qualitative Humanitarian Data? A Benchmark Study Against Human Expert Adjudication
ArXiv ID: 2606.26541 | Сгенерировано: 2026-06-28 21:01

Проблемы LLM

ПроблемаСутьКак обойти
Модель не читает между строкЧеловек говорит «меня никогда не замечают на встречах» — жалуется на дискриминацию. Модель видит «не замечают» — кодирует как «другое» или «коммуникация». Суть высказывания теряется. Проблема возникает везде, где люди описывают чувствительные темы через бытовые истории, намёки и культурные идиомыДобавь в запрос примеры косвенных формулировок для каждой категории. Явно напиши: «такая-то фраза означает такую-то категорию». Но не переоценивай — на неявных темах (дискриминация, угрозы безопасности) проверяй вручную
Модель не сигнализирует о неуверенностиОшибочные ответы выглядят так же уверенно, как верные. Модель не говорит «я сомневаюсь». Без явного запроса ты не отличишь надёжный результат от случайногоДобавь в запрос одно из двух: явную категорию «Неопределённо» — для случаев где нет чёткого совпадения; или оценку уверенности («оцени от 1 до 5») — низкие числа покажут где нужна ручная проверка

Методы

МетодСуть
Кодбук с объяснением до метки — классификация текстовДай модели явную кодовую книгу: каждая категория = точное определение + пример пограничного случая + как его кодировать. Добавь категорию «Другое» для всего что не вписывается. Попроси: сначала процитируй ключевую фразу объясни почему эта категория назови метку. Почему работает: задача меняется. Без кодовой книги модель угадывает что ты имеешь в виду. С кодовой книгой — сопоставляет текст с явным критерием. Объяснение до метки не даёт модели взять первое пришедшее в голову — она вынуждена проговорить логику, и ты видишь где ошибка. Когда применять: у тебя уже есть категории, нужно разложить много текстов по ним. Когда не работает: категорий ещё нет и нужно их придумать из текстов — качество резко падает
📖 Простыми словами

CanLargeLanguageModelsReliably Code Qualitative Humanitarian Data? A Benchmark Study Against Human Expert Adjudication

arXiv: 2606.26541

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

Это как если бы ты нанял стажера разбирать гору писем, но вместо фразы «раскидай это по папкам» выдал ему подробную инструкцию с примерами и запретил ставить штамп, пока он не объяснит тебе логику своего выбора. Без такой инструкции стажер (и AI) будет лажать, потому что его понимание слова «проблема» может радикально отличаться от твоего. Но как только появляется жесткая структура, магия исчезает и начинается нормальная работа: модель перестает галлюцинировать и превращается в высокоточный инструмент.

Чтобы эта схема взлетела, нужно использовать метод Chain-of-Thought (цепочка рассуждений) в связке с детальными определениями. Ты не просто спрашиваешь: «К какой категории относится этот отзыв?». Ты говоришь: «Вот список категорий с их точным смыслом. Сначала проанализируй текст, выдели ключевые аргументы, сопоставь их с определениями и только потом назови номер категории». Когда модель сначала пишет обоснование, точность классификации взлетает, потому что она сама себя ловит на логических нестыковках еще до финального ответа.

Исследование проводили на гуманитарных данных, но принцип универсален. Это работает везде, где есть неструктурированный поток сознания: ответы на открытые вопросы в опросах, расшифровки интервью, отзывы на маркетплейсах или тикеты в техподдержку. Вместо того чтобы тратить недели на ручную разметку 2000 анкет, ты скармливаешь их модели с правильным промптом. В итоге GEO-подход к данным экономит сотни часов, выдавая результат, который не стыдно показать в отчете.

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

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

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

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