Для автоматизации бизнес-процессов часто требуется обработка бумажных документов со сложной структурой — например, счетов, накладных и так далее. Частый сценарий: есть почтовый ящик, на который поступают сканы оплаченных счетов. Этот почтовый ящик разбирается, и информация о счете и дате оплаты вносится в ERP. Однако разбирать такие документы вручную — процесс длительный и трудоемкий. Решение в данном случае может предложить искусственный интеллект.
В этой статье мы подробно рассмотрим наш подход к разработке системы, которая распознает информацию с бумажных счетов с помощью технологий компьютерного зрения и машинного обучения.
Что вы узнаете:
Какой подход мы используем для проектирования сложных пайплайнов компьютерного зрения.
Как организовать постоянное дообучение модели в продакшене.
Как следить за метриками качества модели.
Обучение моделей
Ключевую роль в проекте выполняет Datapipe — инструмент с открытым исходным кодом, который мы применяем для построения пайплайна обработки данных. При изменении входных данных, будь то добавление новых или изменение существующих, Datapipe автоматически отслеживает эти изменения и пересчитывает только те шаги, для которых данные изменились и требуют обновления. Каждый шаг пайплайна представляет собой функцию, результат которой передается на следующий шаг. Благодаря этому мы экономим вычислительное время и организуем непрерывное дообучение модели в продакшене, пересчитывая только те функции, где это действительно необходимо.
Пайплайн обучения моделей устроен так:
Данные, размеченные модератором в Label Studio, автоматически загружаются в пайплайн.
Размеченные данные добавляются в так называемый «замороженный датасет» — он больше не изменяется и используется для обучения ML-моделей.
-
Затем разбиваем данные на две части:
Тренировочный набор (train) — для обучения модели.
Проверочный набор (val) — для проверки и оценки качества модели.
Изображения подвергаются трансформации: каждая картинка делится на более мелкие сегменты (кропы) для облегчения обучения модели. В каждом кропе выделяются еще более мелкие области, чтобы улучшить точность детекции и классификации.
Приступаем к последовательному обучению моделей. Сначала обучаются модели для детекции объектов (YOLOv5), а затем применяются OCR-модели (Google Cloud Vision OCR) для распознания текста.
Последовательное тестирование моделей. После каждого обучения модели проводится процесс предсказания результатов на тренировочных и тестовых данных. Подсчитываем метрики качества, и модель с лучшими показателями внедряем в рабочую среду.
Теперь, когда модель прошла обучение и была протестирована, она готова к применению в рабочей среде. Процесс организован так, чтобы автоматически обрабатывать каждый новый счет, поступающий в систему, и использовать обученную модель для извлечения необходимых данных.
Это происходит следующим образом:
Новые изображения поступают в очередь RabbitMQ. Это своего рода почтовый ящик с данными о новых изображениях.
Демон-процесс мониторит эту очередь. Программа работает в фоновом режиме, проверяя появление новых изображений. При обнаружении нового сообщения, демон извлекает его из очереди и передает изображение в обработку.
Используя лучшую модель, система делает предсказание.
Результат предсказания отправляется в API. Другие программы смогут использовать эту информацию для выполнения дальнейших действий.
Изображение удаляется из очереди.
Модели в действии: обработка счетов
1. Сбор данных
На электронную почту приходит письмо со сканом оплаченного счета. Этот снимок становится первым шагом на пути к автоматическому распознаванию информации.
Как только изображение попадает в систему, оно передается в Label Studio — интерфейс модератора, выбранный нами за его удобство в использовании. Здесь на экране отображается исходное изображение счета, которое затем передается на обработку моделями нашей системы.
2. Детекция счета на изображении
Первый этап обработки заключается в детекции самого счета на изображении. Поскольку фотографии могут содержать дополнительные объекты, такие как руки, фон или другие посторонние предметы, важно выделить на них только счет. Задача модели — определить точные границы счета, чтобы исключить лишние детали и сконцентрироваться на нужной области. Используя данные разметки, мы обучили модель YOLOv5 точному определению положение счета на изображении, с учетом угла поворота, под которым сделано фото (0°, 90°, 180°, 270°).
При подаче нового изображения модель YOLOv5 анализирует его и делает для него прогнозирование:
Bbox — границы объекта на изображении.
Class — к какому классу относится каждый объект. На данном этапе нас интересует класс «Счет».
Score — вероятность того, что объект относится к указанному классу.
То есть модель выделяет предполагаемый счет и указывает степень своей уверенности в точности обнаружения. После этого система передает его координаты и score на следующий этап обработки.
3. Детекция ключевых позиций на счете
После определения положения счета на фото, система переходит к детекции ключевых полей на нем.
Поскольку счета содержат множество разнообразной информации, изображение сначала делится на небольшие области (кропы). Это предварительное разделение улучшает точность детекции ключевых полей. Каждый кроп затем обрабатывается моделью YOLOv5, которая анализирует его содержимое и идентифицирует области интереса: даты, суммы, названия позиций и другие важные элементы.
После обработки всех кропов, система объединяет результаты, чтобы сформировать полную картину распознанных полей на всем счете.
4. Распознавание числовых и текстовых данных
Итак, система идентифицировала и классифицировала ключевые поля на счете, пора переходить к этапу распознавания текста и числовых данных. Здесь мы используем Google Cloud Vision OCR, который отвечает за извлечение всей необходимой информации.
Каждая выделенная область, найденная на предыдущих шагах, передается в Google Cloud Vision OCR. Этот сервис анализирует изображение и извлекает текстовые данные: суммы, названия товаров, номера инвойсов и другие важные детали.
Google Cloud Vision OCR хорошо справляется с распознаванием текста даже на сложных фонах и в различных шрифтах, гарантируя высокую точность и полноту извлечения информации. Затем система связывает полученные текстовые и числовые значения с соответствующими полями на счете.
5. Дообучение модели
В системе распознавания информации со счетов постоянно происходят изменения: появляются новые форматы счетов, меняются шрифты, добавляются новые поля, а дизайн самих счетов регулярно обновляется. Чтобы модели могли эффективно адаптироваться к этим изменениям и продолжали распознавать данные с высокой точностью, необходимо их регулярное дообучение.
Мы передаем заказчику не просто обученную модель, а полноценный пайплайн с автоматизированным процессом дообучения, основанным на новых размеченных данных. Это обеспечивает непрерывное повышение качества работы модели, адаптируя к постоянно меняющимся условиям в рабочей среде.
В ходе работы модератор вручную размечает новые данные, которые постепенно накапливаются в датасете. Когда объем этих данных достигает необходимого уровня, датасет фиксируется и передается в пайплайн.
Платформа Datapipe эффективно интегрирует новые данные, автоматически обрабатывая только те части, которые изменились. Благодаря такой гибкости, в пайплайн можно легко добавлять новые этапы обработки и адаптировать его под изменяющиеся требования заказчика. После каждого цикла дообучения автоматически вычисляются обновлённые метрики, необходимые для контроля качества работы модели. Этот цикл продолжается, поддерживая актуальность и точность системы в любых условиях.
6. Мониторинг и оценка метрик качества
Для оценки эффективности модели необходимо проводить регулярный анализ ее ключевых метрик.
Анализ ключевых метрик качества включает расчет следующих показателей:
Precision и Recall для оценки точности и полноты детекции объектов.
F1-score как среднее гармоническое значений Precision и Recall показывает, насколько точно и полно модель распознает интересующие нас данные. Чем оно ближе к 1, тем точнее предсказание.
Взвешенный (weighted) и Макро (macro) F1-score для общей оценки работы модели, учитывая различные весовые категории объектов и их распределение по классам. Взвешенный F1-score показывает, насколько хорошо модель справляется с предсказаниями, принимая во внимание частоту каждого класса (типа распознаваемого объекта). Макро F1-score оценивает точность предсказаний модели по каждому классу, независимо от их частоты.
Для мониторинга и визуализации метрик мы предпочитаем платформу Metabase. Она идеально подходит для отслеживания динамики изменений показателей качества модели в режиме реального времени. На диаграммах можно наблюдать точность предсказаний модели:
Заключение
Таким образом, наша команда успешно разработала ИИ-систему для автоматического распознавания информации с бумажных счетов. Мы прошли путь от разметки данных и настройки пайплайна до последовательного обучения и дообучения моделей.
Огромное спасибо команде, работавшей над проектом:
Александр Козлов, Lead ML Engineer;
Андрей Татаринов, CEO/CTO Epoch8.co / AGIMA.AI.