OCR, Document AI и обычный AI-чат - не одно и то же
OCR преобразует изображение символов в текст и может вернуть координаты слов. Document AI дополнительно восстанавливает структуру: страницы, блоки, таблицы, поля и их значения. Большая языковая модель умеет объяснять и нормализовать результат, но может правдоподобно исправить символ или заполнить пропуск без доказательства.
Надёжный процесс сохраняет связь каждого извлечённого значения со страницей и областью оригинала. Тогда спорную сумму можно проверить, а не доверять гладкому пересказу.
Какой результат вам действительно нужен
Одного универсального формата нет. Для архива нужен поисковый слой, для импорта в учётную систему - строгая схема, а для анализа договора - структура разделов и ссылки на страницы.
Определите тип PDF до распознавания
PDF - контейнер. Внутри может быть настоящий текст, скан, сочетание слоёв, формы и вложения. Попытка OCR уже текстового файла иногда портит порядок чтения и символы.
- Выделяется ли текст и корректно ли копируется.
- Работает ли поиск по известному слову.
- Есть ли страницы только с изображением.
- Не дублируется ли скрытый OCR-слой.
- Сохраняется ли порядок колонок при копировании.
- Есть ли цифровая подпись или ограничения редактирования.
- Содержит ли файл формы, вложения или комментарии.
- Какой язык и письменность используются.
Adobe рекомендует сохранять резервную копию оригинального скана до редактирования и проверять результат OCR.
Подготовка скана: качество входа определяет результат
Даже сильная модель плохо восстанавливает символ, которого нет на изображении. Документация Tesseract отдельно выделяет масштаб, бинаризацию, удаление шума, коррекцию перекоса и границ. Для Tesseract ориентиром хорошего входа называется разрешение не ниже 300 dpi, но реальный результат зависит от шрифта и документа.
- Развернуть страницы в правильную ориентацию.
- Исправить перспективу и перекос строк.
- Обрезать фон, пальцы, края стола и тёмные рамки.
- Повысить контраст без потери тонких символов.
- Убрать шум, просвечивание и следы сгиба.
- Не сжимать повторно уже слабое изображение.
- Выбрать правильный язык и набор символов.
- Разделить разворот на отдельные страницы.
Adobe Acrobat: сделать сканируемый PDF поисковым
В Acrobat инструмент Scan & OCR распознаёт текст в сканированном PDF и добавляет поисковый текстовый слой. Можно выбрать страницы, язык и параметры, а также пакетно обработать несколько файлов в подходящих редакциях.
Это удобно для архива, ручного поиска и небольшой оцифровки. После обработки проверьте полноту и точность, особенно заголовки, колонки, сноски и номера. Поисковый слой может выглядеть правильно, потому что поверх остаётся исходное изображение, но копируемый текст внутри уже содержит ошибку.
Tesseract: локальный OCR с открытым исходным кодом
Tesseract - OCR-движок под лицензией Apache 2.0 с языковыми моделями для множества языков и письменностей. Он подходит для локальных конвейеров, когда нужен контроль инфраструктуры и разработчик готов заниматься предобработкой и разметкой результата.
| Плюс | Ограничение | Когда выбирать |
|---|---|---|
| Работа на своей инфраструктуре | Нужно настраивать окружение | Чувствительные или массовые документы |
| Открытый код | Не является готовой бизнес-системой | Собственный pipeline |
| Языковые модели и параметры | Таблицы требуют отдельной логики | Предсказуемые типы страниц |
| Searchable PDF и текст | Контроль качества строится самостоятельно | Архив и индексирование |
Google Document AI и Azure Document Intelligence
Облачные document-processing сервисы возвращают не только текст. Google Document AI описывает OCR, layout, таблицы, key-value pairs, selection marks и специализированные processors. Azure Document Intelligence Read OCR извлекает строки, слова, координаты, язык и признаки рукописного текста; другие модели работают со структурой и полями.
Это не означает, что любой документ распознаётся одинаково. Возможности, регионы, языки, версии моделей, цены и лимиты меняются. Перед внедрением создайте тестовый набор именно своих счетов, актов, анкет и плохих сканов и проверьте актуальную документацию.
Таблицы: почему копирование текста ломает данные
Линейный OCR может прочитать все слова таблицы, но потерять связь между строкой и столбцом. Объединённые ячейки, многострочные заголовки, отсутствие границ и перенос таблицы на другую страницу усложняют задачу.
- Число столбцов совпадает на всех строках.
- Заголовки связаны с правильными столбцами.
- Объединённые ячейки не размножили значение.
- Перенос строки не создал новую запись.
- Итог и подытоги отделены от операций.
- Отрицательные значения и скобки сохранены.
- Десятичный и разрядный разделители распознаны.
- Валюта и единица не потерялись.
- Продолжение на следующей странице объединено корректно.
- Сумма строк сверена с итогом оригинала.
Поля документов: схема важнее красивого JSON
Для счёта или анкеты заранее задают схему: имя поля, тип, обязательность, формат, допустимые значения, источник на странице и поведение при неопределённости. Модель не должна подставлять правдоподобную дату, если поле неразборчиво.
Спроектируй схему извлечения без реальных документов. Тип документа: [счёт / акт / анкета] Цель процесса: [куда идут данные] Нужные поля: [список] Для каждого поля опиши: JSON-имя, тип, формат, обязательность, нормализацию, допустимый диапазон, проверку, связь с другими полями и условие ручной проверки. Добавь служебные поля page, bounding_box, raw_value, normalized_value, confidence и validation_errors. Не предлагай заполнять отсутствующее значение по догадке.
Как использовать LLM после OCR
Языковая модель полезна на втором этапе: классифицировать документ, сопоставить разные названия поля, нормализовать адрес, выделить пункт договора или объяснить расхождение. Исходный OCR и координаты при этом сохраняются.
Работай только с OCR-текстом и координатами. Верни JSON строго по схеме [схема]. Правила: - не исправляй числа и имена без источника; - raw_value сохраняй дословно; - normalized_value заполняй только по указанным правилам; - для каждого значения укажи страницу и фрагмент; - отсутствующее поле = null; - сомнительное значение добавь в review_required; - не вычисляй пропущенное поле из контекста, если схема явно не разрешает вычисление; - ответ должен проходить JSON Schema.
Числа и даты: зона максимального риска
Ошибка одной буквы портит поиск, ошибка одной цифры меняет платёж. Особое внимание требуют похожие символы: ноль и буква O, единица и I, 5 и S, 8 и B. Также опасны запятые, точки, пробелы, скобки и разные форматы дат.
| Поле | Автоматическая проверка | Ручной триггер |
|---|---|---|
| Сумма | Диапазон, валюта, арифметика строк | Расхождение с итогом |
| Дата | Формат, допустимый период | Неоднозначные день и месяц |
| ИНН или ID | Длина и контрольное правило, если применимо | Нарушение формата |
| Номер счёта | Шаблон и уникальность | Похожий уже существует |
| Количество | Тип, знак, единица | Редкое или предельное значение |
Confidence score не заменяет проверку
Оценка уверенности зависит от модели и не всегда является вероятностью правильности, которую можно напрямую сравнивать между поставщиками. Порог настраивают на размеченной выборке и отдельно для разных полей.
Номер договора может требовать ручной проверки даже при высокой уверенности, если ошибка создаёт большой ущерб. Название отдела может быть допустимо при более низкой уверенности, если оно используется только для поиска. Решение определяет риск поля, а не единый процент для всего документа.
Создайте эталонный набор и измеряйте качество
Не оценивайте OCR по нескольким красивым страницам. Соберите документы разных поставщиков, лет, языков и качества. Разметьте истинный текст и поля, сохраняя оригинал.
- Character Error Rate. Ошибки символов полезны для сплошного текста.
- Word Error Rate. Показывает качество слов, но не структуру.
- Field accuracy. Доля полностью правильных значений поля.
- Table accuracy. Правильность ячеек и их координат.
- Straight-through rate. Доля документов, прошедших без человека при заданном качестве.
- False acceptance. Ошибочные документы, которые система пропустила.
- Review time. Время человеческой проверки одного документа.
Промпт для аудита извлечённых данных
Проверь извлечённые поля относительно OCR-фрагментов, не используя внешние знания. Для каждого поля выведи: field | extracted | raw_fragment | page | status | reason. Статусы: confirmed, mismatch, ambiguous, missing_source, invalid_format. Проверь суммы строк и итог, даты, валюту, единицы, отрицательные значения, номера и дубли. Не исправляй mismatch автоматически: предложи кандидаты и отправь на ручную проверку. В конце перечисли проверки, которые нельзя выполнить без изображения оригинала.
Безопасность документов
Счета, договоры и анкеты часто содержат персональные, платёжные и коммерческие данные. Бесплатная загрузка файла в публичный AI-чат может нарушить договор или внутреннюю политику. До обработки определите разрешённого поставщика и конкретный продукт.
- Определён класс данных и владелец.
- Есть основание и разрешение на обработку.
- Проверены регион, подрядчики и договор.
- Используется корпоративный аккаунт или утверждённый API.
- Доступ ограничен ролями и минимальными правами.
- Оригиналы и выгрузки шифруются.
- Логи не содержат полный документ без необходимости.
- Срок хранения и удаление охватывают копии.
- Есть процесс запроса, исправления и удаления данных.
Архитектура конвейера обработки
- Приём. Проверка типа, размера, вредоносного содержимого и дубликата.
- Сохранение оригинала. Неизменяемый файл, хэш и права доступа.
- Предобработка. Разворот, deskew, crop, очистка и разделение страниц.
- OCR/Layout. Текст, координаты, таблицы и поля.
- Нормализация. Строгая схема без потери raw value.
- Валидация. Форматы, справочники, арифметика и бизнес-правила.
- Маршрутизация. Автопроводка или очередь ручной проверки.
- Экспорт. Идемпотентная запись в целевую систему.
- Наблюдаемость. Версия модели, ошибки, время и качество.
- Удаление. Жизненный цикл оригиналов и производных файлов.
Human-in-the-loop без двойной ручной работы
Если оператор перечитывает весь документ, автоматизация не достигла цели. Интерфейс проверки должен показывать только рискованные поля рядом с увеличенной областью оригинала, подсвечивать расхождения и поддерживать горячие клавиши.
Исправление сохраняют отдельно от сырого OCR вместе с автором и временем. Подтверждённые ошибки пополняют тестовый набор, но не должны автоматически обучать модель без проверки качества и прав на данные.
Пилот на четыре недели
Финальный чек-лист перед автоматизацией
- Результат и схема данных определены.
- Оригинал сохраняется без изменений.
- Предобработка настроена на реальные сканы.
- Языки и типы документов поддерживаются.
- Таблицы извлекаются со структурой.
- Raw и normalized значения разделены.
- Источник поля связан со страницей и областью.
- Критичные числа проходят отдельные проверки.
- Пороги настроены на размеченной выборке.
- Неуверенные документы уходят человеку.
- Экспорт защищён от дублей.
- Версии моделей и ошибки журналируются.
- Доступ, хранение и удаление утверждены.
- Есть план отката и ручной работы при сбое.
Успешное распознавание - не текст, похожий на оригинал, а проверенные данные, которые можно безопасно использовать в следующем процессе.