3,583 papers
arXiv:2601.05009 76 8 янв. 2026 г. FREE

Robustness under Tabular Distortions: LLM не видят "битые" таблицы без явной инструкции

КЛЮЧЕВАЯ СУТЬ
Скопировал таблицу из Excel - столбцы съехали, в 'Выручке' даты вместо сумм. Ты видишь ошибку, модель - нет, берёт данные 'как есть'. Метод позволяет заставить LLM проверять структуру таблицы перед анализом. Инструкция 'проверь таблицу на ошибки' переключает режим с 'обработай' на 'сначала проверяй'. Модель сопоставляет заголовки с данными, ищет аномалии (числа вместо текста, пустые ячейки не на месте). Семантические искажения (перепутанные столбцы) исправляет почти полностью, вертикальные сдвиги (данные не с первой строки) - только в 45% случаев.
Адаптировать под запрос

TL;DR

Исследование показало: LLM не умеют автоматически замечать и исправлять ошибки в структуре таблиц — когда данные присутствуют, но столбцы съехали, заголовки перепутаны или строки сдвинулись. Человек видит такую таблицу и понимает "что-то не так", модель — нет. Только явная инструкция "проверь таблицу на ошибки перед анализом" частично активирует проверку, но не гарантирует исправление.

Главная находка: Даже топовые модели (GPT-5.2) теряют минимум 22% точности на искажённых таблицах. Причина — LLM обучены сканировать заголовки и первые строки, извлекая смысл, но игнорируют глобальную структуру. Вертикальные сдвиги столбцов (когда данные в колонке начинаются не с первой строки) — критичный провал: даже с явным предупреждением модели правильно отвечают только в 45% случаев. Модели воспринимают битую таблицу как грязные данные (удалить пустые ячейки), а не как структурную проблему (восстановить выравнивание).

Два типа искажений изучали исследователи: (1) Семантические — логически неверные данные (столбцы "систолическое" и "диастолическое давление" поменяны местами, но структура цела); (2) Структурные — геометрия сломана (столбец сдвинут на 3 строки вниз, данные не совпадают с заголовками). Второй тип — катастрофичен для LLM.


📌

Схема проблемы

КАНОНИЧНА ТАБЛИЦА:
| Состояние    | Систолическое | Диастолическое |
| Гипертония   | 136           | 86             |
| Боль в спине | 145           | 82             |

СЕМАНТИЧЕСКОЕ ИСКАЖЕНИЕ (столбцы перепутаны):
| Состояние    | Диастолическое | Систолическое |  ← названия не соответствуют данным
| Гипертония   | 136            | 86            |
| Боль в спине | 145            | 82            |

СТРУКТУРНОЕ ИСКАЖЕНИЕ (вертикальный сдвиг):
| Состояние    | Col2          | Диастолическое |
| Гипертония   | Систолическое | 86             |  ← заголовок попал в данные
| Боль в спине | 136           | 82             |  ← данные сдвинуты
| ...          | 145           | ...            |

Запрос: "Какое медианное систолическое давление по группам пациентов?"

БЕЗ ЯВНОЙ ИНСТРУКЦИИ:
→ Модель берёт данные "как есть" → неверный ответ

С ИНСТРУКЦИЕЙ "проверь таблицу":
→ Модель частично исправляет → но не всегда

🚀

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

⚠️ Сильная зона: Работа с реальными таблицами из внешних источников (экспорт, парсинг, конвертация форматов), где высок риск структурных сбоев.

Задача: Ты выгрузил отчёт по продажам из CRM в Excel, открыл в Google Sheets, скопировал и вставил в чат для анализа. При копировании съехали столбцы — в колонке "Выручка, ₽" оказались даты, а суммы сдвинулись. Визуально это заметно, но если просто попросить "посчитай медианную выручку по менеджерам", модель возьмёт те данные что видит.

Промпт:

ПЕРЕД анализом проверь таблицу на структурные и семантические ошибки:
1. Соответствуют ли данные в столбцах их заголовкам?
2. Есть ли сдвиги строк/столбцов (пустые ячейки не на своих местах)?
3. Логичны ли значения (например, возраст не может быть 120/80)?

Если найдёшь ошибки — опиши и исправь структуру ПЕРЕД расчётами.

Затем посчитай медианную выручку по менеджерам за март.

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

Результат:

Модель сначала опишет найденные проблемы: "Столбец 'Выручка, ₽' содержит даты формата DD.MM, а числовые значения находятся в столбце 'Дата сделки'". Затем предложит исправленную структуру (либо словами, либо кодом для переименования/перестановки столбцов). После этого — корректный расчёт медианы.

Внимание: Даже с этим промптом модель может пропустить вертикальные сдвиги (когда данные в столбце начинаются не с первой строки). В таких случаях лучше попросить: "Выведи первые 10 строк таблицы как ты её поняла" — и проверить визуально.


