TL;DR
Исследование HateDecide проверяет два привычных приёма при классификации текстов по правилам: вставить определение нарушения в промпт и разбить решение на несколько вопросов (например, «есть ли мишень?» и «есть ли оскорбление?»), а вердикт собрать по фиксированной формуле. Обе идеи звучат разумно, и обе работают нестабильно.
Главная находка: определение сильно меняет ответы (до 28% решений меняются), но не делает их точнее. Улучшение есть примерно в трети сравнений, ухудшение — в стольких же. Разбивка на вопросы значимо помогает в одной пятой случаев, а вредит почти в двух пятых. Лучшей модели на одном наборе данных нет гарантии быть лучшей на другом. Классификатор, обученный на одном наборе, на другом теряет до 54 пунктов качества.
Практический вывод: не считай, что подробные критерии и больше вопросов = лучше. Прогони оба варианта промпта на 100–200 своих размеченных примерах и выбери по цифрам. Дешёвая специализированная модель на хорошо подобранной задаче может отстать от топовой всего на 1,6 пункта при цене на 97% ниже.
Схема метода
Это не новая техника, а способ сравнить два варианта промпта на своих данных.
ВАРИАНТ A (прямой):
Текст + вопрос + варианты ответа [+ определение] → один вердикт
ВАРИАНТ B (декомпозиция):
Текст + вопрос 1 (мишень?) → да/нет
Текст + вопрос 2 (оскорбление?) → да/нет
Фиксированное правило: вердикт = ответ 1 И ответ 2
СРАВНЕНИЕ: прогнать A и B на одних и тех же текстах с разметкой
→ считать среднюю точность по обоим классам поровну (macro-F1)
→ смотреть, сколько решений изменилось и в какую сторону
Шаги B можно делать в одном запросе или в отдельных. В исследовании каждый вопрос задавали отдельно.
Пример применения
Задача: Вы ведёте сообщество интернет-магазина в Telegram и VK. Каждый день приходят сотни комментариев. Нужно автоматически помечать те, что нарушают правило «унижение по признаку возраста, пола, национальности, религии». Вы не знаете, что лучше: длинное определение в одном промпте или два коротких вопроса с формулой.
Промпт (вариант B, декомпозиция):
Ты помогаешь модерировать комментарии в сообществе интернет-магазина.
Правило сообщества: нарушением считается комментарий, который унижает человека или группу из-за возраста, пола, национальности, религии или другого неизменяемого признака. Критика сервиса, курьеров или товара без привязки к такому признаку нарушением не является. Цитирование чужих оскорблений с осуждением — не нарушение.
Комментарий: «Бабки за рулём — зло, опять встали на светофоре и перекрыли всем проезд к пункту выдачи»
Ответь на два вопроса отдельно. На каждый — только «да» или «нет».
Вопрос 1 (мишень): комментарий направлен на человека или группу по признаку возраста, пола, национальности, религии?
Вопрос 2 (оскорбление): комментарий выражает презрение, унижение или враждебность?
Ответ в формате:
Q1: да/нет
Q2: да/нет
Вердикт считаете сами: нарушение, только если Q1 = да И Q2 = да.
Для сравнения запускаете тот же комментарий прямым промптом: правило + «Это нарушение? Ответь: нарушение / не нарушение». Так прогоняете 100–200 комментариев, которые уже разметил модератор.
Результат: Для каждого комментария у вас будут два вердикта, A и B. Вы увидите, на скольких они расходятся, и сравните оба варианта с разметкой модератора. Часть расхождений окажется ошибками B, часть — исправлениями. Если B не лучше A, оставляйте простой промпт. Он дешевле и быстрее.
Почему это работает
Слабость LLM. Модель не «читает правила» как юрист. Подробное определение она воспринимает как ещё один контекст, который сдвигает ответ, но не обязательно в сторону разметки. В исследовании определение меняло до 28% решений. При этом точность относительно эталонной разметки в среднем не росла. Разметка людей может расходиться с формальным определением, и модель, строго следуя тексту, начинает расходиться с разметкой.
Сильная сторона. Модель хорошо отвечает на узкие вопросы с вариантами «да/нет». Для слабых моделей это помогает. Маленькая модель на одном из наборов данных, которая почти всё помечала как нарушение, после разбивки на вопросы резко улучшилась (на 35,8 пункта). У сильных коммерческих моделей, наоборот, разбивка чаще слегка вредила.
Что из этого следует. Метод — не «всегда разбивай», а «проверяй на своей выборке». Рычаги управления промптом такие: - Определение — добавляй или убирай и смотри, не меняются ли решения в нужную сторону. Если решений меняется много, а точность не растёт, определение просто шумит. - Число вопросов — чем больше вопросов, тем больше шансов ошибиться на каждом и тем дороже решение. Начни с двух-трёх. - Формула сборки — «И», «ИЛИ», вложенные условия. Чем сложнее формула, тем выше риск, что ошибка одного вопроса испортит весь вердикт. - Размер модели — слабым моделям декомпозиция может помочь, сильным чаще нет.
Шаблон промпта
Сначала прямой вариант (A), потом декомпозиция (B). Запускайте оба на одних и тех же текстах.
=== ВАРИАНТ A (прямой) ===
Задача: {задача_классификации}
Определение / правило: {определение} ← можно убрать для проверки без определения
Текст: {текст}
Варианты ответа: {вариант_1} / {вариант_2}
Ответь только одним вариантом.
=== ВАРИАНТ B (декомпозиция) ===
Задача: {задача_классификации}
Определение / правило: {определение}
Текст: {текст}
Ответь на каждый вопрос отдельно, только «да» или «нет».
Вопрос 1 ({название_критерия_1}): {формулировка_вопроса_1}
Вопрос 2 ({название_критерия_2}): {формулировка_вопроса_2}
Формат ответа:
Q1: да/нет
Q2: да/нет
Правило сборки (применяешь ты, не модель): {вердикт} = Q1 И Q2
Что подставлять:
- {задача_классификации} — что ищем: нарушение правил, жалоба, спам и так далее.
- {определение} — правило сообщества или политика вашими словами, с исключениями.
- {текст} — комментарий, отзыв, обращение.
- {название_критерия} и вопросы — разбейте определение на независимые условия. Например, «адресат» и «оскорбление».
- Правило сборки пишите по определению: «И», «ИЛИ» или вложенное условие.
🚀 Быстрый старт — вставь в чат:
Вот шаблон сравнения прямого и декомпозированного промпта для классификации. Адаптируй под мою задачу: {опиши, какие тексты и по какому правилу ты классифицируешь}.
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит про правило, исключения и желаемые категории, потому что для декомпозиции нужно разбить определение на независимые вопросы и подобрать формулу сборки. Она возьмёт структуру из шаблона и соберёт оба варианта под вашу задачу.
Ограничения
⚠️ Один домен и один язык: всё проверено на классификации языка вражды в английских текстах. Для других типов правил (спам, юридические риски, токсичность в русском) вывод может отличаться, это нужно проверять самому.
⚠️ Ответы без рассуждений: коммерческие модели отвечали строгим форматом без объяснений. Что будет, если дать им «подумать вслух» перед ответом, исследование не проверяло.
⚠️ Вопросы писали авторы вручную: формулы сборки и формулировки вопросов составлены исследователями по документации наборов данных. Другая разбивка могла бы дать другой результат.
⚠️ Определение и описания меток подавались вместе: эффект «определения» на деле эффект целого пакета инструкций, а не отдельной фразы.
⚠️ Часть инструментов — не для чата: большинство «структурированных моделей» из статьи требуют API или локального запуска. Вывод про определения и декомпозицию применим в любом чате, а сравнение стоимости — нет.
⚠️ Согласие с разметкой ≠ следование правилу: авторы сами оговаривают, что совпадение с разметчиками не доказывает, что модель применяет именно ваше определение.
⚠️ Фрагмент статьи: в имеющемся тексте оборвались результаты по трёхклассовой задаче и атрибутам, поэтому они не разобраны.
Как исследовали
Исследователи взяли четыре набора данных с разными определениями языка вражды: тексты, написанные специально чтобы обмануть классификаторы, комментарии из соцсетей, посты из Twitter и Gab, и набор тестовых ситуаций вроде угроз и цитирования оскорблений с осуждением. Всего оценивали около 13 тысяч текстов. Сравнивали десять моделей и конфигураций: шесть «структурированных решающих» моделей, две коммерческие LLM, специализированную модерационную модель и классификатор без обучения под задачу. Отдельно обучили два классических классификатора как точку отсчёта.
Каждый тест был парным: одни и те же тексты, одна и та же модель, меняется только одно условие (определение есть или нет, прямое решение или декомпозиция). Различия оценивали повторной выборкой тестового набора 10 тысяч раз и жёсткой поправкой на множественные сравнения. Поэтому «значимо» здесь означает действительно значимо.
Результаты оказались неоднородными. Коммерческие модели значимо обошли все решающие модели только на одном наборе. На другом (MHS) специализированная модель Decider обогнала обе коммерческие на 12 пунктов. Слабая маленькая модель (2B) на том же наборе набрала .220, а это хуже, чем если бы она вообще всё помечала как «не вражда» (.431). Определение значимо улучшало результат в 29% сравнений и ухудшало в стольких же. Декомпозиция значимо улучшала в 20% и ухудшала примерно в 37%. Наконец, у одной коммерческой модели на HateXplain охват был 94%, но точность всего 49%: она ловит почти всё, но половина помеченного — ложные срабатывания. Для практики это значит: на каждой новой задаче проверяйте не только общую точность, но и баланс «поймал» и «ложно поймал».
Оригинал из исследования
В доступном фрагменте нет текстов промптов (определения вынесены в Приложение A). Есть правила сборки вердикта из Таблицы 2:
Dynamic: Hate if Intent ∧ (support ∨ (scope ∧ hostile))
MHS: Hate if Targeting ∧ abuse
HateXplain: Hate if Targeting ∧ abuse
HateCheck: Hate if Targeting ∧ abuse (same target)
(∧ = AND, ∨ = OR;
hostile = animosity, derogation, dehumanization или threatening;
support = выбрана категория «support»)
Контекст: исследователи составили вопросы и правила вручную из документации каждого набора данных. Для трёх наборов формула одинаковая («мишень И оскорбление»). Для Dynamic она сложнее, и именно сложная формула даёт больше точек отказа.
Адаптации и экстраполяции
💡 Адаптация для вашей политики: тот же метод на другой задаче, например на отсеве жалоб клиентов в поддержке.
Задача: определить, требует ли обращение клиента срочной эскалации.
Правило: эскалация нужна, если (клиент называет сумму более 10 000 ₽ И требует возврата) ИЛИ (клиент упоминает суд, Роспотребнадзор или блокировку аккаунта).
Обращение: {текст}
Вопрос 1: названа ли сумма более 10 000 ₽ и есть ли требование возврата? да/нет
Вопрос 2: упоминается ли суд, Роспотребнадзор или блокировка аккаунта? да/нет
Формат: Q1: да/нет, Q2: да/нет
Вердикт: Q1 ИЛИ Q2. Проверьте на 100 уже разобранных обращениях и сравните с прямым вариантом.
🔧 Техника: проверка «определение помогло или нет» → выяснить, не шумит ли оно
Прогоните один и тот же набор текстов с определением и без. Попросите чат посчитать:
Вот два файла: ответы модели без определения и с определением, плюс эталонная разметка модератора.
Посчитай:
1. Сколько решений изменилось?
2. Сколько из изменившихся стали правильными, сколько неправильными?
3. Какова средняя точность по обоим классам поровну до и после?
Если решений изменилось много, а итог не лучше, определение лучше убрать или переписать. Этот приём не из статьи, а вывод из её метода «считать изменённые решения».
Ресурсы
- Название: To Jev or Not? Evaluating the Accuracy and Efficiency of Structured Decision Models for Hate-Speech Moderation (HateDecide).
- Авторы: Demetris Paschalides, George Pallis, Marios D. Dikaiakos — University of Cyprus, Computer Science Department.
- Наборы данных: Dynamic (Vidgen et al.), MHS, HateXplain, HateCheck.
- Связанные подходы: гипотезная инженерия и чек-листы (xList-Hate), специализированная модерационная модель CoPE.
