3,583 papers
arXiv:2508.16478 78 22 авг. 2025 г. FREE

LLM-as-Classifier: итеративная валидация классификатора через alignment matrix

КЛЮЧЕВАЯ СУТЬ
Делаешь промпт-классификатор — получаешь 60% данных в одном классе. Это реально такие данные или определение класса слишком широкое и затягивает всё подряд? Добавил примеры — точность выросла, но 80% в другом классе. Промпт сломался или данные изменились? Без объективной проверки каждое изменение — игра вслепую. Фреймворк LLM-as-Classifier решает это через alignment matrix — таблицу пересечений твоих классов с темами, которые LLM находит сама без твоих ограничений. Даёшь модели два задания: (1) раздели по моим классам, (2) найди темы сама. Строишь heatmap пересечений. Яркая диагональ = определения точные. Размазанная строка = класс слишком широкий. Пустая строка = класс не работает, удали. Матрица показывает где именно промпт ломается и какие определения переписать.
Адаптировать под запрос

TL;DR

LLM-as-Classifier — фреймворк для построения текстовых классификаторов на LLM без файн-тюнинга. Работает в четыре фазы: (1) эксперты задают начальную схему классов, (2) LLM свободно находит темы в данных и строится alignment matrix (heatmap сравнения), (3) промпт дорабатывается на основе матрицы, (4) добавляются few-shot примеры с контролем баланса классов. В основе — человек в цикле и систематическая валидация на устойчивость к порядку данных.

Классическая проблема промпт-классификаторов: ты не знаешь, где промпт врёт. Определил класс "Технические проблемы" — получил 60% всех данных. Это правда техническая боль пользователей или промпт слишком широкий и затягивает всё подряд? Добавил few-shot примеры — точность выросла, но теперь 80% данных в одном классе. Это данные изменились или примеры сломали баланс? Без объективной проверки каждое изменение промпта — игра вслепую.

Фреймворк решает это alignment matrix — таблицей сравнения твоих классов с тем, что LLM видит в данных сама по себе. Даёшь LLM два задания: (1) раздели данные по моим классам, (2) найди темы сама без моих ограничений. Строишь таблицу пересечений. Яркая диагональ — промпт точен. Размазанная строка — класс слишком широкий. Пустая строка — класс не работает, удали. Матрица показывает где именно промпт ломается и какие определения переписать. После каждого изменения — новая матрица. Итерируешь, пока не получишь чистую картину.

🔬

Схема метода

ШАГ 1 (Domain Knowledge): Эксперт задаёт начальные классы → Схема классификации C_P = {класс_1, класс_2, ..., класс_k}

ШАГ 2 (Topic Discovery): Два параллельных запроса к LLM → Запрос А: "Раздели эти данные по моим классам {C_P}" → Запрос Б: "Найди основные темы в этих данных сам, без ограничений"

ШАГ 3 (Alignment Matrix): Строится таблица пересечений → Heatmap: строки = твои классы, столбцы = темы LLM, яркость = количество совпадений

ШАГ 4 (Prompt Refinement): Анализ матрицы и доработка промпта → Яркая ячейка = класс работает точно, сохранить → Размазанная строка = класс слишком широкий, уточнить определение → Пустая строка = класс не работает, удалить → Несколько ярких ячеек в строке = класс захватывает чужие темы, сузить

ШАГ 5 (Hierarchical Expansion): Построение подклассов через Chain-of-Thought → Для каждого валидного Parent класса создаются Child подклассы → Единый CoT-промпт: сначала Parent, затем Child

ШАГ 6 (Few-Shot Reinforcement): Добавление примеров с контролем баланса → Добавляются few-shot примеры из человеческих предпочтений → Контроль: распределение классов не должно сильно измениться (KL-дивергенция)

ШАГ 7 (Validation): Проверка устойчивости к порядку → Batch sequence: перемешать данные, классификация не должна меняться → Intra-document: удалить начало/конец/середину документа, проверить устойчивость → In-prompt: перемешать few-shot примеры, проверить стабильность результата

Все шаги требуют отдельных запросов к LLM. Шаги 2-4 образуют итерационный цикл.

🚀

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

Задача: Ты продакт в Авито и анализируешь отзывы пользователей на новую функцию "Безопасная сделка". Нужно понять основные темы претензий и предложить, какие доработать в первую очередь. У тебя 500 отзывов, читать вручную долго.

Промпт Шага 1 (начальные классы от эксперта):

