3,583 papers
arXiv:2606.27314 74 25 июня 2026 г. FREE

Taxonomy-in-Prompt: полнота классификатора в промпте определяет качество анализа LLM

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

TL;DR

Когда вы даёте LLM список категорий для классификации текста, полнота этого списка критически важна. Неполный список работает хуже, чем вообще никакого. Это нашли исследователи из Университета Юты: они встраивали разные классификаторы в промпт и замеряли, как точно LLM находит закодированный язык в постах TikTok и Bluesky.

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

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


🔬

Схема метода

ШАГ 1: Составить исчерпывающий классификатор
        → список категорий по МЕХАНИЗМУ (как устроено), не по теме (о чём)
        → категории могут пересекаться (один объект = несколько категорий)

ШАГ 2: Встроить классификатор в промпт
        → перед задачей: "Используй следующие категории..."
        → в одном запросе

ШАГ 3: LLM анализирует текст с опорой на классификатор
        → находит паттерны по каждой категории
        → отмечает какие категории нашлись

Всё выполняется в одном запросе.


🚀

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

Задача: Разобрать отзывы на маркетплейсе (Wildberries/Ozon) и найти косвенные сигналы качества — то, что покупатели пишут между строк, не говоря прямо "товар плохой".

Промпт:

Проанализируй отзыв на товар. Найди косвенные сигналы качества — случаи, 
когда покупатель намекает на проблему, не называя её прямо.

Используй эти категории (можно отмечать несколько):

1. Сравнительное занижение — хвалят одно, чтобы скрыть проблему с другим 
   ("цвет норм, зато...")
2. Условная похвала — "для такой цены неплохо" / "если не ждать большего"
3. Умолчание о важном — детально описывают мелочи, обходя главное
4. Метафора замены — "оно делает своё дело" / "справляется как может"
5. Временной якорь — "пока держится" / "посмотрим через месяц"
6. Обратная защита — "главное что не сломалось сразу же"
7. Групповая калибровка — "для этих товаров обычное дело"
8. Эмодзи-нейтрализация — позитивные эмодзи при нейтральном тексте

Отзыв:
[вставить текст]

Для каждого найденного сигнала: укажи категорию, процитируй фрагмент, 
объясни что именно выдаёт скрытое недовольство.

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


🧠

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

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

Почему неполный список хуже нуля: когда вы даёте список из 3 категорий, модель фокусируется на них и перестаёт замечать то, что не вошло. Без списка она использует всё, что знает. С неполным — только кусок. Это эффект "сужения поиска по плохой карте".

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

Рычаги управления: - Детализация категорий — чем точнее описан механизм (с примером), тем лучше работает детектор. "Условная похвала — например 'для такой цены'" > просто "условная похвала" - Разрешение overlap — явно напишите "одна фраза может относиться к нескольким категориям". Это снимает искусственное ограничение - Порядок категорий — самые редкие и нестандартные ставьте ближе к концу: иначе модель устаёт к ним и пропускает - Примеры к каждой категории — 1 пример на категорию резко поднимает точность. Это few-shot внутри классификатора


📋

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

Проанализируй {текст} на предмет {что ищем}.

Используй следующие категории (можно отмечать несколько для одного фрагмента):

1. {Категория 1} — {описание механизма}. Пример: "{пример}"
2. {Категория 2} — {описание механизма}. Пример: "{пример}"
3. {Категория 3} — {описание механизма}. Пример: "{пример}"
[... все категории]

Текст для анализа:
{текст}

Для каждого найденного случая:
- Категория
- Точная цитата из текста
- Объяснение почему это попадает в категорию

Что подставлять: - {текст} — что анализируем: отзыв, письмо, пост, переписка - {что ищем} — цель анализа: косвенный негатив, манипуляции, уклончивость, скрытые условия - {Категория N} — механизм (КАК устроен паттерн, не о чём он) - {описание механизма} — 1 предложение о том, как работает этот тип - {пример} — 1 короткая фраза-иллюстрация


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

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

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

LLM спросит какие типы/механизмы включить в классификатор — потому что именно их полнота определяет качество результата. Она поможет составить исчерпывающий список под вашу задачу.


⚠️

Ограничения

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

⚠️ Категории по теме не работают: классификатор "наркотики / оружие / насилие" (по ТЕМЕ) слабее, чем "фонетическая замена / метафора / эмодзи-кодирование" (по МЕХАНИЗМУ). Тема устаревает, механизм — нет. При составлении классификатора думайте КАК устроен паттерн, а не О ЧЁМ он