🧠

Почему это работает (частично)

Слабость LLM: Модели обучены быстро сканировать таблицы — смотреть на заголовки и несколько первых строк, извлекая семантику. Это эффективно для правильных таблиц, но создаёт слепую зону для глобальной структуры. Если столбец сдвинут вертикально на 5 строк вниз, модель не "читает всю таблицу целиком", чтобы это заметить. Она видит заголовок, видит первые данные, строит гипотезу "всё ОК" — и работает с ошибкой.

Сильная сторона LLM: Модели отлично проверяют логические инварианты, если их попросить. "Систолическое давление всегда выше диастолического" — такое правило модель знает (world knowledge). "Выручка измеряется в рублях, а не в днях" — тоже понятно. Но без явного запроса модель не включает режим критической проверки, она доверяет входным данным.

Как метод использует это: Явная инструкция "проверь таблицу на ошибки" переключает режим с "обработай данные" на "сначала валидируй, потом обрабатывай". Модель начинает сопоставлять заголовки с содержимым, искать аномалии (пустые ячейки не в конце, числа вместо текста). Но это не абсолютное решение — вертикальные сдвиги всё равно часто пропускаются, потому что требуют анализа всей структуры, а не точечной проверки.

Рычаги управления:

  • Уровень детализации проверки: Можешь попросить "опиши структуру таблицы (сколько столбцов, какие типы данных, есть ли пустые ячейки)" ПЕРЕД анализом — это заставит модель "прочитать целиком".
  • Специфичные правила: Если знаешь домен данных, добавь: "Столбец 'Возраст' должен быть 18-100, 'Вес' в кг (50-150)" — модель будет проверять на соответствие.
  • Запрос промежуточного вывода: "Покажи как ты поняла таблицу (первые 5 строк)" перед расчётами — ты увидишь ошибку раньше, чем модель даст неверный результат.

📋

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

Перед анализом таблицы выполни проверку на искажения:

1. СТРУКТУРНАЯ ПРОВЕРКА:
   - Все ли данные выровнены под своими заголовками?
   - Есть ли смещённые строки/столбцы (данные начинаются не с первой строки)?
   - Присутствуют ли заголовки внутри данных или данные в заголовках?

2. СЕМАНТИЧЕСКАЯ ПРОВЕРКА:
   - Соответствуют ли типы данных в столбцах их названиям?
   - Логичны ли значения? (например: {примеры логических правил для твоих данных})
   - Нет ли перепутанных столбцов? (например: {известные инварианты в твоём домене})

Если найдёшь проблемы:
   - Опиши каждую найденную ошибку
   - Предложи исправленную структуру
   - Спроси подтверждение перед продолжением

Затем выполни задачу: {твоя задача по анализу таблицы}

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

Плейсхолдеры: - {примеры логических правил для твоих данных} — "возраст 18-100, цена >0, дата не в будущем" - {известные инварианты в твоём домене} — "систолическое > диастолического, выручка >= себестоимость" - {твоя задача по анализу таблицы} — "посчитай среднюю выручку по менеджерам"


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

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

[вставить шаблон выше]

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


⚠️

Ограничения

⚠️ Вертикальные сдвиги — провал даже с инструкцией: Если столбец данных начинается не с первой строки (например, заголовок "попал" в ячейку данных, а сами данные сдвинуты вниз), модель исправляет это только в 45% случаев, даже когда явно предупреждена. LLM не "читают таблицу целиком построчно" — они сканируют паттерны, и глобальные структурные аномалии часто остаются незамеченными.

⚠️ Модель удаляет, а не восстанавливает: При структурных ошибках LLM часто воспринимает битую таблицу как "грязные данные" и пытается удалить "лишние" столбцы или пустые ячейки, вместо того чтобы понять "это смещение, надо выровнять". Это может привести к потере важных данных.

⚠️ Не работает для сложных искажений: Исследование тестировало одношаговые искажения (один столбец сдвинут, два заголовка перепутаны). Реальные "битые" таблицы часто имеют наслоённые ошибки (и столбцы съехали, и заголовки дублируются, и часть ячеек слиты). В таких случаях даже distortion-aware промпт не гарантирует восстановления.

⚠️ Требует знания домена для семантических проверок: Чтобы модель поняла "систолическое и диастолическое давление перепутаны", нужно либо дать ей правило явно, либо надеяться на world knowledge. Для узкоспециальных данных (внутренние коды компании, отраслевая специфика) модель не сможет проверить семантику без твоих подсказок.


🔗

Ресурсы

An Empirical Investigation of Robustness in Large Language Models under Tabular Distortions

Датасет: github.com/AIML-Researcher/table-distortion