Вот отзывы пользователей на функцию "Безопасная сделка" в Авито.

Раздели их по категориям:
1. Непонятный интерфейс - пользователь не понял как работает функция
2. Технические сбои - что-то не загружается, не работает
3. Медленно работает - жалобы на скорость
4. Дорого - претензии к комиссии

Классифицируй каждый отзыв в одну из этих категорий.

[500 отзывов]

Промпт Шага 2 (свободное выявление тем LLM):

Вот отзывы пользователей на функцию "Безопасная сделка" в Авито.

НЕ используй заданные категории. Сам проанализируй отзывы и выдели 4-6 основных тем, которые ты видишь в данных. Назови каждую тему.

[те же 500 отзывов]

Результат:

Получишь две таблицы:

  • Таблица A: каждый отзыв → твой класс (Непонятный интерфейс / Технические сбои / и т.д.)
  • Таблица B: каждый отзыв → тема от LLM (например: "Страх мошенничества", "Путаница с условиями", "Баги в мобильном приложении", "Доставка не работает", "Высокие комиссии")

Строишь alignment matrix: сколько отзывов попали одновременно в "Непонятный интерфейс" И "Путаница с условиями" и т.д.

Допустим, видишь на heatmap:

  • "Непонятный интерфейс" размазан по двум темам: "Путаница с условиями" (200 отзывов) + "Страх мошенничества" (150 отзывов) → класс слишком широкий, разделить на два
  • "Технические сбои" ярко совпадает с "Баги в мобильном приложении" (180 отзывов) → определение работает точно
  • "Медленно работает" почти пустая строка (5 отзывов) → в данных этой проблемы нет, удалить класс
  • "Дорого" совпадает с "Высокие комиссии" (80 отзывов), но также захватывает часть "Доставка не работает" (40 отзывов) → определение нечёткое, добавить: "именно про комиссию, не про логистику"

Переписываешь промпт на основе матрицы. Повторяешь Шаги 2-4 до чистой heatmap (3-5 итераций). Затем добавляешь few-shot примеры (Шаг 6) и проверяешь устойчивость (Шаг 7).

🧠

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

LLM не знает, что ты подразумевал под "Непонятный интерфейс". Она интерпретирует по своему пониманию. Твоё определение может захватывать слишком много (размазанная строка в матрице) или вообще не работать (пустая строка). Без валидации ты не увидишь разрыв между твоим замыслом и выполнением LLM.

Alignment matrix работает как зеркало. Свободная классификация LLM (без твоих классов) показывает, что модель видит в данных по-настоящему. Это её "честное" понимание структуры. Сравнение с твоими классами показывает, где твои определения совпадают с моделью, а где расходятся. Яркая диагональ — ты и модель согласны. Размазанная строка — твой класс для модели означает что-то другое, чем для тебя.

Итерации на основе матрицы превращают "подбор определений" в точную диагностику. Не "попробую переписать промпт", а "матрица показала, что класс X захватывает тему Y — добавлю исключение". Каждая итерация решает конкретную проблему, видимую в данных.

Рычаги управления методом:

  • Количество классов в начальной схеме: начинай с 3-5 → увеличивай, если матрица показывает, что LLM видит больше тем
  • Количество тем в свободной классификации (Шаг 2): попроси 4-6 → если данных много и разнообразны, можно 8-10 для детальности
  • Порог KL-дивергенции при добавлении few-shot: строгий (ε=0.05) → баланс классов почти не меняется, мягкий (ε=0.2) → допускаешь сдвиг
  • Количество итераций: 3-5 достаточно → если после 5 итераций матрица не чистая, проблема в данных, не в промпте
📋

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

📌

Alignment Matrix Method

Шаг 1 — Классификация по заданным классам:

Вот данные: {данные}

Раздели каждый элемент по этим категориям:
{список_классов_с_определениями}

Для каждого элемента выдай: ID элемента, выбранный класс, краткое обоснование (1 предложение).

Шаг 2 — Свободное выявление тем:

Вот те же данные: {данные}

НЕ используй категории из предыдущего задания.

Проанализируй данные сам и выдели {N} основных тем, которые ты видишь. Назови каждую тему кратко (2-4 слова).

Для каждого элемента выдай: ID элемента, выбранная тема.

Шаг 3 — Построение матрицы (делай вручную или через таблицу):

Сравни результаты Шага 1 и Шага 2. Построй таблицу:

  • Строки = твои классы
  • Столбцы = темы от LLM
  • Ячейки = количество элементов, попавших в класс И тему одновременно

