Сверхспособность LLM в понимании документа, сконвертированного в текст с ошибками — или почему наш RAG работает

  • Автор темы Автор темы MORGAN
  • Дата начала Дата начала

MORGAN

Активный пользователь
Регистрация
04.06.2025
Сообщения
1 179
Реакции
1 069
Баллы
113
Недавно я столкнулся с интересным поведением языковой модели, которое меня по-настоящему удивило, и хочу поделиться этим наблюдением с сообществом.

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

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

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

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

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

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

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

txbbmfybyfttjck5umsdsizqbyg.jpeg

in this document:<br><br>Faradion was sold in January 2022 to<br>...<br>...<br>“Mercia has generated over £60million of pre-tax profits during the last two years.”<br><br>find answer to question:<br>what Oddbox achived to date?<br>
ссылка на чат

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

Oddbox has achieved the following to date:<br><br>Rescued 13,790 tonnes of fruit and vegetables<br>that would otherwise have gone to waste.<br><br>Saved 1,519 million litres of water, equivalent to the<br>amount that 25,682 people drink in a lifetime.<br><br>Prevented 15,365 tonnes of carbon emissions, which is<br>enough energy to power 3,513 houses for a year.<br>
Я решил, что конвертер справился с задачей корректно — раз модель смогла найти и понять нужную информацию. Но мне стало интересно, и я решил посмотреть, как именно выглядит этот фрагмент текста после конвертации.

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

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

knqlv4ff_fjcvugxrztbvpu5rho.png

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

lce33x_jqskxyyumv2bq_9jtj8a.png

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

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

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

И наш RAG работает.
 
Назад
Верх