Avik Dutta, Harshit Nigam, Hosein Hasanbeig, Arjun Radhakrishna, Sumit Gulwani (Microsoft Corp.)


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

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

Скопировал таблицу из Excel - столбцы съехали, в 'Выручке' даты вместо сумм. Ты видишь ошибку, модель - нет, берёт данные 'как есть'. Метод позволяет заставить LLM проверять структуру таблицы перед анализом. Инструкция 'проверь таблицу на ошибки' переключает режим с 'обработай' на 'сначала проверяй'. Модель сопоставляет заголовки с данными, ищет аномалии (числа вместо текста, пустые ячейки не на месте). Семантические искажения (перепутанные столбцы) исправляет почти полностью, вертикальные сдвиги (данные не с первой строки) - только в 45% случаев.

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

Стандартный промпт: Посчитай медианную выручку → модель сразу анализирует данные как видит. Distortion-aware промпт: Сначала проверка структуры ('Соответствуют ли данные заголовкам? Есть ли сдвиги?'), потом анализ. Модели обучены быстро сканировать таблицы (заголовки + первые строки), но игнорируют глобальную структуру - явная инструкция заставляет читать целиком.

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

LLM обучены эффективно работать с правильными таблицами - быстро извлекать смысл из заголовков и нескольких строк. Это создаёт слепую зону: если столбец сдвинут вертикально, модель видит заголовок, видит первые данные, строит гипотезу 'всё ОК' - и работает с ошибкой. Без явного запроса модель не включает режим критической проверки - она доверяет входным данным. Явная инструкция переключает режим: модель начинает сопоставлять заголовки с содержимым, искать логические правила ('систолическое давление всегда выше диастолического'). На семантических искажениях (перепутанные столбцы, но структура цела) точность восстанавливается до 78-85%, на структурных (вертикальные сдвиги) - только до 45%. Причина провала: LLM воспринимает битую таблицу как 'грязные данные' (удалить пустые ячейки), а не как структурную проблему (восстановить выравнивание).

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

Работа с таблицами из внешних источников → конкретно для экспортов из CRM/Excel, парсинга веб-страниц, конвертации форматов (CSV→XLSX→копипаст в чат), особенно когда таблица визуально выглядит 'битой' (столбцы не совпадают с заголовками, пустые ячейки посреди данных, числа попали в текстовые поля). НЕ подходит для сложных многослойных искажений (и столбцы съехали, и заголовки дублируются, и ячейки слиты) - там даже distortion-aware промпт не гарантирует восстановления. В таких случаях лучше исправить таблицу вручную перед загрузкой.

Мини-рецепт

1. Перед анализом запроси проверку: Добавь в промпт: Проверь таблицу на структурные и семантические ошибки: (1) Соответствуют ли данные в столбцах их заголовкам? (2) Есть ли сдвиги строк/столбцов (пустые ячейки не на своих местах)? (3) Логичны ли значения?
2. Дай специфичные правила для домена: Если знаешь правила - добавь: <правила>систолическое > диастолического, выручка >= себестоимость, возраст 18-100 - модель будет проверять на соответствие
3. Запроси промежуточный вывод: Покажи как ты поняла таблицу (первые 5 строк) ПЕРЕД расчётами - увидишь ошибку раньше чем модель даст неверный результат
4. Проверь результат вручную: Вертикальные сдвиги исправляются только в 45% случаев - если таблица сложная (много столбцов, визуально 'сломана'), лучше проверить ключевые данные глазами после того как модель покажет исправленную структуру

Примеры

[ПЛОХО] : Посчитай среднюю выручку по менеджерам за март (модель возьмёт данные 'как есть', если столбцы съехали при копировании - результат неверный, но ты не поймёшь это из ответа)
[ХОРОШО] : Перед расчётом проверь таблицу: (1) Соответствуют ли данные в столбце 'Выручка, ₽' заголовку (должны быть числа >0, а не даты формата ДД.ММ)? (2) Соответствует ли столбец 'Менеджер' заголовку (должны быть имена, а не числа)? (3) Есть ли смещённые столбцы или строки? Если найдёшь ошибки - опиши каждую и покажи исправленную структуру. Затем посчитай среднюю выручку по менеджерам за март.
Источник: An Empirical Investigation of Robustness in Large Language Models under Tabular Distortions
ArXiv ID: 2601.05009 | Сгенерировано: 2026-01-09 05:29

Проблемы LLM