Шаг 4 — Анализ и рефининг:

Попроси LLM помочь с анализом:

Вот alignment matrix между моими классами и темами, которые ты нашёл сам:

[вставь таблицу]

Проанализируй каждый мой класс (каждую строку):
- Если строка имеет одну яркую ячейку → класс работает точно
- Если строка размазана по нескольким темам → класс слишком широкий, предложи как разделить
- Если строка почти пустая → класс не работает, предложи удалить или переформулировать
- Если строка захватывает чужие темы → класс нечёткий, предложи как сузить определение

Для каждого проблемного класса предложи конкретную доработку определения.

Применяешь рекомендации → повторяешь Шаги 1-4 с новыми определениями → продолжаешь, пока матрица не станет чистой (диагональной).

Плейсхолдеры:

  • {данные} — твой корпус для классификации (отзывы, тикеты, посты, резюме и т.д.)
  • {список_классов_с_определениями} — начальная схема: "1. Класс A: определение. 2. Класс B: определение."
  • {N} — количество тем для свободного анализа (рекомендую 4-6)
📌

Few-Shot с контролем баланса (Шаг 6)

Базовый промпт (zero-shot):

Раздели по категориям:
{определения_классов}

[данные для классификации]

Промпт с few-shot:

Раздели по категориям:
{определения_классов}

Примеры:
1. [пример_1] → Класс A
2. [пример_2] → Класс B
3. [пример_3] → Класс A

[данные для классификации]

Проверка баланса:

Собери статистику классов для zero-shot (N_zero) и для few-shot (N_few). Попроси LLM:

Вот распределение классов:

Zero-shot (без примеров):
Класс A: {N_A_zero} ({процент}%)
Класс B: {N_B_zero} ({процент}%)
...

Few-shot (с примерами):
Класс A: {N_A_few} ({процент}%)
Класс B: {N_B_few} ({процент}%)
...

Сильно ли изменилось распределение? Если да — какой класс стал доминировать и почему?

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

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

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

[вставить Шаги 1-4 выше]

LLM спросит: какие данные, какие начальные классы ты видишь, сколько тем искать. Возьмёт паттерн из шаблона и создаст рабочие промпты для твоих данных.

⚠️

Ограничения

⚠️ Требует множественных запросов: Alignment matrix = минимум 2 запроса (классификация + топики) + построение таблицы + анализ. На каждую итерацию (обычно 3-5) — снова 2 запроса. Быстро, но не "в один промпт".

⚠️ Подходит для структурированной классификации: Если задача размытая ("оцени креативность текста"), alignment matrix не поможет — LLM сама не найдёт чёткие темы в субъективных критериях.

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

⚠️ Few-shot может сломать баланс: Добавление примеров улучшает точность, но может перекосить распределение классов. Без проверки KL-дивергенции (или хотя бы ручного сравнения процентов) рискуешь получить 80% данных в одном классе.

🔍

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

Команда из Google Trust & Safety разработала фреймворк для production-систем, где нужно классифицировать массивы пользовательских данных (фидбек, тикеты, контент) без затрат на файн-тюнинг.

Логика была простой: эксперты знают домен, но не знают, как именно LLM интерпретирует их определения. LLM знает данные, но не знает бизнес-приоритеты. Нужен мост — и это alignment matrix. Исследователи взяли классический подход из ML (сравнение supervised и unsupervised кластеризации через матрицу путаницы) и адаптировали для промпт-инженерии: пусть LLM сыграет обе роли (supervised classifier и unsupervised topic model), а мы сравним результаты.

Фреймворк тестировали на реальных корпусах Google (support tickets, user feedback, policy violations). Основная метрика — чистота alignment matrix после N итераций: идеальная матрица = яркая диагональ (каждый класс совпадает с одной темой), низкий off-diagonal noise. Дополнительно измеряли F1-score против ground truth и устойчивость к порядку (статистика из алгоритмов 1-3).

Главная находка: промпты ломаются не от плохой формулировки, а от несовпадения интуиции эксперта и понимания LLM. Класс "Технические проблемы" кажется экспертам чётким, но LLM видит в нём 3 разные темы (баги UI, ошибки API, проблемы с авторизацией) — и матрица это показывает. Без матрицы эксперт не узнал бы о проблеме — формально промпт работает, но семантически размыт.

