Последний пост был написан больше месяца назад - и это потому что я...отдыхал 🤩👍
Отпуск в 3 недели это страшная штука - с одной стороны ты токенмаксишь по полной с пивасиком на море, с другой - после выхода сразу пришлось нырнуть в работку, подзабив на канал. Крутого контента - вагон, отписываться рано! 🤙
Исправляюсь 🫡
Краткий пост про вечное - про OCR или по-простому - распознавание документов. Мне казалось, что этот вопрос давно решен, но оказалось, что нет - в мире слишком много упоротых и абсолютно проклятых сканов и фоточек самых странных документов.
Для построения хорошего OCR есть два подхода - классика и VLM (то есть, vision-ллмка). Оба подхода хороши, но механизмы работы у них разные и оттого природа ошибок - тоже.
Классический OCR обычно разделяет задачу на несколько этапов: предобработка, поиск областей текста, выделение строк и распознавание последовательности символов. На последней стадии движок преобразует изображение строки в последовательность символов, опираясь прежде всего на их визуальную форму. Любой символ (типа буквы "А") - это на самом деле абстракция, у которой есть конкретное написание в разных шрифтах, и вот конкретное написание, состоящее из разных черточек-палочек, называется глифом. l, 1 и I, а также 0 и О - могут быть слабоотличимы в разных шрифтах, и движок распределяет вероятность между несколькими похожими вариантами.
И главный плюс OCR - он говорит, "бро, я тут вижу плохо". Вокруг этого появилась куча всего - словари, эвристики, координаты и многое другое. Но главный принцип - классика не понимает документ, а аккуратно его замеряет и оцифровывает. Дальше - сами.
У VLMки механика совершенно другая.
Изображение превращается в сетку патчей, каждый из которых кодируется в вектор — визуальный токен. Для трансформера слово и кусок изображения - объекты одного типа. Все эти патчики отправляются в трансформер и вот здесь благодаря механизму внимания открывается самая большая магия.
Когда мы дописываем промпт "посмотри в шапку документа", то это может сузить задачу и модель действительно может справиться с этим лучше. При этом, на выходе по-прежнему генерация - а значит, вероятностное распределение того, что МОЖЕТ здесь быть. Как следствие - периодическая уверенная ложь, которую не отличить от правды.
Если попытаться свести к выводу, то:
- OCR не видит документ в привычном понимании, он в первую очередь считывает визуальные признаки текста и выдает локальную уверенность в результате
- VLM "видит" документ целиком - может учитывать раскладку, структуру, соседние поля и смысл - но ей не всегда хватает силенок увидеть все идеально. А когда чего-то не увидит - МОЖЕТ исказить реальность ̶т̶.̶е̶.̶ ̶н̶а̶п̶и̶з̶д̶и̶т̶ ̶к̶а̶к̶ ̶л̶ю̶б̶а̶я̶ ̶л̶л̶м̶к̶а̶. И это главная проблема VLM в распознавании документов - ее уверенность не отвечает на вопрос "насколько хорошо документ был обработан".
Ну а в реальной жизни - из-за разной природы ошибок, они отлично дополняют друг друга в сложных пайплайнах. VLM разбирает структуру документа и находит нужные поля, а OCR дополнительно за ней перепроверяет все критичное 👍🤩🤩
Post #89
1.11K

- 👍 11
- 🔥 6
- 👏 2
- 🍾 1
- 👾 1