ПроблемаСутьКак обойти
LLM пропускают структурные ошибки в таблицах без явной инструкции проверитьТаблица со сдвинутыми столбцами, перепутанными заголовками, смещёнными строками — модель обрабатывает "как есть", точность 22-78%; причина: LLM сканируют заголовки и первые строки, игнорируя глобальную структуру; вертикальные сдвиги критичнее (когда данные в столбце начинаются не с первой строки) — даже с предупреждением исправляются только в 45% случаевДобавь в начало промпта: Перед анализом проверь таблицу: 1) данные выровнены под заголовками? 2) есть сдвиги строк/столбцов? 3) типы данных соответствуют названиям? Если найдёшь ошибки — опиши и исправь структуру ПЕРЕД расчётами. + попроси Покажи первые 5 строк как ты поняла таблицу для ранней проверки

Методы

МетодСуть
Distortion-aware промпт — явная инструкция проверить таблицу на искажения перед анализомПеред задачей добавь блок проверки: 1) СТРУКТУРА: данные выровнены? есть сдвиги? заголовки на местах? 2) СЕМАНТИКА: типы данных соответствуют названиям? значения логичны? (возраст 18-100, цена >0) 3) Если найдёшь ошибки — опиши и исправь. Механика: LLM по умолчанию доверяют входным данным, не включают критическую проверку; явная инструкция переключает режим с "обработай" на "сначала валидируй". Для: таблицы из экспортов, парсинга, внешних источников. НЕ для: заведомо чистые данные. Ограничение: вертикальные сдвиги (столбец начинается не с первой строки) пропускаются в 55% случаев даже с промптом

Тезисы

ТезисКомментарий
LLM читают таблицы локально — сканируют заголовки и первые строки, пропуская глобальные структурные ошибкиМодель не "читает таблицу целиком построчно", а извлекает паттерн из начала; если столбец сдвинут на 5 строк вниз — не замечает. Эмпирика: вертикальные сдвиги критичнее горизонтальных. Применяй: для больших таблиц проси опиши структуру (сколько столбцов, типы данных, есть ли пустые ячейки) ДО анализа — заставит "прочитать целиком"
При ошибках в таблицах LLM пытаются удалить "лишние" данные вместо восстановления выравниванияМодель воспринимает битую таблицу как "грязные данные" (убрать пустые ячейки) а не структурную проблему (восстановить столбцы). Риск потери важных данных. Применяй: явно укажи не удаляй столбцы/строки — восстанови выравнивание если данные сдвинуты + дай пример правильной структуры если знаешь
📖 Простыми словами

Robustness under Tabular Distortions: LLM не видят "битые" таблицы без явной инструкции

arXiv: 2601.05009

Суть проблемы в том, что LLM воспринимают таблицы не как целостную структуру, а как плоский поток текста. Для модели нет разницы между аккуратным отчетом и кучей данных, где столбцы съехали, а заголовки перепутались. Если человек мгновенно видит, что цена попала в колонку с датами, то нейронка просто продолжает жрать этот мусор, пытаясь выдать осмысленный ответ. Она не обладает встроенным детектором «кривизны» — для неё любой текст по умолчанию считается валидным, даже если это структурный хаос.

Это как если бы ты пришел в ресторан, а официант принес тебе суп в плоской тарелке, а стейк — в бокале для вина. Обычный человек скажет: «Чувак, ты что-то перепутал», но нейронка в этой ситуации просто начнет есть стейк через трубочку, делая вид, что так и задумано. Она не понимает контекста формы, она видит только содержание. В итоге ты получаешь уверенный анализ данных, которые полностью искажены еще на этапе загрузки.

Исследователи проверили кучу моделей на табличных искажениях и выяснили печальную вещь: даже топовые решения лажают, когда строки сдвигаются или колонки меняются местами. Что реально хоть как-то помогает, так это явная инструкция в промпте. Нужно буквально ткнуть модель носом: «Сначала проверь, не поплыла ли структура, и только потом считай». Но даже это не панацея — в половине случаев модель видит ошибку, соглашается, что всё плохо, но всё равно выдает галлюцинации вместо корректных цифр.

Этот принцип критичен для любого, кто скармливает нейронкам выгрузки из Excel, парсинг сайтов или результаты конвертации PDF. Если ты думаешь, что GPT сама поймет, где в твоем кривом CSV-файле закончилось имя и началась фамилия, то ты сильно ошибаешься. Любой технический сбой при экспорте данных превращает твой промпт в лотерею, где шанс на адекватный ответ стремится к нулю. GEO и SEO тут не помогут — здесь ломается сама логика обработки информации.

Короче: никогда не надейся на «интеллект» модели в вопросах гигиены данных. Если таблица хоть немного кривая, LLM не станет её чинить, она просто умножит ошибку на ноль. Единственный рабочий вариант — либо чистить данные до того, как они попадут в контекстное окно, либо заставлять модель делать пошаговую верификацию структуры. Без этого любой анализ таблиц превращается в гадание на кофейной гуще, за которое ты еще и платишь токенами.

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

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

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