Второй инсайт: few-shot примеры работают как стероиды — резко повышают точность, но ломают баланс классов. Добавили 3 примера для "UI confusion" — точность выросла с 72% до 89%, но доля этого класса подскочила с 15% до 35%. Оказалось, примеры не просто учат различать, они смещают prior вероятность модели. Без контроля распределения (KL-divergence < ε) few-shot превращается в self-fulfilling prophecy.

Третий инсайт из sequence invariance testing: LLM чувствительны к порядку даже при temperature=0. Перемешали порядок few-shot примеров — 12% документов получили другую классификацию. Удалили первую треть документа — 18% изменений. Это не баг, это особенность attention mechanism: веса attention зависят от позиции токенов. Промпт, который работает на одном порядке, может сломаться на другом. Поэтому валидация = обязательно несколько shuffle-итераций.

Исследование показало, что промпт-инженерия для классификации — это не искусство, а наука с воспроизводимыми протоколами: alignment matrix диагностирует проблемы, итерации их чинят, sequence testing проверяет робастность, мониторинг дрифта держит систему живой. Цикл замкнут.

📄

Оригинал из исследования

Контекст: Исследователи описывают математическую формализацию alignment matrix — как из двух классификаций (по заданным классам и свободных топиков) построить матрицу пересечений для диагностики промпта.

2. Alignment Analysis: We construct a k × m alignment matrix, A, to 
analyze the co-occurrence of the predefined Parent classes and the 
emergent topics. The classification function f at iteration t is 
parameterized by a class-defining prompt, P_class^(t), so we denote 
it f^(t). The matrix element A_ij is the count of documents assigned 
to parent class c_i and topic t_j.

A_ij = |{d' ∈ D' | f^(t)(d') = c_i ∧ g(d') = t_j}|

This matrix, often visualized as a heatmap (Figure 2), provides 
critical diagnostic information. A row Σ(j=1 to m) A_ij that is 
disproportionately large suggests class c_i is too broad, while a 
column Σ(i=1 to k) A_ij that is large indicates a dominant underlying 
topic.

Контекст: Пример анализа heatmap — как читать матрицу и какие выводы делать про каждый класс.

Parent Class C: A Well-Defined and Successful Class
- Observation: A single, high-intensity (bright yellow) cell is 
 observed at the intersection of `Parent Class C` and `Known Class 2`. 
 All other cells in this row exhibit low intensity.
- Interpretation: This result is ideal. It indicates that the prompt's 
 definition for `Parent Class C` is specific, accurate, and aligns 
 almost perfectly with the semantic concept of `Known Class 2`. 
 The classification for this category is "pure," with minimal leakage 
 or confusion.
- Action: The prompt definition for `Parent Class C` is considered 
 validated and requires no immediate modification.

Parent Class A: A Vague and Poorly-Defined Class
- Observation: This row displays moderate signal strength across 
 multiple known classes (`Known Class 1` and `Known Class 2`) without 
 a single dominant alignment.
- Interpretation: `Parent Class A` lacks semantic coherence. Its 
 definition is likely too general, making it a "catch-all" category 
 that fails to represent a distinct underlying concept in the data.
- Action: The definition for `Parent Class A` requires a substantial 
 revision. The domain knowledge that informed this class must be 
 revisited. Options include splitting it into two more specific 
 classes or rewriting its definition entirely.

Контекст: Формула контроля баланса при добавлении few-shot примеров — как найти оптимальное количество примеров, которые улучшают точность, но не ломают распределение классов.

The objective is to find an optimal number of examples, k*, that 
maximizes a validity score V (e.g., F1-score) while ensuring the 
resulting distribution does not diverge excessively from a baseline 
(e.g., the zero-shot distribution N^(0)). This constraint can be 
formalized as:

k* = arg max_k V(E_k) s.t. D_KL(N^(k) || N^(0)) ≤ ε

where D_KL is the Kullback-Leibler divergence and ε is a pre-defined 
tolerance threshold.
💡

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

💡 Адаптация для личных решений — "Сам себе судья"

Alignment matrix работает не только для корпусов данных, но и для анализа собственного мышления. Используй LLM как зеркало для своих критериев принятия решений.

Пример: Ты выбираешь между тремя оффрами — старший аналитик в Яндексе, мидл продакт в стартапе, тимлид в Сбере. У тебя есть критерии: зарплата, рост, баланс жизни, команда. Но ты не уверен, что интуитивно взвешиваешь их правильно.

