3,583 papers
arXiv:2608.25358 74 26 авг. 2026 г. FREE

Scissors Pattern: почему LLM путает не значения, а их место в структуре

КЛЮЧЕВАЯ СУТЬ
35% правильно вспомненных значений модель втыкает не в то поле — и это у топовых моделей, у слабых — 74%. Сами значения LLM помнит почти идеально, проблема не в памяти. Метод двухшаговой генерации позволяет резко снизить путаницу адресации в сложных вложенных JSON и таблицах. Фишка: заставь модель сначала выписать список «путь → значение» текстом, отдельно от сборки — тогда адресация фиксируется заранее, а не решается на ходу внутри вложенной структуры.
Адаптировать под запрос

TL;DR

Когда просишь LLM сгенерировать сложный JSON или таблицу, модель почти всегда помнит правильные значения — но раскладывает их не по тем местам. Значение «Москва» она вспомнит верно, но воткнёт в поле «город доставки» вместо «город регистрации». Исследователи назвали это scissors pattern («паттерн ножниц»): чем сложнее структура, тем сильнее расходятся две линии — «значение где-то есть» (остаётся высокой) и «значение на своём месте» (резко падает).

Главная находка: глубина вложенности рушит адресацию быстрее, чем правильность самих значений. На сложных JSON-схемах (4 уровня вложенности) даже топовые модели путают место у 35% правильно вспомненных значений, а слабые модели — у 74%. Причина в том, что модель ориентируется не на реальную позицию в структуре, а на смысл названия поля — если поле «name» встречается в разных разделах (личные данные и рабочая история), модель путает, в какой раздел его класть, потому что цепляется за похожее название, а не за структурную координату.

Авторы предлагают метод диагностики SCD — разбивать проверку вывода на три уровня: формат валиден → все нужные пути на месте → значения на своих местах. Отдельно они дотренировали модель через reinforcement learning (SA-RLVR), чтобы она лучше «привязывала» значения к нужным координатам — но это требует GPU и кода, для чат-пользователя неприменимо.


🔬

Схема метода (диагностика SCD)

УРОВЕНЬ 1: Формат валиден? → да/нет (парсится ли JSON/таблица)
УРОВЕНЬ 2: Все нужные пути/поля присутствуют? → % совпадения со схемой
УРОВЕНЬ 3: Значения стоят в правильных местах? → % совпадения "путь = значение"

Диагностика ошибки:
Value Presence (VP) — значение есть где-то в выводе
Value Placement Accuracy (VPA) — значение стоит в правильном месте
Разрыв VP − VPA = сколько значений "потерялись не по смыслу, а по адресу"

🚀

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

Задача: Ты собираешь через ChatGPT структуру для сложной анкеты сотрудника — JSON с разделами «Личные данные», «Образование», «Опыт работы», где в каждом разделе есть повторяющиеся поля: name, phone, дата.

Промпт (двухшаговая генерация, снижает путаницу адресации):

Вот данные для JSON-анкеты сотрудника:
- Личные данные: имя = Иванов И.И., телефон = +7900...
- Образование: имя учебного заведения = МГУ, дата = 2015
- Опыт работы: имя компании = Яндекс, телефон = +7495...

Шаг 1: Сначала выпиши списком, БЕЗ сборки в JSON, соответствие 
"путь в структуре → значение" для каждого поля. 
Используй полный путь, например: personal.name = Иванов И.И.

Шаг 2: Только после того как список готов и проверен — 
собери финальный JSON по этому списку, не меняя значения.

Результат: Модель сначала выдаст явную таблицу «путь → значение» — это заставляет её проверить адресацию отдельно от значений, до сборки итоговой структуры. Затем на основе этого списка соберёт JSON. Такой подход напрямую бьёт по найденной проблеме: модель перестаёт путать похожие поля («name» в разных разделах), потому что адресация зафиксирована текстом заранее, а не решается «на ходу» при генерации вложенной структуры.


🧠

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

LLM не «видит» структуру как дерево с координатами — она генерирует текст токен за токеном, ориентируясь на смысл названий полей. Когда в разных разделах есть похожие поля (name, phone), модель хватается за смысловую подсказку («это же имя!») вместо того, чтобы отследить, в какой именно узел дерева она сейчас пишет.

Модель хорошо умеет удерживать в памяти сами значения — доказано тем, что VP (значение где-то есть) остаётся высоким даже на сложных схемах. Слабое место — привязка значения к точной координате, особенно когда вложенность глубокая или названия полей повторяются.

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

Рычаги управления: - Глубина вложенности → если можешь, делай структуру более плоской (меньше уровней = меньше ошибок адресации) - Названия полей → делай их уникальными и описательными внутри всей структуры, не повторяй одинаковые имена в разных разделах - Для критичных данных → проси модель дважды: сначала список «путь→значение», потом сборка; или попроси модель после сборки сверить финальный JSON с исходным списком


⚠️

Ограничения

⚠️ Глубокая вложенность: начиная с 3-4 уровней вложенности JSON, даже сильные модели массово путают позиции значений — почти каждое третье-четвёртое значение попадает не туда.

⚠️ Повторяющиеся имена полей: если одно и то же название поля встречается в разных разделах структуры (например, «name» в личных данных и в опыте работы), ошибка размещения растёт заметно — модель путает разделы.

⚠️ Метод обучения (SA-RLVR) не для чата: улучшение адресации через RL требует GPU, LoRA-дообучение и код — это не воспроизвести в обычном диалоге с LLM, применим только диагностический принцип и приём "сначала список, потом сборка".


🔗

Ресурсы

Zhang Y., Wu C., Wang L., Li J. «Where vs What: Decomposing Structural and Content Failures in LLM-Generated Structured Outputs». Shenzhen University, Shenzhen Institutes of Advanced Technology (Chinese Academy of Sciences).


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

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

