Недавно я столкнулся с интересным поведением языковой модели, которое меня по-настоящему удивило, и хочу поделиться этим наблюдением с сообществом.

Такую иллюстрацию к статье предложил ChatGPT. Ладно
Такую иллюстрацию к статье предложил ChatGPT. Ладно

Мы разрабатывали RAG-систему для ответов на вопросы по корпоративным документам. Как часто бывает, большинство таких документов хранятся в форматах, которые языковые модели напрямую не понимают — например, PDF или DOCX. С этой проблемой сталкивается практически любая команда, работающая над RAG для бизнеса, так как бизнес привык работать именно с такими файлами.

Первым делом такие документы необходимо сконвертировать в удобный для LLM текстовый формат — например, в Markdown или обычный текст. Одна из главных сложностей при конвертации PDF-файлов возникает, когда они сверстаны в несколько столбцов. Корректно “распрямить” такой текст в последовательный поток — нетривиальная задача. Сегодня с этим хорошо справляются мультимодальные модели, принимающие на вход скриншот страницы, но в тот раз я воспользовался старым добрым конвертером Aspose, который отлично зарекомендовал себя при работе с DOCX (PDF не пробовал).

В результате эксперимента я хотел понять, насколько хорошо LLM отвечает на вопросы по страницам документа, сверстанных в виде столбцов.

Исходный документ: годовой отчет компании Mercia.

Документ был сконвертирован с помощью Aspose. Далее я вырезал из него фрагмент для уменьшения числа токенов.

И задал вопрос по содержанию третьего столбца на одной из страниц (выделен красным) просто в ChatGPT (4o):

in this document:

Faradion was sold in January 2022 to
...
...
“Mercia has generated over £60million of  pre-tax profits during the last  two years.”

find answer to question:
what Oddbox achived to date?

ссылка на чат

ChatGPT успешно ответил на вопрос:

Oddbox has achieved the following to date:

Rescued 13,790 tonnes of fruit and vegetables
that would otherwise have gone to waste.

Saved 1,519 million litres of water, equivalent to the
amount that 25,682 people drink in a lifetime.

Prevented 15,365 tonnes of carbon emissions, which is
enough energy to power 3,513 houses for a year.

Я решил, что конвертер справился с задачей корректно — раз модель смогла найти и понять нужную информацию. Но мне стало интересно, и я решил посмотреть, как именно выглядит этот фрагмент текста после конвертации.

Здесь меня ждал сюрприз: оказалось, что Aspose очень плохо работает с многостолбцовыми PDF. Конвертер просто склеивает текст из всех столбцов подряд — в результате получается каша из текста трёх столбцов, которую человеку прочитать почти невозможно. Но языковая модель, что удивительно, отлично справилась с этим “зашифрованным” текстом и правильно ответила на вопрос!

Вот как выглядит фрагмент текстового файла (без переноса длинных строк):

и соответствующие строки в документе:

Ближе присмотревшись к тексту, я заметил, что в некоторых местах столбцы всё же разделяются парой пробелов (выделено розовым), но в целом структура сильно искажена. Это всё, что получает LLM — и, несмотря на это, модель каким-то образом “расшифровывает” и находит нужную информацию. Интересно что ChatGPT даже не упоминает то ему пришлось "восстанавливать" документ.

Не знаю, как это ещё назвать, кроме как сверхспособностью. Я ни разу не встречал упоминаний о подобных особенностях, поэтому был действительно удивлён.

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

И наш RAG работает.

Обо мне

Больше двух лет пишу проекты про интеграцию LLM в приложения: агентский RAG, мультиагентский DeepResearch, голосовое управление приложениями и т.д. Оказываю консультации по интеграции LLM.
Недавно начал вести телеграм-канал о сильных и слабых сторонах LLM: LLM => AGI?

Комментарии (8)


  1. lazy_val
    05.06.2025 09:13

    насколько хорошо LLM отвечает на вопросы по страницам документа, сверстанных в виде столбцов

    Существуют (и давно причем) инструменты, позволяющие конвертировать многоколоночный текст PDF в одну колонку(k2pdfopt, к примеру).

    Вам точно для этого LLM нужна?


    1. ovsale Автор
      05.06.2025 09:13

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


      1. DeskundigeICT
        05.06.2025 09:13

        Абсолютно согласен с автором относительно выдающихся восстановительных способностей LLM. Недавно я загрузил "кривую" транскрипцию онлайн-встречи на нидерландском языке в Google Gemini 2.5 Pro, и модель отлично уловила суть обсуждения, изложив технические и юридические детали простым и понятным языком. Читать сырой машинный текст — интерпретацию потоковой болтовни фламандских коллег — настоящая пытка, а вот итоговое резюме от Gemini оказалось лёгким для восприятия и действительно информативным.


  1. JuryPol
    05.06.2025 09:13

    Последнее предложение, собственно, сняло у меня все вопросы про выбор инструмента для решения задачи.


    1. ovsale Автор
      05.06.2025 09:13

      Это какое?


      1. gennayo
        05.06.2025 09:13

        Ссылка на Телегу, полагаю :)


  1. sad8c
    05.06.2025 09:13

    Мешанину из столбов ллм поймет. Если скормить документ целикомв контекст. Но корректно прочанкать такой документ уже не выйдет без нормальной конвертации.


  1. ruinaimperii
    05.06.2025 09:13

    Это не может происходить из-за того, что ллм разбивает текст на отдельные нграммы (не уверен какие именно в гпт), и выучивает связи именно между разными нграммами среди всего текста, то есть любые комбинации? Поэтому ему и не так важна композиция и стройность текста