ЗАДАЧА 1 (явные критерии):
Оцени каждый оффер по моим критериям:
1. Зарплата - важность 40%
2. Возможности роста - важность 30%
3. Work-life balance - важность 20%
4. Крутая команда - важность 10%

[описание трёх офферов]

Выдай итоговую оценку каждого оффера.

---

ЗАДАЧА 2 (свободный анализ):
Забудь про мои критерии.

Проанализируй эти три оффера сам и выдели 3-4 ключевых фактора, которые, 
по твоему мнению, действительно важны при выборе между ними.

[те же три оффера]

Назови факторы и оцени каждый оффер по ним.

---

СРАВНЕНИЕ:
Построй таблицу:
- Строки = мои критерии (Зарплата, Рост, Balance, Команда)
- Столбцы = факторы, которые ты нашёл сам
- Ячейки = насколько мои критерии пересекаются с твоими факторами

Покажи, совпадаем ли мы с тобой в понимании того, что важно.
Если нет - объясни, что я упускаю или переоцениваю.

Результат: Узнаешь, что твои "40% на зарплату" на деле конфликтуют с "10% на команду", потому что LLM видит фактор "Среда обучения" (сильная команда = рост навыков = будущая зарплата), которого в твоих критериях нет. Alignment matrix покажет, что ты неосознанно раздвоил "рост" между двумя критериями — и переоцениваешь зарплату сейчас в ущерб росту потенциала.

💡 Адаптация для оценки контента — "Что аудитория видит vs что ты хотел"

Пишешь статью, презентацию, питч-дек. У тебя есть задумка (какие месседжи донести), но неизвестно, что считывает аудитория. Alignment matrix покажет разрыв.

ЗАДАЧА 1 (твои месседжи):
Вот моя статья про удалённую работу.

Я хочу донести три ключевых месседжа:
1. Удалёнка экономит время на дорогу
2. Удалёнка требует самодисциплины
3. Удалёнка убивает spontaneous collaboration

Найди в тексте фрагменты, которые поддерживают каждый месседж.

[текст статьи]

---

ЗАДАЧА 2 (что читатель считает):
Забудь про мои месседжи.

Прочитай статью глазами обычного читателя и выдели 3-4 главные идеи, 
которые остаются в голове после прочтения.

[тот же текст]

---

СРАВНЕНИЕ:
Построй таблицу:
- Строки = мои месседжи
- Столбцы = идеи, которые остаются у читателя
- Ячейки = насколько сильно месседж поддерживается в тексте

Покажи, что из моего замысла доходит, а что теряется.

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

🔧 Техника: Alignment matrix для сравнения определений

Если у тебя есть два конкурирующих способа описать одну задачу (например, два варианта промпта или два набора критериев), используй alignment matrix для выбора лучшего.

У меня два варианта промпта для классификации отзывов:

ВАРИАНТ A:
[промпт с классами: Позитив, Негатив, Нейтрал]

ВАРИАНТ B:
[промпт с классами: Восторг, Удовлетворён, Разочарован, Злой]

Классифицируй эти 100 отзывов по обоим вариантам.
Построй alignment matrix: строки = классы из A, столбцы = классы из B.

Покажи, какие классы из A соответствуют каким в B.
Есть ли классы в B, которые дают больше детализации?
Есть ли классы в A, которые захватывают несколько классов из B 
(значит, слишком широкие)?

Матрица покажет, что "Позитив" из варианта A размазан между "Восторг" и "Удовлетворён" из варианта B — значит, вариант B даёт более тонкую сегментацию позитива.

🔗

Ресурсы

LLM-as-classifier: Semi-Supervised, Iterative Framework for Hierarchical Text Classification using Large Language Models

Ссылки на смежные техники из статьи:

  • Chain-of-Thought Prompting (Wei et al., 2022) — для hierarchical expansion
  • Self-Refine (Madaan et al., 2023) — принцип итеративного улучшения промпта
  • Constitutional AI (Bai et al., 2022) — для AI-feedback вместо человеческого
  • Direct Preference Optimization (Rafailov et al., 2023) — альтернатива RLHF для обучения на предпочтениях

Авторы: Doohee You, Andy Parisi, Zach Vander Velden, Lara Dantas Inojosa

Организация: Google Trust & Safety, Google Trusted Content, Google Engineering

Дата: August 2025


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

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

