Как мы создали, обучили и выпустили в свет сервис, использующий технологию машинного обучения для распознавания и классификации юридических документов? В этой статье мы расскажем вам об опыте разработки этого решения для автоматизации труда юристов и взыскателей и трудностях, с которыми мы столкнулись.
AI-технологии обработки кредитного досье
Наш сервис реализован с помощью технологии OCR (машинного распознавания текста). И кроме OCR, мы использовали технологии машинного обучения.
Принцип распознавания и классификации выглядит следующим образом:
OCR – первое звено цикла, машинное распознавание текста. Извлекает текст из изображения документа. OCR обучалась на разных примерах документов, составленных по разным шаблонам. При обучении учитывались и шрифты, и их размеры. А также — поворот документа.
NLP (Natural Language Processing) — второе. Анализирует текст и говорит к какому типу документа относится изображение. Обработка естественного языка нужна для извлечения смысла из тех слов и букв, которые распознали алгоритмы OCR.
CNN (Convolutional Neural Network) — третье, и последнее. Проверяет, является ли изображение паспортом в случаях, если NLP не знает, что это за документ. Сверточная нейронная сеть вступает в работу, когда два прошлых метода распознавания текста не эффективны. Например, если текст плохо пропечатан. Такое часто происходит со сканами паспортов.
NLP в работе сервисов появилась не сразу, до этого использовался другой алгоритм. Почему мы его поменяли, и сделали такой цикл распознавания данных, который по итогу получился?
Путь к NLP и что было до
Как мы в самом начале определяли тип документа при классификации? Первоначальный алгоритм работал по ключевому слову. Он подразумевал за собой нахождение в документе слов, помогающих идентифицировать тип документа. Например, нам нужно понять, является ли документ Согласием на обработку персональных данных. Если программа найдет в тексте слова "Согласие на обработку персональных данных" - то да.
Это работало так:
Файл конвертировали в изображение
Из изображения извлекали текст
В тексте искали одно «ключевое слово»
Но при таком подходе могут возникнуть проблемы. Нам удалось столкнуться с такими трудностями:
Проблема возникнет, если документ состоит более, чем из одной страницы, а ключевое слово находится только на первой. PDF-файлы с кредитными досье бывают длинными и состоящими из всех документов одновременно, и тогда программа определит тип неправильно.
Если в документе встречается много одинаковых ключевых слов на разных страницах, и при этом - это разные документы, то программа тоже спотыкается.
Неточное извлечение OCR - это тоже большая проблема.
Чтобы избежать их, нужно выделить "ключевые слова" для каждой страницы документа и сделать так, чтобы python мог отличить один класс от другого, даже если у них есть пересечениях в ключевых словах.
Плюсуем к этому неточность OCR, которая может извлекать неправильный текст: пропустить букву, поменять "О" на "0", или что-то не увидеть… И "ключевые слова" уже не сработают.
Да, эти проблемы можно решить извлечением текста из самого PDF-файла и создать регулярное выражение для каждого “ключевого слова”, но это очень долго, и от неточности OCR не спасает. Да и извлечь текст из всего PDF файла не всегда возможно, поскольку там могут встречаться фотографии и данные в других форматах.
И по итогу мы внедрили в работу продукта NLP. Что поменялось?
NLP (Natural Language Processing) - это более развитый вариант поиска по "ключевым словам". Модель преобразует текст документа в числовой формат, где каждое число указывает на важность определенного слова или фразы. Как это работает? Примерно как на картинке.
Модель обучается на этих числовых значениях, изучая, какие слова и фразы чаще встречаются в документах каждого типа. Таким образом и идет обучение для определения конкретных типов документов.
Когда модели приходит документ на классификацию, она его текст преобразует в числа и предсказывает вероятность того, к какому типу документов относится именно этот, основываясь на обученных весах.
То есть с помощью NLP мы оцениваем сразу все слова в документе, а не ищем конкретные как в поиске по "ключевым словам".
Остальные проблемы, с которыми пришлось столкнуться: как связать технологии воедино, и извлекать данные из паспортов?
Помимо этого, основных сложностей в процессе разработки продукта было две – это выбор правильных технологий и связывание их воедино, чтобы получалась синергия, а также распознавание текста в паспортах.
Первую проблему мы решили посредством различных тестирований, и на выходе мы получили достаточно сложный продукт с множественной каскадной архитектурой. Какие-то блоки вышли монолитными, где-то использовались микросервисы.
Почему так вышло? Внутри нашего продукта существует два сервиса – один из классификации документов, а другой - для извлечения атрибутов из них. Хоть сейчас мы и говорим только о первом, второй может работать вместе с ним, если это нужно для выполнения конкретных задач.
На этапе распознавания текстов из паспортов иногда возникали проблемы, поскольку там не такая ровная печать, как в других документах. Для распознавания плохо пропечатанного текста мы стали использовать CNN (свёрточную нейронную сеть) – она распознает конкретные пиксели и отсутствие или наличие на них определенного цвета. А если у одной нейросети не получается распознать текст, то мы пробуем воспользоваться другой.
У CNN следующий алгоритм работы:
Свёртка: Сеть применяет фильтры к изображению, выделяя ключевые признаки, такие как текстовые области, логотипы и печати.
Подвыборка: Сеть уменьшает размер данных, сохраняя только самые важные из выделенных признаков.
Классификация: На основе этих признаков сеть определяет, к какому типу относится изображение документа.
Но какое-то время мы не могли найти параметры для CNN. Мы перебирали такие параметры, как свертка, ядро, размер изображения и некоторые другие. По итогу удалось достичь 96% точности изображения – до этого мы показывали результат в 89%.
Разработка и первые тестирования
По ходу разработки мы перепробовали 5 разных алгоритмов машинного обучения, прежде чем нашли подходящий. Также, мы постоянно меняли и настраивали его гиперпараметры, чтобы подобрать максимально универсальные настройки под разные виды входящих документов досье с разным качеством.
Аналогичный процесс был при выборе, дообучении и использовании алгоритмов распознавания фото и изображений с помощью алгоритмов нейронных сетей. В конце тестов мы остановились на использовании уникального алгоритма, который с одной стороны давал качество в 95-99% точного распознавания документов досье, а с другой - мог обучаться на новый тип документов в течении 1-2 дней.
Что у нас получилось создать
Сейчас мы продолжаем активно развивать наш продукт и добавлять в него новые функции. На выходе, после всех доработок и тестирований нам удалось добиться следующего результата по сравнению с ручной обработкой документов: время обработки кредитных досье снизилось от 10-20 минут до 1-2 минут, а процент ошибок в определении видов документов уменьшился с 10-20% до 1-2%.
Каких-то особенных сложностей с внедрением OCR и распознаванием юридических документов у нас не возникало, поскольку они – это тот же текст, только оформленный по определенным правилам. Программа умеет с практически полной точностью распознавать их, потому что мы ее долго обучали именно на тех документах, которые нужны юристам и взыскателям в работе.
А еще недавно мы начали работу над тем, чтобы наш сервис мог выполнять задачи по классификации и подготовке документов для работы с электронной исполнительной надписью нотариуса. Основной процесс работы такой же, как и при классификации досье для подачи в суд, но виды документов немного отличаются.