ML в OCR: зачем и как

1635b3d8859db6e61ac04709c255ac6f.png

Привет, меня зовут Георгий Гончаров, я инженер‑консультант OCR‑платформы SOICA, предназначенной для распознавания и обработки текстовых и графических данных. Поскольку это собственная разработка, то мы постоянно внедряем новые фичи. Недавно начали использовать ML‑технологию для извлечения данных из высокоструктурированных документов. В статье расскажу, почему и как мы реализовали эту функциональность и каких результатов удалось достичь.

Кратко о самой платформе. SOICA позволяет распознавать и вытягивать из документов полнотекст, а также атрибуты для заполнения карточки документов в потоковой обработке. Это нужно для исключения ручного труда по вводу данных из большого количества нудных однообразных документов. Функции всевозможных сверок позволяют не только формировать карточку, но и проводить первичную проверку документов на подлинность, устанавливать соответствие данных в комплекте документов и так далее. В связи чем возникает потребность не только полнотекстово распознать, но и точно определять области нахождения нужных данных на документах. Тут мы подходим к описанию «как было раньше».

Было: настройка логической цепочки

Основная работа в проекте — это настройка логической цепочки инструментов извлечения. В системе их более 30 штук, у нас они называются локаторами. Там есть поиск:

  • на основе регулярных выражений,

  • на основе баз данных,

  • областей относительно ключей, нескольких или одного,

  • графических элементов.

В целом локаторы можно поделить на два типа:  

  1. Локаторы, которые используют OCR и графические элементы.

  2. Локаторы, которые используют результат работы выполненных ранее локаторов.

Выстраивая последовательную цепочку инструментов извлечения (локаторы, расположенные друг за другом), мы определяем область, где находятся нужны данные. Можно настроить поиск по определенной форме слов и выражений, выбрать нужный нам результат с помощью локатора условия. Итоговая цепочка может состоять из 20+ локаторов. Основным плюсом является то, что мы не используем точные координаты нужной нам информации, мы анализируем весь документ и делаем единственный правильный выбор.

Такой подход позволяет очень гибко настроить поиск данных. Мы можем опираться не только на OCR, но и на графические элементы на изображении, такие как печать, подпись, штамп, фото и т. п. Нам не важно, где находятся данные, главное, чтобы они были на документе.

2a79674612bbb46dbdc0875c678d0976.png

В проектах, где нужно настроить извлечение данных из высокоструктурированных документов (паспорт, СНИЛС, водительское удостоверение…), наши инженеры создавали логические цепочки поиска информации для одного поля, включающие в себя 10–15 локаторов. Такая проработка поиска областей необходима при работе с неструктурированными либо слабоструктурированными документами (договор, судебная документация, акты). При реализации реальных проектов заказчиков мы чаще сталкивались с запросом на извлечение данных из высокоструктурированных документов, поэтому задумались о создании инструмента поиска области без использования множества локаторов, что позволило бы нам значительно сократить время настройки.

Стало: ML для поиска областей на высокоструктурированных документах

Технология ML идеально подошла для решения нашей задачи. Обучив несколько нейронных сетей и проведя тесты, мы увидели оптимистичные результаты: получили точные области данных на высокоструктурированных документах без необходимости выстраивать большую цепочку из множества локаторов. Такой подход позволил снизить требования к качеству импортируемого документа, так как мы уже не ориентируемся на OCR для определения области данных. Размер шрифта нам тоже уже не важен.

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

Именно поэтому обучение ML выполняется в модуле администратора: он предназначен для настройки всей системы и конкретного проекта в частности. Обычные пользователи работают в модуле валидации, где они видят результат работы системы и не могут ничего сломать.

Как устроено обучение своих сеток в SOICA

c40956a1597b7777cb1e481c0f843580.png

В модуле администратора создан отдельный интерфейс для разметки набора документов и отправки на обучение. При создании новой сетки нужно указать имя сетки данных, описание и поля, области которых сетка будет искать.

Добавив страницы для обучения в набор документов, мы можем приступить к разметке на удобном графическом отображении документа.

fbac7ca482014e967e7ac0f4b62f49a9.png

Сетка обучается не более 2 часов — все зависит от мощности сервера, на котором развернута система. В это время можно выполнять в модуле администратора любые другие работы, но обучать две и более сеток одновременно нельзя. Минимальное количество примеров — 50 (но вообще чем больше, тем лучше), это позволяет получать на выходе адекватно обученную нейронную сеть.

У сетки есть три состояния:

  • Создана — необученная и неразмеченная сетка. Использовать в проекте нельзя.

  • На обучении — сетка занята, происходит обучение либо дообучение. Использовать в проекте нельзя.

  • Готово — сетка обучена и готова к использованию.

Для того, чтобы дообучить существующую сетку, необходимо выбрать нужную из выпадающего списка и разметить новый набор документов, отправить на обучение и подождать =)

Каждую нейронную сеть можно обучать на любых примерах документов любого класса. Мы рекомендуем создавать по принципу «один класс — одна сетка данных». В проекте можно использовать неограниченное число сеток данных. Это позволяет делать проекты с несколькими классами высокоструктурированных документов.

Сама обученная сеть располагается на сервере клиента, там же, где вся система. Если нужно перенести проект или добавить сеть на другой сервер, можно скопировать обученную модель, и она автоматически подтянется в модуле администратора. Копировать и переносить можно как с сохранением изображений, на которых было обучение, так и без них.

Итак, нейронная сеть обучена. При ее применении мы получим области данных. Чтобы ими воспользоваться, мы создали локатор «Поиск на основе нейронной сети». Этот локатор применяет обученную модель к выбранному документу и ищет необходимые области.

5d22a6bc9f48f0ae9b6122b971d2bc58.png

Далее остается только извлечь OCR в указанных областях удобным нам способом. В результате мы получаем цепочку поиска, состоящую из 3–4 локаторов. При наличии обученной сетки можно настраивать проекты в 5 раз быстрее по времени, не теряя качества определения областей.

Выводы и перспективы

В процессе использования ML‑технологии мы поняли, что можем использовать обученные модели не только для поиска конечных данных, но и для поиска ключей на документе, относительно которых будем искать неструктурированные данные стандартным способом. Это позволяет увеличить точность поиска, так как добавляется еще один способ нахождения нужной информации на документе, не опирающийся на исходные координаты и OCR страницы. Поэтому мы будем расширять области применения ML. В ближайшем будущем планируем прикрутить обученные нейронные сети для классификации документов и определения комплектов документов.

© Habrahabr.ru