TL;DR
LTEM (LLM-friendly Table-Enhanced Markdown) — это обычная Markdown-таблица, к которой добавлено несколько маркеров. Они прямо показывают модели, какие ячейки объединены и как устроена многоэтажная шапка. << значит «эта ячейка продолжает соседнюю слева», ^^ — «продолжает ячейку сверху». Есть и атрибуты {c:2} и {r:2}: «растянуть на 2 столбца» и «на 2 строки». Строки над разделителем |---| считаются шапкой.
Главная находка — про форматы вообще, а не только про LTEM. Таблицы из отчётов и научных статей почти всегда с объединёнными ячейками. Их приходится отдавать модели в формате, который объединение не выражает (Markdown, CSV), или в многословном (HTML, LaTeX). LaTeX оказался худшим выбором: он даёт самую низкую точность и заметную долю «битых» ответов — модель выдаёт то, что нельзя разобрать. У одной из моделей точность на LaTeX просела очень сильно. HTML точен, но тянет много лишних токенов. Простой Markdown и CSV на средних результатах почти не уступали HTML.
LTEM по точности вышел на уровень HTML, а в расходе токенов он близок к обычному Markdown. «Битых» ответов у него меньше всего. Выигрыш над обычным Markdown небольшой, и честнее считать его страховкой для сложных таблиц, а не прорывом. Метод простой: дать таблицу в LTEM и приложить к промпту короткую справку по семи новым элементам синтаксиса.
Схема метода
ШАГ 1: Оцени таблицу → плоская (шапка + строки) или с объединёнными ячейками / многоуровневой шапкой
ШАГ 2: Плоская → обычный Markdown (или CSV, если нужна экономия токенов)
ШАГ 3: Сложная → перепиши в LTEM: << / ^^ / {c:N} / {r:N}, шапка в несколько строк над |---|
ШАГ 4: В тот же промпт добавь короткую справку по маркерам → задай вопрос по таблице
(всё в одном промпте; конвертацию можно поручить LLM отдельным запросом)
Чего избегать: отдавать таблицу модели в LaTeX.
Пример применения
Задача: Финансовый аналитик в Москве разбирает квартальный отчёт эмитента из PDF. Таблица сегментов с «двухэтажной» шапкой: сверху «Выручка, млрд ₽», под ней «Q1» и «Q2». Слева объединённая ячейка «Финтех», под ней две строки. Если вставить такую таблицу в чат обычным текстом, столбцы «поплывут». Модель начнёт путать, к какому кварталу относится число. Цифры в примере условные.
Промпт:
Ниже таблица в формате LTEM (расширенный Markdown).
Правила чтения:
- Все строки над разделителем |---| — шапка. Верхняя строка — группа, нижняя — подзаголовки.
- << в ячейке: она объединена с ячейкой слева (продолжает её).
- ^^ в ячейке: она объединена с ячейкой сверху (продолжает её).
- {c:N} — ячейка занимает N столбцов, {r:N} — N строк.
| Сегмент | Выручка, млрд ₽ | << |
| ^^ | Q1 | Q2 |
| ------- | --------------- | --- |
| Финтех | 120 | 135 |
| Ритейл | 310 | 295 |
| Облако | 40 | 55 |
Вопрос: в каком сегменте выручка во втором квартале выросла сильнее всего в процентах?
Покажи расчёт по каждому сегменту, затем дай ответ.
Результат: Модель сначала расшифрует структуру шапки: «Выручка» охватывает Q1 и Q2. Затем она пройдёт по сегментам и посчитает рост по каждому. В конце назовёт сегмент с максимальным ростом. Риск перепутать квартал и столбец ниже, чем при «плывущем» тексте из PDF.
Почему это работает
Слабость. Таблица двумерная, а модель читает текст по одной линии. Если ячейка объединена, в тексте нет знака, что она «растянута». Модель вынуждена угадывать, какие столбцы попадают под заголовок. В HTML и LaTeX объединение записано (colspan, \multicolumn), но модель должна сама превратить эту запись в позиции ячеек. Это лишний шаг, на котором она ошибается и ломает формат ответа.
Сильная сторона. Модели отлично знают Markdown: он повсюду в обучающих текстах и является их формой вывода по умолчанию. LTEM остаётся надстройкой над ним. Даже если маркеры воспринять как обычный текст, базовая структура таблицы сохраняется.
Как метод обходит слабость. Объединение записано явно прямо в ячейке (<<, ^^), и угадывать не нужно. Читать таблицу можно сверху вниз за один проход. При этом не раздувается длина запроса, как с HTML.
Рычаги управления:
- Маркер << или {c:N} → << удобнее для узких объединений, {c:5} короче для широких.
- Количество строк шапки над |---| → столько уровней и опишутся, дополнительный синтаксис не нужен.
- Справка по синтаксису → короче для простых таблиц, полнее для сложных. Она тоже стоит токенов.
- Для вложенных таблиц → разбей на отдельные таблицы с метками | # id | и ссылками @id вместо вложенности.
Шаблон промпта
Таблица ниже записана в формате LTEM (Markdown с расширениями).
Правила чтения:
- Все строки над разделителем |---| — многоуровневая шапка.
- << : ячейка продолжает ячейку слева (объединение по столбцам).
- ^^ : ячейка продолжает ячейку сверху (объединение по строкам).
- {c:N} : ячейка занимает N столбцов; {r:N} : N строк; {c:N,r:M} : оба сразу.
- \\ внутри ячейки — перенос строки.
- | # {идентификатор} | в первой строке — метка таблицы; @{идентификатор} в ячейке — ссылка на другую таблицу.
{таблица_в_LTEM}
Задача: {вопрос_или_действие}
Формат ответа: {формат}
Что подставлять: {таблица_в_LTEM} — ваша таблица с маркерами. {вопрос_или_действие} — вопрос по данным или просьба сгенерировать таблицу. {формат} — например, «сначала расчёт по шагам, потом короткий вывод».
Справку по маркерам я собрал по описанию синтаксиса в статье. Полный текст справки авторов лежит в приложениях, их в разбираемом фрагменте нет.
🚀 Быстрый старт — вставь в чат:
Вот шаблон формата LTEM для таблиц. Адаптируй под мою таблицу: [опиши или вставь свою таблицу].
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит, какие ячейки объединены и сколько уровней в шапке. Эти данные нужны, чтобы правильно расставить маркеры << и ^^. Она перепишет вашу таблицу в LTEM и соберёт готовый промпт.
Ограничения
⚠️ Выигрыш над обычным Markdown небольшой: на средних результатах LTEM, HTML, Markdown и CSV почти не различаются. Главная проблема была у LaTeX. LTEM нужен, когда в таблице есть объединения. На плоских таблицах хватит обычного Markdown.
⚠️ Гайд стоит токенов: справку по маркерам придётся прикладывать к каждому промпту. В статье токены считали без неё, поэтому в коротких запросах «экономия» частично съедается.
⚠️ Генерация таблиц: при создании таблиц лучшим оказался HTML, а LTEM только сравним с MultiMarkdown. Чтобы получить LTEM-ответ, который можно вставить в Word или Notion, его всё равно придётся конвертировать.
⚠️ Синтетические таблицы и разные модели: основной бенчмарк собран автоматически из сгенерированных таблиц и вопросов. Проверка на реальных таблицах (HiTab) тоже есть, но её цифры в доступной части не показаны. У одной из моделей (Gemini 2.5 Pro) разницы с LaTeX значимой не нашли.
⚠️ Нет рендеринга: LTEM — исследовательский формат. Обычные просмотрщики Markdown покажут маркеры как текст.
Как исследовали
Авторы сначала разложили сложность таблиц на шесть «кубиков»: сетка, шапка, объединение ячеек, вложенная шапка, стопка секций и склейка таблиц с разными схемами. Из них составили шесть уровней сложности. Затем с помощью Claude собрали синтетический бенчмарк STB: 1089 таблиц и 4356 вопросов пяти доменов (наука, финансы, товары, опросы, расписания). Около 30% таблиц попали на уровень L3, где впервые нужны объединённые ячейки. Там Markdown и CSV уже не могут выразить структуру. Чтобы убрать ошибки в ответах, оставили только вопросы, на которых две небольшие модели из разных семейств дали тот же ответ, что и генератор.
Каждую таблицу записали шестью способами: Markdown, CSV, HTML, LaTeX, MultiMarkdown и LTEM. Задавали вопросы пяти моделям (GPT-5, Gemini 2.5 Pro, Llama 4 Maverick, Qwen3-235B, DeepSeek-R1) в три прогона. Проверили и реальные таблицы из HiTab. Для генерации просили трёх моделей восстановить таблицу по описанию и сравнивали с эталоном.
Результаты на STB: LTEM 0.813, HTML 0.812, Markdown и MultiMarkdown 0.810, CSV 0.808, LaTeX 0.777. «Битых» ответов у LaTeX 2,67% против 0,14% у LTEM. Модель Qwen3-235B на LaTeX провалилась до 0,66 при ~0,80 на остальных форматах. Удивило не то, что LTEM сравнялся с HTML, а то, что обычные Markdown и CSV сидели почти там же. Главный вывод для практики: не точность решает выбор, а надёжность формата и цена в токенах. CSV самый дешёвый: около 370 токенов запроса против 612 у HTML. Статистически (тест Макнемара) LTEM значимо обошёл LaTeX на четырёх из пяти моделей.
С ростом сложности точность падает от L2 к L3 и дальше к L4. Именно там модель должна следить за диапазонами объединений и ролями заголовков.
Оригинал из исследования
Примеры синтаксиса из статьи.
| Revenue | << | | Revenue {c:2} |
| ------- | ------- | = | ------- | ------- |
| Q1 | Q2 | | Q1 | Q2 |
(Figure 1b: две эквивалентные записи colspan — маркер << и атрибут {c:N}.)
| Report | << | << |
| Region | Q1 | Q2 |
| ------ | --- | --- |
| Asia | 100 | 120 |
(Figure 2: многоуровневая шапка — все строки над разделителем считаются шапкой.)
| Feature | Details | Status |
| ------- | -------------------------------- | ----------- |
| Speed | - 2x faster \\ - 50% less memory | [x] Done |
| Formula | $E = mc^2$ | [ ] Pending |
(Figure 3: многострочное содержимое ячейки через \\.)
|# orders |
| OrderID | Customer | Items | ShipTo |
| ------- | -------- | ----------- | ------ |
| 1001 | Alice | @items_1001 | Seoul |
| 1002 | Bob | @items_1002 | Busan |
|# items_1001 |
| Product | Qty | UnitPrice |
| ------- | --- | --------- |
| Apple | 3 | 1.00 |
| Banana | 5 | 0.50 |
|# items_1002 |
| Product | Qty | UnitPrice |
| ------- | --- | --------- |
| Laptop | 1 | 999.00 |
(Figure 4: связанные таблицы — вместо вложенности таблицы разделены и связаны метками | # id | и ссылками @ref.)
Контекст: Это иллюстрации синтаксиса из раздела с описанием формата. Полная справка по формату (EBNF, правила валидации) находится в приложениях, в предоставленном фрагменте её нет.
Адаптации и экстраполяции
💡 Адаптация для правила в инструкциях: вывод про LaTeX можно закрепить в системном промпте или файле инструкций (например, GPT с данными или CLAUDE.md). Это моя экстраполяция, сама статья правил для инструкций не даёт.
Если нужно показать или передать таблицу:
- плоскую — формат Markdown;
- с объединёнными ячейками — Markdown с маркерами << (слева) и ^^ (сверху) и краткой справкой по ним;
- не использовать LaTeX и HTML для табличных данных, если об этом не просили.
🔧 Техника: убрать объединения → стабильность. Если не хочется вводить новый синтаксис, разверни объединённые ячейки: повтори значение «Выручка» в каждом подстолбце («Выручка Q1», «Выручка Q2») и в каждой строке группы. Структура станет плоской, и подойдёт обычный Markdown или CSV. Это моя идея, статья её не проверяла.
Ресурсы
- LTEM: LLM-Friendly Table-Enhanced Markdown for Table Understanding and Generation
- Авторы: Eunbin Kim, Hyeonseok Kang, Sangkeun Jung. Chungnam National University (Республика Корея), EurekaAI
- Бенчмарк STB (Synthetic Table Benchmark), таксономия F1–F6 / L1–L6 и спецификация формата — авторы заявляют об открытом выпуске
- HiTab (Cheng et al., 2022) — публичный бенчмарк по иерархическим таблицам
- Связанные работы: Sui et al. 2024, LongTableBench, RealHiTBench
