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

AI-технологии обработки кредитного досье 

Наш сервис реализован с помощью технологии OCR (машинного распознавания текста). И кроме OCR, мы использовали технологии машинного обучения.

Принцип распознавания и классификации выглядит следующим образом:

  1. OCR – первое звено цикла, машинное распознавание текста. Извлекает текст из изображения документа. OCR обучалась на разных примерах документов, составленных по разным шаблонам. При обучении учитывались и шрифты, и их размеры. А также — поворот документа.

  2. NLP (Natural Language Processing) — второе. Анализирует текст и говорит к какому типу документа относится изображение. Обработка естественного языка нужна для извлечения смысла из тех слов и букв, которые распознали алгоритмы OCR.

  3. CNN (Convolutional Neural Network) — третье, и последнее. Проверяет, является ли изображение паспортом в случаях, если NLP не знает, что это за документ. Сверточная нейронная сеть вступает в работу, когда два прошлых метода распознавания текста не эффективны. Например, если текст плохо пропечатан. Такое часто происходит со сканами паспортов.

Принцип работы OCR
Принцип работы OCR

NLP в работе сервисов появилась не сразу, до этого использовался другой алгоритм. Почему мы его поменяли, и сделали такой цикл распознавания данных, который по итогу получился? 

Путь к NLP и что было до 

Как мы в самом начале определяли тип документа при классификации? Первоначальный алгоритм работал по ключевому слову. Он подразумевал за собой нахождение в документе слов, помогающих идентифицировать тип документа. Например, нам нужно понять, является ли документ Согласием на обработку персональных данных. Если программа найдет в тексте слова "Согласие на обработку персональных данных" - то да. 

Это работало так: 

  • Файл конвертировали в изображение

  • Из изображения извлекали текст

  • В тексте искали одно «ключевое слово»

Но при таком подходе могут возникнуть проблемы. Нам удалось столкнуться с такими трудностями: 

  1. Проблема возникнет, если документ состоит более, чем из одной страницы, а ключевое слово находится только на первой. PDF-файлы с кредитными досье бывают длинными и состоящими из всех документов одновременно, и тогда программа определит тип неправильно. 

  2. Если в документе встречается много одинаковых ключевых слов на разных страницах, и при этом - это разные документы, то программа тоже спотыкается. 

  3. Неточное извлечение 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 и распознаванием юридических документов у нас не возникало, поскольку они – это тот же текст, только оформленный по определенным правилам. Программа умеет с практически полной точностью распознавать их, потому что мы ее долго обучали именно на тех документах, которые нужны юристам и взыскателям в работе.

А еще недавно мы начали работу над тем, чтобы наш сервис мог выполнять задачи по классификации и подготовке документов для работы с электронной исполнительной надписью нотариуса. Основной процесс работы такой же, как и при классификации досье для подачи в суд, но виды документов немного отличаются.

Комментарии (3)


  1. noiiberg
    23.07.2024 11:10

    Здорово, когда умные люди делают полезные вещи. Отличная статья! Спасибо!


  1. Anvarkazakov
    23.07.2024 11:10

    С паспортами - чем плох YA vision? он умеет это делать быстро и за прям бувально копейки.
    а используемый OCR - tessaract?
    если говорим о извлечении контекстов из документов почему не использовать LLM? как и для классификации, так и излвченеия данных
    В рамках работы в претензионно-исковой деятельностью в извлечении данных из претензий, исковых заявлений и решений суда добился точности в 100%.


    1. tech_spb
      23.07.2024 11:10

      Добрый день. YA vision не тестировали, дотюнили CNNку свою спасибо за идею! OCR используем: tessaract и EasyOCR в комбинации. Что вы понимаете под контекстом? Имеется ввиду смысловые конструкции например резулитивной части судебного приказа? В данном сервисе мы не генирируем какой-либо новый контент. Мы стараемся выцепить весь текст, найти класс - вид документа и применить пользовательские настройки к нему. LLM не видим смысла использовать в данных сервисах. Во первых ее надо локально разворачивать, так как мы документы с ПД обрабатываем - а это уже значительные затраты на инфраструктуру. Во вторых CNN и OCR не хуже справляются чем любая LLM. Давайте обсудим ваш кейс?