⚠️ Для субъективных оценок не работает: если нельзя чётко описать механизм — категория будет размытой и модель будет угадывать. "Агрессивный тон" — плохая категория. "Императивы без обоснования" — хорошая

⚠️ Слишком длинный список теряет хвост: в экспериментах редкие категории работали хуже. При списке 15+ категорий добавляйте примеры к каждой, иначе дальние строки игнорируются


🔍

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

Команда собрала 2000 постов из TikTok и Bluesky — там, где люди реально уклоняются от алгоритмической модерации. Два обученных аннотатора вручную разметили каждый пост: есть ли закодированный язык, где именно, какой механизм (по той самой новой таксономии). Согласованность аннотаторов — высокая (Cohen's κ от 0.79 до 0.89), то есть разночтений почти не было.

Дальше взяли три LLM (GPT, Claude, DeepSeek) и прогнали через них одни и те же посты с шестью разными промптами: без классификатора, с четырьмя существующими таксономиями из литературы, и с новой. Модели, классические ML-детекторы (SVM, логрегрессия) и векторные методы — все на одних данных.

Самое интересное: два из четырёх существующих классификаторов показали результат хуже, чем промпт вообще без классификатора. Это не случайность — паттерн повторился на всех трёх LLM. Когда убирали по одной категории из полного классификатора, точность падала при каждом удалении — то есть каждая категория вносила уникальный вклад, не дублирующий остальные. Самый болезненный дроп — при удалении категории "формальные системы кодирования" (ROT13, числовые коды): -3.6% к точности. Именно потому что ни один из конкурентных классификаторов её не включал.


💡

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

🔧 Техника: добавить fallback-категорию → поймать то, что не влезло

В конец классификатора добавьте: X. Другой механизм — паттерн не попадает ни в одну из категорий выше. Опиши его своими словами.

Это снимает риск неполного списка. Модель не будет "натягивать" нестандартный случай на ближайшую категорию, а честно покажет слепое пятно.


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

Принцип "механизм, а не тема" применим к любому аудиту. Например, для анализа договоров:

Вместо категорий "финансовые риски / юридические риски" (по теме) → "двойное толкование / условие без срока / обязательство без субъекта / размытый стандарт качества" (по механизму нечёткости).

Механизм стабилен — в каком бы договоре расплывчатость ни встретилась, детектор её поймает.


🔗

Ресурсы

Статья: "Beyond Surface Forms: A Comprehensive, Mechanism-Oriented Taxonomy of Indirect Linguistic Encoding for LLM-Based Coded Language Detection"

Код и данные: https://github.com/hmdfiroozfar/mechanism-oriented-ile-taxonomy

Авторы: Hamid Reza Firoozfar, Mohammadsadegh Abolhasani (University of Utah), Reza Mousavi (University of Virginia), Paul Jen-Hwa Hu (University of Utah)


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

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

Неполный список категорий в промпте хуже, чем никакого. Это не опечатка — исследователи Университета Юты замерили это напрямую: LLM с полным классификатором бьёт LLM без классификатора, но LLM с неполным классификатором проигрывает даже варианту без него вовсе. Метод позволяет анализировать тексты на косвенные сигналы — намёки, уклончивость, скрытые смыслы — с точностью, которую даёт структурированная карта всех паттернов. Фишка: встрой в промпт исчерпывающий список механизмов (не тем, а именно механизмов) — и модель перестаёт гадать абстрактно. Вместо размытого «найди подозрительное» она делает серию конкретных проверок: есть ли тут условная похвала? есть ли временной якорь? есть ли умолчание о важном? Каждая категория становится отдельным детектором.

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

Классификатор по МЕХАНИЗМУ (как устроен паттерн) всегда сильнее, чем по ТЕМЕ (о чём). Список «наркотики / оружие / насилие» устаревает за месяц — люди придумывают новые темы. Список «фонетическая замена / условная похвала / умолчание о важном» не устаревает никогда — механизмы уклончивости не меняются. Неполный список сужает поиск по плохой карте: модель видит три категории из промпта и буквально перестаёт замечать всё, что в них не вписывается. Без списка — использует всё что знает. С обрезанным — только кусок. Три усиления, каждое в одну строку: добавь пример к категории («например: 'для такой цены неплохо'»), разреши пересечения («один фрагмент может попадать в несколько категорий»), поставь редкие и нестандартные категории ближе к концу — к дальним строкам модель теряет внимание.

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

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

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

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

Мини-рецепт

1. Составь карту механизмов: выпиши не ТЕМЫ (о чём тексты), а МЕХАНИЗМЫ (как устроены паттерны). Спроси себя: «как человек говорит косвенно?» — через сравнение, через временной якорь, через умолчание. Каждый ответ — отдельная категория.

2. Добавь пример к каждой категории: одна короткая фраза-иллюстрация резко поднимает точность. «Условная похвала — например: 'для такой цены неплохо'» работает лучше просто «условная похвала».

3. Разреши пересечения: явно напиши в промпте «один фрагмент может относиться к нескольким категориям». Без этого модель искусственно выбирает одну — и теряет часть сигналов.

4. Добавь страховку от слепых зон: последней строкой — «Если паттерн не попадает ни в одну категорию — опиши отдельно». Это защита на случай если список всё-таки неполный.

Примеры

[ПЛОХО] : Найди в этом отзыве скрытый негатив
[ХОРОШО] : Проанализируй отзыв. Найди косвенные сигналы недовольства — используй эти категории (можно отмечать несколько для одного фрагмента): 1. Условная похвала — например: 'для такой цены неплохо', 'если не ждать большего' 2. Временной якорь — 'пока держится', 'посмотрим через месяц' 3. Обратная защита — 'главное что не сломалось сразу же' 4. Умолчание о важном — детально описывает мелочи, обходя главное 5. Сравнительное занижение — хвалят одно, чтобы скрыть проблему с другим 6. Другое — если паттерн не вписывается ни в одну категорию Для каждого найденного случая: точная цитата + в какую категорию попадает + почему.
Источник: Beyond Surface Forms: A Comprehensive, Mechanism-Oriented Taxonomy of Indirect Linguistic Encoding for LLM-Based Coded Language Detection
ArXiv ID: 2606.27314 | Сгенерировано: 2026-06-28 21:01

Проблемы LLM

ПроблемаСутьКак обойти
Неполный список категорий создаёт слепые пятна — хуже нуляДаёшь модели список: "проверь по этим 5 критериям". Модель проверяет только по ним. Всё что не попало в список — невидимо. Итог хуже чем без списка вообще. Без списка модель хотя бы опирается на общий контекст. С неполным — она уверена что всё охвачено, хотя половина потерянаДавай список только если он полный. Неполный — убери совсем. Если не уверен что список полный — добавь пункт: "и любые другие способы которые ты знаешь"

Методы

МетодСуть
Полный список категорий как чеклист — гарантия охватаДля любой задачи классификации: составь исчерпывающий список всех категорий и встрой в промпт явно. Попроси модель проверить каждую по очереди. "Для каждого из N пунктов: применимо или нет?" Почему работает: модель идёт по списку последовательно. Ни одна категория не выпадает. Без списка она ориентируется на то, что чаще встречалось при обучении — редкие случаи теряются. Когда применять: нужно найти что-то в тексте, список возможных вариантов известен заранее, пропуск дорого стоит. Когда не работает: список неполный — тогда лучше не давать список вообще
📖 Простыми словами

Beyond Surface Forms: A Comprehensive, Mechanism-Oriented Taxonomy of Indirect Linguistic Encoding forLLM-Based CodedLanguageDetection

arXiv: 2606.27314

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

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

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

Этот принцип универсален и применим далеко за пределами борьбы с матом в комментариях. Его можно внедрять в любой анализ тональности, поиск фрода или классификацию сложных данных. Если ты настраиваешь AI на поиск юридических рисков или багов в коде, нельзя ограничиваться парой примеров. Либо ты прописываешь исчерпывающую структуру категорий, либо не даешь её вовсе, позволяя модели опираться на свои широкие, пусть и размытые, знания. Промежуточный вариант — это всегда гарантированный провал и куча пропущенного мусора.

Главный вывод: не пытайся быть «немножко точным». Если создаешь систему детекции скрытых смыслов, делай ставку на максимально подробную таксономию. Попытка упростить промпт и выкинуть «лишние» категории превращает умную модель в близорукого бюрократа. Либо ты даешь AI полный набор инструментов для дешифровки, либо готовишься к тому, что она пропустит самый очевидный криминал просто потому, что ты не назвал его по имени. В GEO и модерации контента это правило — вопрос выживания твоего сервиса.

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

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

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