Делаешь промпт-классификатор — получаешь 60% данных в одном классе. Это реально такие данные или определение класса слишком широкое и затягивает всё подряд? Добавил примеры — точность выросла, но 80% в другом классе. Промпт сломался или данные изменились? Без объективной проверки каждое изменение — игра вслепую. Фреймворк LLM-as-Classifier решает это через alignment matrix — таблицу пересечений твоих классов с темами, которые LLM находит сама без твоих ограничений. Даёшь модели два задания: (1) раздели по моим классам, (2) найди темы сама. Строишь heatmap пересечений. Яркая диагональ = определения точные. Размазанная строка = класс слишком широкий. Пустая строка = класс не работает, удали. Матрица показывает где именно промпт ломается и какие определения переписать.

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

Вместо подбора определений вслепую — систематическая диагностика через сравнение с "честным" пониманием LLM. Свободная классификация (без твоих классов) показывает что модель видит в данных по-настоящему. Это её интерпретация структуры. Сравниваешь с твоими классами — видишь где определения совпадают, где расходятся. Яркая ячейка в матрице = ты и модель согласны, класс работает. Размазанная строка = твой класс для модели означает что-то другое, чем для тебя. Переписываешь определение → строишь новую матрицу. Итерируешь 3-5 раз до чистой диагонали. Каждая итерация решает конкретную проблему, видимую в данных, а не абстрактное "попробую по-другому".

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

LLM не знает что ты подразумевал под "Технические проблемы". Она интерпретирует по своему пониманию языковых паттернов. Твоё определение может захватывать слишком много (размазанная строка) или вообще не работать (пустая строка). Alignment matrix работает как зеркало — показывает разрыв между твоим замыслом и реальным выполнением LLM. Без сравнения со свободной классификацией ты видишь только результат ('60% в классе А'), но не понимаешь почему. Матрица превращает диагностику в точную механику: не "класс работает плохо", а "класс X захватывает тему Y — нужно исключение". Каждая итерация на основе матрицы сближает твоё понимание категорий с пониманием модели. Когда они совпадают — получаешь чистую диагональ и стабильную классификацию.

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

Классификация больших массивов текстов → отзывы, саппорт-тикеты, резюме кандидатов, посты в соцсетях, особенно когда нужно структурировать сотни элементов и непонятно работают ли твои категории или промпт интерпретирует их по-своему. НЕ подходит для субъективных критериев ("креативность текста", "качество идеи") — LLM сама не найдёт чёткие темы в размытых оценках, матрица будет бесполезна.

Мини-рецепт

1. Задай начальные классы: 3-5 категорий с определениями (не больше, расширишь позже если матрица покажет что LLM видит больше тем)
2. Запусти два параллельных запроса: (А) Раздели эти данные по моим классам: {определения}, (Б) НЕ используй мои категории. Сам найди 4-6 основных тем в данных
3. Построй матрицу пересечений: строки = твои классы, столбцы = темы LLM, ячейки = количество элементов попавших в класс И тему одновременно (можешь попросить LLM помочь с построением таблицы)
4. Анализируй матрицу: яркая ячейка → класс точен, размазанная строка → класс широкий (раздели), пустая строка → класс не работает (удали), несколько ярких ячеек → класс захватывает чужое (сузь определение)
5. Переписывай определения на основе диагностики → повторяй шаги 2-4 пока матрица не станет чистой (обычно 3-5 итераций)
6. Добавь few-shot примеры для улучшения точности, но проверь что распределение классов не перекосилось (сравни проценты до и после примеров)

Примеры

[ПЛОХО] : Раздели отзывы по категориям: 1. Технические проблемы 2. Непонятный интерфейс 3. Дорого — получаешь 65% в "Технические проблемы", но не понимаешь это реальность данных или определение слишком широкое и затягивает всё подряд
[ХОРОШО] : Запрос А: Раздели отзывы: 1. Технические проблемы — баги и сбои, 2. Непонятный интерфейс — не понял как работает, 3. Дорого — претензии к ценеЗапрос Б: НЕ используй мои категории. Сам найди 5 основных тем в этих отзывах, назови каждую → строишь матрицу пересечений → видишь что "Непонятный интерфейс" размазан по двум темам LLM ("Путаница с условиями" + "Страх мошенничества") → разделяешь на два класса → новая итерация → матрица чистая
Источник: LLM-as-classifier: Semi-Supervised, Iterative Framework for Hierarchical Text Classification using Large Language Models
ArXiv ID: 2508.16478 | Сгенерировано: 2026-01-12 02:20

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

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

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