TL;DR
Label collapse (коллапс ярлыков) — состояние, когда модель в промпте с примерами выдаёт один и тот же ярлык на любой вход. Запрос она при этом игнорирует. На сбалансированной выборке такой классификатор получает около 50% точности. Это выглядит как «слабоватая, но рабочая модель». На деле модель вообще не читает входной текст.
Главная находка: точность не ловит эту поломку. Модель, которая всегда отвечает «positive», и модель, которая честно ошибается в половине случаев, дают одинаковые 50%. Коллапс не лечится ни чередованием примеров (позитивный, негативный, позитивный…), ни добавлением примеров. Сильнее всего на него влияет выбор самих слов-ярлыков. Пара circle/square сломалась у всех пяти моделей. Пара strong/weak работала у всех. Направление коллапса в основном задаётся предпочтением модели к слову ещё до всяких примеров.
Что из этого взять без доступа к внутренностям моделей: смотри на распределение ответов, а не только на точность. Прогони классификатор на выборке и посчитай, как часто выпадает каждый ярлык. Если одна метка занимает 80–100% ответов при сбалансированных данных, это коллапс. Дальше меняй слова-ярлыки и проверяй, а не надейся на порядок примеров.
Схема проверки (по логике статьи)
ШАГ 1: Собрать сбалансированную выборку запросов (поровну классов) → 50–200 штук
ШАГ 2: Прогнать через промпт с примерами → список ответов
ШАГ 3: Посчитать долю каждого ярлыка → норма ~50/50 при сбалансированных данных
ШАГ 4: Если доля одного ярлыка ≥80% И точность ~50% → коллапс
ШАГ 5: Поменять слова-ярлыки (не порядок примеров!) → повторить шаги 2–4
Каждый шаг — отдельный прогон или таблица. В один промпт это не сводится: нужна выборка и подсчёт.
Пример применения
Задача: Владелец магазина на Wildberries разбирает отзывы. Нужно автоматически помечать «срочно» (брак, возврат, угроза жалобы) и «не срочно» (всё остальное). Он собрал промпт с 8 примерами, чередуя ярлыки. На проверке точность вышла 52%. Он решает, что «модель просто не тянет». На деле она может отвечать «срочно» на всё.
Промпт (рабочий классификатор, формат как в статье):
Классифицируй отзыв. Отвечай одним словом.
Отзыв: Пришла коробка вся мятая, внутри разбитая кружка, хочу вернуть деньги
Ответ: срочно
Отзыв: Кофта приятная, села хорошо, спасибо
Ответ: не срочно
Отзыв: Третий раз заказываю, снова брак, напишу в Роспотребнадзор
Ответ: срочно
Отзыв: Цвет как на фото, доставили быстро
Ответ: не срочно
[... ещё 4 примера, ярлыки чередуются ...]
Отзыв: {новый отзыв}
Ответ:
Промпт для проверки (отдельный шаг в чате):
Вот 100 отзывов, из них 50 срочных и 50 нет (я знаю правильные ответы).
Я прогнал их через классификатор. Вот ответы модели: {список ответов}.
Вот правильные ответы: {эталон}.
Посчитай: 1) долю каждого ярлыка в ответах модели; 2) точность;
3) точность отдельно по срочным и по несрочным.
Если один ярлык занимает более 80% ответов — скажи прямо: «коллапс».
Результат: Модель выдаст три числа: распределение ярлыков, общую точность и точность по каждому классу. Если классификатор «сломан», будет видно перекос. Например, почти все ответы одного класса и почти ноль правильных в другом. Тогда следующий шаг — подставить другие слова-ярлыки («A/B», «горит/терпит» и т. д.) и повторить подсчёт.
Почему это работает
Слабость. Модель выбирает ярлык не только по смыслу запроса. У неё есть предпочтение к конкретным словам ещё до того, как она увидела примеры. Слово «circle» для неё «весомее», чем «square», и этот перекос может перебить смысл запроса. Точность, усреднённая по классам, этот перекос маскирует.
Сильная сторона. Распределение ответов видно в обычном списке. Если запросы сбалансированы, а ответы нет, значит, модель на запрос не смотрит. Для этого не нужны логиты, GPU или код, достаточно таблицы.
Как это обходит слабость. Проверка «доля каждого ярлыка» ловит коллапс прямо. А поскольку направление коллапса почти полностью определяется словами, смена слов-ярлыков — самый действенный рычаг. Порядок и число примеров сильного перекоса не лечат.
Рычаги: - Слова-ярлыки → главный рычаг. Пробуй 2–3 разные пары и сравнивай. - Число примеров → не гарантирует улучшения. Иногда перекос закрепляется, иногда медленно уходит. - Порядок примеров → у слабо перекошенных пар может развернуть направление коллапса, сильный перекос не лечит. - Размер проверочной выборки → 50–200 запросов достаточно, чтобы увидеть перекос.
Шаблон промпта
Формат классификатора из статьи: каждый пример — текст, затем «Answer:» и ярлык. Промпт заканчивается «Answer:» после запроса.
{инструкция_классификации}
{текст_1}
Ответ: {ярлык_А}
{текст_2}
Ответ: {ярлык_Б}
{текст_3}
Ответ: {ярлык_А}
{текст_4}
Ответ: {ярлык_Б}
[... чередуй ярлыки, поровну каждого ...]
{новый_текст}
Ответ:
Что подставлять:
- {инструкция_классификации} — одна фраза: что за задача и «отвечай одним словом».
- {текст_N} — реальные примеры из твоих данных.
- {ярлык_А}, {ярлык_Б} — слова-ярлыки. Попробуй несколько пар и сравни доли ответов.
🚀 Быстрый старт — вставь в чат:
Вот шаблон few-shot классификатора и порядок проверки на коллапс ярлыков.
Адаптируй под мою задачу: {моя задача}.
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит, какие у тебя классы, примеры текстов и как выглядят правильные ответы. Эти данные нужны, чтобы собрать сбалансированный набор примеров и проверочную выборку. Затем она предложит 2–3 варианта слов-ярлыков для сравнения.
Ограничения
⚠️ Малые и «сырые» модели: Проверяли модели на 8–9 млрд параметров, в основном базовые, без чат-настройки. На ChatGPT, Claude и Gemini такого не проверяли. Не факт, что у них коллапс так же силён.
⚠️ Нет готового рецепта: Статья показывает проблему и диагностику, но не даёт проверенного способа лечения. Совет «меняй слова-ярлыки» вытекает из данных, но конкретные слова надо подбирать на своей задаче.
⚠️ Русские слова не проверялись: Все пары были английскими. Какие русские слова безопасны, неизвестно. Проверяй сам.
⚠️ Главный диагностический метод требует внутренностей: Основной способ авторов (логарифм отношения вероятностей двух ярлыков за один проход) требует доступа к вероятностям. В обычном чате его нет. Остаётся подсчёт долей ответов, он грубее.
⚠️ Только два бинарных набора: Тональность и безопасность запросов. Многоклассовые задачи и длинные тексты не исследовались.
⚠️ Диффузионные модели — нишевая часть: Половина статьи про диффузионные языковые модели (LLaDA), которые читатель вряд ли использует.
Как исследовали
Команда взяла пять моделей: три диффузионных (LLaDA, iLLaDA, LLaDA-Instruct) и две обычных (Llama-3-8B-Instruct, Qwen3.5-9B-Base). Проверяли на 20 парах слов-ярлыков: sentiment, safety, а также «нейтральные» пары вроде circle/square, hot/cold, yes/no. Примеры показывали в четырёх порядках: чередуя, группами, блоками и вперемешку. Число примеров меняли от 4 до 30. На каждое условие брали 200 запросов.
Логика была в том, чтобы отделить «модель не умеет задачу» от «модель не смотрит на запрос». Для этого мерили не только точность, но и долю положительного ярлыка в ответах. Дополнительно считали разрыв вероятностей двух слов в момент ответа. Если ответ почти не зависит от запроса, это коллапс.
Удивило несколько вещей. Circle/square сломалась у всех пяти моделей почти в каждом условии, хотя пара не связана с задачей. Strong/weak оказалась здоровой у всех. У диффузионной iLLaDA на классической паре positive/negative коллапса не было, у остальных четырёх был. Причина, по выводу авторов, в обучающих данных, а не в чат-настройке. Примерно в трёх четвертях случаев направление коллапса можно предсказать по предпочтению модели к слову без единого примера. Само это предпочтение не объясняется частотой слов в языке. Чередование примеров слабый перекос иногда разворачивало, сильный не спасало вообще. Число примеров тоже не гарантировало улучшения: в одних условиях перекос закреплялся, в других сглаживался. Для практики это значит: не доверяй точности, смотри распределение ответов и подбирай слова-ярлыки.
Адаптации и экстраполяции
🔧 Техника: добавить «нулевой» тест слов → увидеть врождённый перекос
Перед тем как собирать примеры, прогони классификатор вообще без них — только инструкция и запрос:
Классифицируй отзыв одним словом: «срочно» или «не срочно».
Отзыв: {текст}
Ответ:
Если уже без примеров модель на 90% выбирает одно слово, это врождённый перекос, и примеры с ним, скорее всего, не справятся. Авторы нашли, что направление коллапса в основном предсказывается именно таким нулевым тестом.
🔧 Техника: считать точность по классам отдельно → поймать коллапс по-другому
Общая точность скрывает перекос. Попроси модель вывести матрицу «правильный класс × ответ модели». Коллапс виден сразу: один столбец заполнен, другой пуст.
Экстраполяция: сравнение двух наборов ярлыков
Это моя идея, статья её не проверяла. Если нужен надёжный классификатор, прогони один и тот же промпт с двумя наборами ярлыков на одной выборке:
Вот ответы классификатора с ярлыками «срочно/не срочно»: {список_1}.
Вот ответы с ярлыками «A/B»: {список_2}. Эталон: {эталон}.
Сравни доли ответов и точность по классам у обоих вариантов.
Какой набор ярлыков ближе к эталонному распределению?
Ресурсы
- Label Collapse in Diffusion Language Model In-Context Learning — Ziye Guo (University of Connecticut), Ye Yuan (McGill University). NeurIPS 2026, Workshop DiffuLM.
- Связанные работы: contextual calibration (Zhao et al.), PMI scoring (Holtzman et al.), batch calibration, LLaDA (Nie et al.), iLLaDA.