35% правильно вспомненных значений модель втыкает не в то поле — и это у топовых моделей, у слабых — 74%. Сами значения LLM помнит почти идеально, проблема не в памяти. Метод двухшаговой генерации позволяет резко снизить путаницу адресации в сложных вложенных JSON и таблицах. Фишка: заставь модель сначала выписать список «путь → значение» текстом, отдельно от сборки — тогда адресация фиксируется заранее, а не решается на ходу внутри вложенной структуры.

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

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

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

LLM не видит JSON как дерево с координатами. Она генерирует токены, цепляясь за смысл названия поля. Если поле «name» встречается и в личных данных, и в опыте работы — модель хватается за смысловое сходство, а не за то, в каком узле дерева она сейчас пишет. Чем глубже вложенность, тем быстрее рушится привязка к месту — при том что сама память на значения не проседает. Отсюда и разрыв: значение есть в выводе, но не там где нужно.

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

Генерация сложных вложенных JSON, конфигов, многораздельных анкет и таблиц для CRM/Excel → конкретно там, где есть повторяющиеся имена полей в разных разделах (name, phone, дата) → особенно когда вложенность от 3 уровней и глубже. НЕ критично для плоских структур с уникальными именами полей — там scissors pattern почти не проявляется.

Мини-рецепт

1. Сначала список, не JSON: попроси модель выписать текстом соответствие «полный путь = значение» для каждого поля, без сборки в структуру.
2. Полные пути обязательны: не «name», а personal.name или education.name — так модель видит координату, а не только смысл.
3. Проверь список: глазами пробегись — нет ли значения не в том разделе, пока это ещё текст, а не вложенный JSON.
4. Сборка по готовому списку: только после проверки проси собрать финальный JSON строго по этому списку, без изменения значений.
5. Для критичных данных — сверка: после сборки попроси модель сравнить итоговый JSON с исходным списком путь-значение.

Примеры

[ПЛОХО] : Собери JSON-анкету сотрудника с разделами Личные данные, Образование, Опыт работы, используя эти данные: имя Иванов И.И., телефон +7900..., МГУ 2015, Яндекс +7495...
[ХОРОШО] : Шаг 1: Выпиши списком, без сборки в JSON, полный путь и значение для каждого поля (например: personal.name = Иванов И.И., education.name = МГУ, experience.phone = +7495...). Шаг 2: Только после того как список готов — собери JSON по этому списку, не меняя значения.
Источник: Where vs What: Decomposing Structural and Content Failures in LLM-Generated Structured Outputs
ArXiv ID: 2608.25358 | Сгенерировано: 2026-08-27 04:26

Проблемы LLM

ПроблемаСутьКак обойти
Модель путает место значения в структуре, а не само значениеПросишь LLM собрать сложный вложенный JSON или таблицу с разделами. Модель правильно помнит значение "Москва", но вставляет его не в то поле — например, в "город доставки" вместо "город регистрации". Чем глубже вложенность и чем больше повторяющихся имён полей ("name", "phone" в разных разделах) — тем чаще путаница. Проблема не в памяти модели, а в адресацииДелай структуру плоской где можно — меньше уровней вложенности. Давай полям уникальные названия, не повторяй одно имя в разных разделах. Для критичных данных — сначала попроси модель выписать список "путь значение" отдельно, без сборки JSON, и только потом собирать финальную структуру по этому списку

Методы

МетодСуть
Двухшаговая генерация — сначала адресация, потом сборкаНе проси модель сразу собрать сложный JSON. Сначала попроси выписать список: путь.в.структуре = значение для каждого поля, без сборки. Затем — собрать финальный JSON строго по этому списку, не меняя значения. Работает потому что модель генерирует вложенную структуру токен за токеном и путает похожие имена полей "на ходу". Явный список фиксирует адресацию текстом заранее, до того как нужно решать куда что класть внутри дерева. Применяй: сложные многоуровневые JSON, анкеты с повторяющимися полями в разных разделах, конфиги с 3+ уровнями вложенности. Не нужен: простые плоские структуры без повторяющихся имён

Тезисы

ТезисКомментарий
Модель ориентируется на смысл названия поля, а не на его позицию в деревеLLM не видит структуру как дерево с чёткими координатами — она генерирует текст последовательно, цепляясь за смысловые подсказки в названиях полей. Если поле "name" встречается в разделе "личные данные" и в разделе "опыт работы", модель хватается за смысл слова "имя", а не отслеживает в каком узле дерева она сейчас пишет. Применяй: делай названия полей уникальными и описательными по всей структуре — "personal_name" и "employer_name" вместо двух одинаковых "name"
📖 Простыми словами

Where vs What: Decomposing Structural and Content Failures inLLM-Generated Structured Outputs

arXiv: 2608.25358

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

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

Исследователи назвали этот феномен паттерном ножниц: знание нужных фактов остаётся высоким, а точность попадания в нужный узел летит в пропасть. Стоит добавить в схему повторяющиеся ключи вроде name, phone или date в разные секции анкеты, как модель ловит структурный клин и путает поля в большинстве попыток.

Тестировали на анкетах и коде, но принцип универсален: те же грабли вылезут при парсинге накладных, извлечении сущностей в RAG и автозаполнении CRM-систем. Чем глубже вложенность структуры, тем выше шанс получить на выходе красиво оформленный мусор.

Короче: хватит требовать от LLM глубоких ветвистых иерархий с абстрактными названиями. Уплощай схемы данных, делай ключи уникальными вроде company_phone вместо phone и валидируй каждый узел. Иначе на выходе будет синтаксически идеальный JSON, в котором город регистрации уехал в поле для индекса.

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

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

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