3,583 papers
arXiv:2509.09975 82 12 сент. 2025 г. FREE

CSV → Markdown/JSON: как научить LLM различать заголовки и значения в таблицах

КЛЮЧЕВАЯ СУТЬ
LLM путает заголовки таблиц с данными в CSV — отсюда ошибки типа 'цена 1200₽ это название товара' или пропуск несоответствий при сравнении прайсов. Метод CSV→Markdown/JSON позволяет модели правильно различать структуру таблиц — где заголовок, где значение, какая связь между ними. Сначала конвертируешь CSV в формат с явными заголовками (# для Markdown, "key": для JSON), потом даёшь задачу проверки. Модель видит структуру — перестаёт путать столбцы с данными.
Адаптировать под запрос

TL;DR

CSV → Markdown/JSON конвертация — метод улучшения понимания табличных данных через преобразование в формат, где заголовки явно отличимы от значений. LLM получает таблицу не в сыром CSV, а в Markdown (для текста) или JSON (для символьных данных) — форматах, где связь "заголовок-значение" закодирована в самой структуре. Это работает как промежуточный шаг: сначала конвертируй → потом проверяй.

LLM плохо понимают CSV-таблицы, особенно сложные. Проблема в том, что CSV не содержит информации о том, что есть заголовок, а что — данные. Когда LLM обучалась на CSV, она видела просто строки через запятую. Поэтому при проверке, например, согласованности между двумя таблицами, модель может пропустить несоответствие в заголовках или перепутать заголовок со значением. В Markdown и JSON заголовки синтаксически выделены (# или key:), что помогает модели правильно интерпретировать структуру.

Метод работает в два шага в одном промпте: (1) преобразуй CSV в Markdown/JSON, (2) выполни задачу (например, проверь согласованность). Выбор формата зависит от характера данных: если много текста — Markdown, если много символов/кода/ID — JSON. Это определяется автоматически по доле символьных элементов в тексте (через морфологический анализ).


🔬

Схема метода

Применяется в одном промпте:

ШАГ 1: Преобразуй CSV в [Markdown/JSON]
 → Таблица где заголовки синтаксически выделены
 
ШАГ 2: Выполни задачу (проверка, анализ, сравнение)
 → Результат проверки на основе правильно понятой структуры

Выбор формата:

  • Много текста (описания, параграфы) → Markdown
  • Много символов (ID, коды, технические обозначения) → JSON

🚀

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

Задача: У тебя два прайс-листа для Wildberries — старая и новая версии. Нужно найти несоответствия: где цена изменилась, где артикул переименован, где условия доставки не сходятся. Таблицы в Excel, экспортированы в CSV.

Промпт:

Вот два прайс-листа в CSV формате. 

ПРАЙС 1 (старая версия):
[CSV данные прайса 1]

ПРАЙС 2 (новая версия):
[CSV данные прайса 2]

ШАГ 1: Преобразуй оба CSV в Markdown формат, чтобы заголовки таблиц были чётко выделены.

ШАГ 2: Сравни два прайс-листа и найди все несоответствия:
- Изменения цен
- Разные артикулы для одного товара
- Различия в условиях доставки
- Любые другие расхождения

Выведи результат в формате:
- **Тип несоответствия:**
- **Где находится:** (номер строки, название товара)
- **Что изменилось:** (было → стало)
- **Рекомендация:** (нужно ли исправить)

Результат:

Модель сначала покажет Markdown-версию обеих таблиц (с # для заголовков и чёткой структурой), затем выдаст список несоответствий с указанием конкретных мест и изменений. Например: "В строке 15 цена изменилась с 1200₽ на 1250₽", "Артикул WB-12345 переименован в WB-12346 для товара 'Футболка хлопок'".


🧠

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

Слабость LLM: CSV данные не содержат явной информации о заголовках. Когда модель обучалась, она видела CSV как последовательность строк через запятую. Она не училась различать "это заголовок" и "это значение". Поэтому при анализе сложных таблиц модель может перепутать заголовок с данными или не заметить важные элементы структуры.

Сильная сторона LLM: Модель отлично понимает Markdown и JSON, потому что в этих форматах заголовки синтаксически выделены. В Markdown это #, |, **, в JSON это "key": "value". Во время обучения модель видела связь между заголовком и данными в этих форматах, поэтому может правильно их интерпретировать.

Как метод использует сильную сторону: Вместо прямой подачи CSV, мы сначала конвертируем данные в формат, где структура явная. Это работает как Chain-of-Thought для данных — модель сначала разбирает структуру (конверсия), потом работает с задачей. Двухшаговый процесс помогает модели не потерять контекст о том, что есть что.

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

  • Формат конвертации (Markdown vs JSON) → меняй в зависимости от типа данных: текстовые описания лучше в Markdown, технические ID и коды — в JSON
  • Детализация инструкций → добавь "выдели каждый заголовок как отдельную строку" для особо сложных таблиц
  • Промежуточный вывод → попроси "покажи сначала Markdown версию" чтобы видеть как модель поняла структуру

📋

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

У меня есть {описание_таблицы} в CSV формате.

CSV ДАННЫЕ:
{csv_данные}

ШАГ 1: Преобразуй CSV в {Markdown/JSON} формат, где заголовки таблицы чётко выделены от значений.

ШАГ 2: {твоя_задача}

Выведи результат в формате:
{желаемый_формат_вывода}

Что подставлять:

  • {описание_таблицы} — что за таблица: "прайс-лист товаров", "отчёт по продажам", "список задач"
  • {csv_данные} — сами данные таблицы
  • {Markdown/JSON} — выбери Markdown если таблица с текстом, JSON если много ID/кодов/символов
  • {твоя_задача} — что сделать: "найди несоответствия", "проверь на ошибки", "суммируй по категориям"
  • {желаемый_формат_вывода} — как хочешь получить результат

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

Вот шаблон для работы с таблицами. Адаптируй под мою задачу: {твоя задача}. 
Задавай вопросы, чтобы заполнить поля.

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

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


⚠️

Ограничения

⚠️ Длинные документы: После 5000 символов точность падает. Модель либо теряет информацию при конвертации, либо пропускает несоответствия. Для больших таблиц лучше разбить на части или использовать специализированные решения.

⚠️ Сложная структура: Если в CSV вложенные таблицы, объединённые ячейки или нестандартная логика заголовков — конвертация может исказить данные. Проверяй Markdown/JSON версию перед основной задачей.

⚠️ GPT-3.5 требует более чёткие инструкции: В экспериментах GPT-3.5 turbo чаще делал неполную конвертацию или отвечал общими фразами вместо конкретного анализа. GPT-4 и GPT-4o работают стабильнее.


🔍

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

Команда из Fujitsu взяла реальные дизайн-документы из банковских систем, написанные в Excel (типичная практика в Японии — 41 из 47 документов в формате Excel). Исследователи сначала определили 11 перспектив ревью — от проверки соответствия стандартам до проверки согласованности между документами. Потом отсеяли перспективы, которые требуют глубокой экспертизы (feasibility, compliance) — они для специализированных LLM. Остались перспективы уровня 1-2, которые доступны обычным LLM без fine-tuning.

Для тестов выбрали consistency check (проверка согласованности) — самую чувствительную к пониманию структуры таблиц. В документы намеренно внесли ошибки: изменили ID процессов ("execute" → "execution"), перепутали типы переменных, несоответствия в номерах и метках. Проверяли bidirectional consistency — когда одно и то же должно совпадать в обоих документах.

Сравнивали три подхода: (1) сырой CSV без изменений, (2) CSV → Markdown, (3) CSV → JSON. Тестировали на GPT-3.5 turbo, GPT-4, GPT-4o. Для каждой пары документов — 10 прогонов, всего 50 экспериментов на паттерн.

Результаты удивили конкретностью: Markdown-конвертация улучшила recall на 0.43-0.63 по сравнению с сырым CSV. Precision оставался стабильным (~0.93-0.99), но модель стала находить в разы больше ошибок. Почему? Потому что в Markdown заголовки явно выделены (#, |), и модель понимала КАК элементы связаны друг с другом. В CSV всё смешивалось в кучу.

Ещё неожиданный инсайт: для символьных данных (ID, коды) JSON работал лучше Markdown. Когда в таблице много технических обозначений, Markdown часто упрощал структуру до простых | pipe-разделителей и терял контекст. JSON сохранял вложенность и связи. А для текстовых описаний наоборот — Markdown побеждал, потому что JSON создавал излишне вложенные структуры, где терялись заголовки.

Логика исследования: Идея простая — LLM обучалась на данных где в Markdown/JSON заголовки явно отличимы от значений. Значит, если преобразовать CSV в эти форматы, модель автоматически поймёт структуру. Это подтвердилось: improvement не в промптах, а в форме подачи данных.

Проверили масштабируемость: до 5000 символов метод работает отлично (recall 0.83-0.94 на GPT-4/4o). После 5000 символов — резкий обрыв (recall падает до 0.14-0.48). Это критично, потому что в реальных проектах 70% документов длиннее 5000 символов. Но 30% документов метод покрывает уже сейчас — и это практичный результат для внедрения.


📄

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

Контекст: Исследователи использовали этот промпт для проверки согласованности между двумя дизайн-документами. Промпт простой, но эффективность зависит от предварительной конвертации CSV в Markdown/JSON.

[Request] Based on the two input design documents, please conduct a review from the perspective of consistency.

[Output Format]
- Perspective:
- Presence of Inconsistencies: (Yes or No)
- Inconsistent Locations:
- Suggested Corrections:
- Justification:

[Supplementary Notes]
- If no inconsistencies are found, state "Presence of Inconsistencies: No".
- There may be multiple points of inconsistency.

💡

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

💡 Адаптация для финансовых отчётов:

Принцип тот же — конвертация CSV в понятный формат перед анализом. Подходит для сверки бюджетов, проверки расхождений в балансах, сравнения версий договоров.

У меня два бюджетных отчёта — план и факт — в CSV.

ПЛАН:
{csv_план}

ФАКТ:
{csv_факт}

ШАГ 1: Преобразуй оба CSV в Markdown, выдели заголовки статей расходов.

ШАГ 2: Найди расхождения:
- Где факт превысил план более чем на 10%
- Где статья есть в плане, но отсутствует в факте
- Где категория расходов изменилась

Для каждого расхождения укажи:
- Статья расходов
- План vs Факт (суммы)
- Процент отклонения
- Возможная причина

🔧 Техника: Промежуточная проверка конвертации → видимость процесса

Если хочешь убедиться что модель правильно поняла таблицу, добавь инструкцию показать результат конвертации:

ШАГ 1: Преобразуй CSV в Markdown и ПОКАЖИ результат конвертации.

ШАГ 2: Только после этого выполни проверку.

Теперь ты увидишь Markdown-версию перед анализом и сможешь убедиться, что заголовки выделены правильно. Если модель напортачила — переформулируешь.


💡 Адаптация для контент-менеджмента:

Проверка согласованности между версиями контента — например, описания товаров на сайте vs маркетплейсе, меню ресторана на сайте vs в приложении.

Вот два описания товара — с сайта и с Wildberries.

САЙТ:
{описание_сайт}

WILDBERRIES:
{описание_wb}

ШАГ 1: Преобразуй оба описания в структурированный Markdown:
- Название товара
- Характеристики (размеры, материал, цвет)
- Цена
- Условия доставки

ШАГ 2: Найди несоответствия в:
- Названии товара
- Характеристиках
- Цене
- Условиях доставки

Для каждого несоответствия укажи что нужно исправить и где.

🔗

Ресурсы

Development of Automated Software Design Document Review Methods Using Large Language Models — Takasaburo Fukuda, Takao Nakagawa, Keisuke Miyazaki, Susumu Tokumoto (Fujitsu Ltd., Япония)

Исследование основано на SDEM (Standard for Software Development and Management) — внутреннем стандарте Fujitsu, совместимом с ISO/IEC 12207.

Упоминания стандартов: IEEE 1028-2008 (Software Reviews), ISO/IEC 20246:2017 (Work Product Reviews)


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

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

LLM путает заголовки таблиц с данными в CSV — отсюда ошибки типа 'цена 1200₽ это название товара' или пропуск несоответствий при сравнении прайсов. Метод CSV→Markdown/JSON позволяет модели правильно различать структуру таблиц — где заголовок, где значение, какая связь между ними. Сначала конвертируешь CSV в формат с явными заголовками (# для Markdown, "key": для JSON), потом даёшь задачу проверки. Модель видит структуру — перестаёт путать столбцы с данными.

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

Не подавай CSV напрямую — добавь промежуточный шаг конвертации в формат где заголовки синтаксически выделены. Два шага в одном промпте: (1) 'Преобразуй CSV в Markdown/JSON' → (2) 'Теперь найди несоответствия/проверь/сравни'. Выбор формата зависит от типа данных: много текста (описания товаров, отзывы) → Markdown. Много символов (артикулы, ID, коды) → JSON. Это работает как Chain-of-Thought для данных — модель сначала разбирает структуру, потом решает задачу.

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

CSV не содержит явной информации о том, что является заголовком. Когда модель обучалась, она видела просто строки через запятую — не училась различать 'это название столбца' и 'это значение ячейки'. В Markdown и JSON связь 'заголовок-значение' закодирована в самой структуре (символ # или пара key:value). Во время обучения модель видела миллионы примеров где # означает заголовок — она научилась этой связи. Двухшаговая конвертация заставляет модель сначала распознать структуру, потом работать с ней — это снижает путаницу при анализе сложных таблиц.

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

Работа с таблицами в CSV → конкретно для проверки согласованности между версиями (старый/новый прайс, два отчёта, разные выгрузки), особенно когда таблицы сложные (10+ столбцов, похожие названия, вложенная логика). Также для поиска ошибок в данных — когда нужно найти несоответствия типа 'артикул в одной таблице не совпадает с другой' или 'цена изменилась без причины'. НЕ подходит для таблиц длиннее 5000 символов — точность падает, модель теряет информацию при конвертации. Для больших документов лучше разбить на части или использовать специализированные инструменты.

Мини-рецепт

1. Определи тип данных: если таблица с текстом (описания, комментарии, параграфы) → выбирай Markdown. Если много символов (ID типа WB-12345, артикулы, коды) → выбирай JSON.
2. Построй двухшаговый промпт: 'ШАГ 1: Преобразуй CSV в [Markdown/JSON] формат, где заголовки чётко выделены от значений. ШАГ 2: [твоя задача - найди несоответствия/проверь ошибки/сравни]'
3. Проверь промежуточный результат: попроси 'Покажи сначала Markdown/JSON версию' чтобы видеть как модель поняла структуру — если конвертация кривая, исправь инструкции
4. Укажи формат вывода: 'Выведи результат: Тип несоответствия / Где находится (строка, товар) / Что изменилось (было→стало)'

Примеры

[ПЛОХО] : Вот два прайса в CSV. Найди все несоответствия между ними — модель получает сырой CSV, путает заголовки с данными, пропускает изменения цен или артикулов.
[ХОРОШО] : Вот два прайса в CSV. ШАГ 1: Преобразуй оба в Markdown формат, чтобы заголовки таблиц были чётко выделены. ШАГ 2: Сравни и найди все несоответствия: изменения цен, разные артикулы для одного товара, различия в условиях доставки. Выведи: Тип несоответствия / Где (строка, товар) / Что изменилось (было→стало) — модель сначала показывает Markdown-версию с чёткими заголовками (#), потом выдаёт список конкретных несоответствий: 'В строке 15 цена 1200₽→1250₽', 'Артикул WB-12345 переименован в WB-12346 для товара Футболка хлопок'.
Источник: Development of Automated Software Design Document Review Methods Using Large Language Models
ArXiv ID: 2509.09975 | Сгенерировано: 2026-01-12 01:39

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

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

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