TL;DR
Если попросить LLM оценить отзыв по шкале от 1 до 5, результат может измениться просто от того, в каком порядке вы описали шкалу — даже если смысл шкалы остался тем же. Исследователи проверили это на десяти топовых моделях и обнаружили: абсолютно все они «плывут» от трёх видов перестановок — порядка меток (1=плохо/5=хорошо или наоборот), порядка примеров-подсказок и того, где эти примеры стоят относительно вопроса.
Самое неприятное: точность и стабильность живут отдельно друг от друга. Модель может отвечать точнее, но при этом сильнее скакать от перестановок — например, натуральные названия меток («плохо», «отлично») вместо цифр почти не меняют точность, но резко увеличивают шанс, что ответ перевернётся при смене порядка. Единственное, что улучшает и точность, и стабильность одновременно — уменьшение числа градаций шкалы (не 5 баллов, а 3 или 2).
Готового лекарства нет: калибровочные методы не спасают от смещения меток, а попарное/списочное сравнение вариантов часто просаживает точность. Единственный рабочий компромисс — listwise-compare: попросить модель сравнивать варианты между собой, а не оценивать по отдельности. Это снижает нестабильность почти на пятую часть при минимальной потере точности.
Схема метода (три проверки на смещение)
ПРОВЕРКА 1 (порядок меток): Прогони задачу дважды →
Раз 1: 1=плохо ... 5=отлично
Раз 2: 1=отлично ... 5=плохо (проекция меток перевёрнута)
→ Сравни, изменился ли смысловой ответ
ПРОВЕРКА 2 (порядок примеров): Прогони задачу с разным порядком примеров-подсказок →
По возрастанию класса / по убыванию / вперемешку
→ Сравни ответы
ПРОВЕРКА 3 (место примеров): Прогони задачу, меняя место блока примеров →
Примеры перед вопросом / после вопроса / часть до, часть после
→ Сравни ответы
Все три проверки выполняются отдельными запросами с одним и тем же заданием, меняется только формат.
Пример применения
Задача: Вы настраиваете промпт для регулярной оценки тональности отзывов клиентов на Wildberries или Яндекс.Маркете через ChatGPT — хотите доверять шкале от 1 до 5.
Промпт (проверка устойчивости):
Ниже отзыв. Оцени тональность по шкале:
1 — очень негативный
2 — негативный
3 — нейтральный
4 — позитивный
5 — очень позитивный
Отзыв: «Доставили быстро, но упаковка была порвана, товар цел.»
Ответь только числом.
Затем повторите тот же запрос, но с перевёрнутой шкалой:
1 — очень позитивный
2 — позитивный
3 — нейтральный
4 — негативный
5 — очень негативный
Отзыв: «Доставили быстро, но упаковка была порвана, товар цел.»
Ответь только числом.
Результат: Если модель честно понимает шкалу, при переводе цифры 4 (позитивный) в новой нумерации она должна выдать 2. На практике часто получится другое число — это и есть смещение от перестановки. Вы увидите несовпадение смыслового результата при формально одинаковой задаче.
Почему это работает
LLM не «понимает» шкалу как абстрактную ось значений — она предсказывает следующий токен, опираясь на паттерны позиции и формата в тексте, который видела при обучении. Цифра «5» в конце шкалы статистически ассоциируется с одними паттернами независимо от того, что вы к ней приписали словами.
Модель хорошо умеет сравнивать варианты друг с другом (это ближе к тому, как она обучалась ранжировать), но хуже — присваивать абсолютное число изолированному объекту. Поэтому просьба «сравни отзыв А и отзыв Б, какой позитивнее» даёт более стабильный результат, чем «поставь отзыву А число от 1 до 5».
Рычаги управления промптом: - Число градаций шкалы ↓ (5→3 или 5→2) → одновременно точнее и стабильнее. Если задача позволяет — дробите шкалу грубее. - Числовые метки вместо словесных («1,2,3» вместо «плохо, нейтрально, отлично») → меньше смещения от перестановки меток, хотя точность может чуть просесть. - Меньше примеров-подсказок (few-shot) → меньше нестабильности от порядка примеров, если задача не требует много контекста. - Формулировка через сравнение, а не через изолированную оценку → просите «сравни А и Б» вместо «оцени А от 1 до 5» для более надёжного результата.
Шаблон промпта
Тебе нужно оценить {объект} по шкале от 1 до {N}, где:
{шкала_с_описанием}
{объект_для_оценки}
Перед тем как дать финальный ответ, дважды прогони эту задачу:
1) с текущей шкалой
2) с перевёрнутой шкалой (1 становится {N}, {N} становится 1)
Сравни, совпадает ли смысловой результат (не число, а смысл — например «позитивный»).
Если результат разный — сократи шкалу до 2-3 градаций и повтори.
Что подставлять:
- {объект} — что оцениваете (отзыв, тональность текста, качество кода)
- {N} — число градаций шкалы
- {шкала_с_описанием} — сама шкала с пояснениями
- {объект_для_оценки} — конкретный текст/данные
🚀 Быстрый старт — вставь в чат:
Вот метод проверки на позиционное смещение при оценке по шкале. Адаптируй под мою задачу: {твоя задача}.
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит, какая у вас шкала и что вы оцениваете — это нужно, чтобы правильно сформулировать перевёрнутую версию шкалы для проверки на устойчивость.
Ограничения
⚠️ Нет надёжного универсального лекарства: протестированные методы калибровки (контекстная калибровка, PriDe) не уменьшают смещение от порядка меток — некоторые даже увеличивают его.
⚠️ Метод сравнения (listwise-compare) не переносится одинаково между моделями: конфигурация, подобранная для одной модели, может улучшать стабильность в одном аспекте и ухудшать в другом при переносе на другую модель.
⚠️ Прямое попарное сравнение вариантов сильно теряет точность — если просто просить модель сравнивать пары объектов без продуманной агрегации результатов, итоговая точность падает заметно.
⚠️ Метод не решает проблему полностью, только смягчает — даже лучший найденный вариант (listwise-compare) снижает смещение примерно на пятую часть, а не убирает его.
Как исследовали
Исследователи взяли десять топовых моделей (Claude, GPT, Gemini, DeepSeek, Llama, Qwen, Grok) от семи разных провайдеров и прогнали их через задачу классификации отзывов по тональности (шкала SST-5, 5 градаций). Три «зонда» — перестановка меток, порядка примеров и места примеров — применялись при детерминированной генерации (модель выдаёт одинаковый ответ на одинаковый вход), чтобы точно измерить эффект перестановки без шума случайности.
Результат ошарашил: абсолютно все 30 комбинаций модель×тест показали значимую нестабильность — от 8,5% до 61,5% ответов «переворачивались» просто от смены порядка. Даже при случайной генерации (температура 0.7) у шести из десяти моделей смещение оставалось заметным сверх обычного шума повторных запросов.
Дальше команда перебрала восемь факторов промпта (формат меток, число градаций, число примеров, пунктуация, формулировка инструкции) на пяти датасетах и обнаружила ключевую закономерность: точность и устойчивость почти всегда конфликтуют — улучшение одного часто портит другое. Единственное исключение — уменьшение числа градаций шкалы улучшало и то, и другое сразу. Это логично: чем меньше вариантов, тем меньше пространство для «путаницы» позиций.
Наконец, протестировали разные способы построения самого пайплайна оценки (попарное сравнение, списочное сравнение, калибровка) и выяснили, что listwise-compare — просить модель сравнивать варианты, а не оценивать изолированно — даёт лучший баланс, хотя и не идеальный, и плохо переносится между моделями без повторной настройки.
Ресурсы
Yu Wang, Jeffrey Zhou, Menglin Liu, Ge Shi. Position Bias in Ordinal Classification: A Systematic Evaluation. Cornell University, University of Washington, The Chinese University of Hong Kong (Shenzhen), UC Davis. Preprint.
