Skip to main content

OCR, а потом LLM — или страница сразу в модель?

Алекс Чен20.10.20267 min read
ocrмультимодальные-моделиизвлечение-данныхllm-инженерияai-перевод

Достать структурированные поля из скана можно двумя способами. Привычный: распознать текст, отдать текст языковой модели. Более новый: отдать мультимодальной модели саму страницу и стадию текста пропустить.

Литература начала склоняться ко второму — сравнение 2025 года (arXiv:2509.04469) показало, что на инвойсах мультимодальные модели нередко обходят связку OCR→текст: разметка таблицы и положение подписи несут смысл, который OCR выбрасывает. Мы держим оба пути в одном продукте и выбираем по типу документа, и наши собственные замеры куда менее однозначны. Этот текст — о том, что мы намерили, включая самое дорогое: проверку, которая решает, каким путём пойдёт документ, легко сделать неправильно, причём неправильно так, что выглядит нормально.

Что на самом деле теряет каждый путь

Различие не в «точности». Символы читают оба. Различие в том, что происходит со всем, что символами не является.

OCR расплющивает страницу в поток текста. Таблица становится последовательностью содержимого ячеек, а то, в какой колонке значение стояло, — догадкой из порядка слов. Подпись становится ничем или мусорным токеном. Две графы рядом становятся одной строкой. Всё, что вам сообщала вёрстка, модели придётся восстанавливать из порядка слов.

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

Стоит путь через vision токенов. Страница, отрендеренная в полезном разрешении, дорога так, как страница текста недорога, и цена растёт с числом отправленных страниц.

Где мы не намерили разницы вообще

Наши кадастровые выписки — пять страниц, выданы электронно, с настоящим текстовым слоем — раньше принудительно уходили на vision по флагу.

Мы прогнали обе ветки по одному файлу и сравнили лист за листом: 48 значений, ноль расхождений. Кадастровый номер, кадастровая стоимость, площадь, адрес и оба 32-символьных хеша сертификатов подписи — а это ровно тот мелкий шрифт, ради которого флаг и ставили, — совпали все.

Флаг сняли. Безопасным, а не просто дешёвым, это сделали два обстоятельства:

  • Сканированная выписка по-прежнему уходит на vision. Маршрутизатор спрашивает у PDF, есть ли у него собственный текстовый слой, — это прямой вопрос.
  • Бюджет картинок всё равно не покрывал документ. На пятистраничной выписке лимит изображений на запрос дотягивался только до страниц 1–2. Страницы 3–5 — права и обременения — приходили текстом независимо от флага.

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

Где разница оказалась решающей

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

  • из строки грузоотправителя исчезли оба кода компании — там (...)(...), два кода, и расплющивание оставило один;
  • для пустой на странице клетки была выдумана дата экспорта.

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

Плотные табличные бланки — там vision и отрабатывает свою цену: много мелких клеток, позиционный смысл и пустые графы, которые обязаны остаться пустыми.

Проверка, которая врёт

Вот находка, стоившая нам дороже всего, — ради неё этот раздел.

Естественный способ маршрутизации: есть ли у PDF текстовый слой? Есть — текстовый путь, нет — vision. Дёшево, локально и верно — пока не приходит документ, которому текстовый слой положил кто-то другой.

Такой нам попался: скан свидетельства о браке со встроенным OCR-слоем от какого-то чужого инструмента. Шестьсот символов уверенного мохибейка — кириллица вперемешку со случайными корейскими и китайскими глифами, слова раскрошены в бессмыслицу. Для проверки «есть текстовый слой» этот документ выглядит чистым цифровым PDF. А это фотография с пришпиленной к ней плохой расшифровкой.

Два урока:

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

Цена, и что нас в ней удивило

Стоимость vision определяется тем, как вы рендерите страницы, а не моделью. Мы отправляли каждую страницу набором плиток плюс обзорное изображение — стандартный приём, чтобы модель прочла мелкий шрифт.

Отключение плиток и переход на одно обзорное изображение получше на страницу срезали картиночные токены на 89% на таможенной декларации и на 73% на выписке ЕГРЮЛ, при этом увеличив покрытие с двух страниц до пяти: бюджета стало хватать дальше. Тот же счёт, больше документа.

Общая картина:

OCR → текстСтраница → vision
Что определяет ценуСтраницы через сервис OCRКартиночные токены, задаются профилем рендера
Что теряетВёрстку, структуру таблиц, пустотуСтруктурно ничего
Как ломаетсяТеряет значения, склеивает клеткиЦеной и задержкой
Хорош наПрозе, длинных документах, цифровых PDFПлотных бланках, сканах, таблицах

Как мы маршрутизируем на практике

Три вопроса, в таком порядке:

  1. Есть ли у файла собственный текстовый слой и правдоподобен ли этот текст? Обе половины. Вторую мы научились добавлять.
  2. Плотный ли это табличный тип документа? Таможенные декларации и многоколоночные бланки уходят на vision независимо ни от чего: отказ текстового пути на них — выдумывание, а не пропуск.
  3. Покрывает ли бюджет документ? Если лимит изображений дотягивается до страницы 2 из 5, вы не гоняете vision на этом документе — вы гоняете гибрид и называете его vision. Либо поднимайте бюджет, либо меняйте профиль рендера, либо признайте, на каком вы пути.

Всё прочее идёт текстовым путём: он дешевле и там, где мы мерили, неотличим.

Что бы мы сказали тому, кто выбирает сегодня

Не выбирайте путь для всего пайплайна. Выбирайте по типу документа и выбирайте по сравнению, которое провели сами на своих документах — лист за листом, а не по агрегатной оценке. У нас это заняло полдня и изменило два решения, в разные стороны.

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

Главное

  • Выбор — про вёрстку, а не про точность. OCR расплющивает таблицы, позиции и пустоту; vision их сохраняет. Символы читают оба.
  • На цифровой выписке мы намерили 48 значений с нулём расхождений между путями — флаг vision там был чистой переплатой.
  • На плотной декларации текстовый путь выдумал дату для пустой клетки. Правдоподобное значение там, где на странице ничего не было, — отказ, который не ловит ни одна проверка ниже по течению.
  • «Есть текстовый слой» ≠ «есть пригодный текст». Чужой OCR-слой из мохибейка проходит эту проверку и отправляет фотографию текстовым путём.
  • Цену vision определяет профиль рендера. Отказ от плиток срезал картиночные токены на 89% и 73% на двух типах документов, покрыв при этом больше страниц, а не меньше.

FAQ

Мультимодальная модель всегда лучше OCR для извлечения полей?

Нет. На документах с настоящим текстовым слоем и простой структурой мы не намерили разницы вовсе — 48 извлечённых значений совпали, и vision был чистой добавленной ценой. Он решительно выигрывает на плотных табличных бланках и на сканах, где вёрстка несёт смысл, а OCR его расплющивает.

Как решить, каким путём пустить документ?

Задайте три вопроса по порядку: есть ли у файла правдоподобный собственный текст, плотный ли это табличный тип и покрывает ли бюджет изображений весь документ. Третий регулярно пропускают, и он тихо превращает «vision» в гибрид.

Какой главный риск у пути OCR → LLM?

Выдумывание. Когда OCR расплющивает бланк, пустая клетка может исчезнуть, а не прийти пустой, и модель заполняет пробел чем-то правдоподобным. Мы это видели — выдуманная дата экспорта на пустой клетке, — а выдуманное значение проходит любую проверку, которая ищет отсутствующие данные.

Почему отказ от плиток снизил цену, не ухудшив качество?

Потому что плитки тратили бюджет изображений на первые страницы вместо документа. Одно обзорное изображение получше на страницу срезало картиночные токены на 73–89% и позволило бюджету дотянуться до пятой страницы вместо второй.

Можно ли доверять текстовому слою PDF?

Только после его оценки. Скан может нести OCR-слой, добавленный чужим инструментом и полный мохибейка, — и он удовлетворит любую проверку «есть ли тут текст». Смотрите на единство письменности и на долю настоящих слов, прежде чем маршрутизировать по нему.

Заключение

Интересный вопрос никогда не был «OCR или vision». Он в том, какие части страницы несут смысл, не являющийся символами, и способен ли ваш пайплайн отличить документ, который он умеет прочесть, от документа, у которого просто есть текст.

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

Если хотите посмотреть на извлечение по полям, где маршрут выбирается под тип документа, — попробуйте KTTC.

We use cookies to improve your experience. Learn more in our Cookie Policy.