TL;DR: Рассказываю про архитектуру AI-системы для автоматизации обработки финансовых документов. Разбираю выбор технологий, этапы внедрения и типовые проблемы при работе с документооборотом в финтехе.
Документооборот в финансовых компаниях — это всегда боль. Тонны бумаг, сканов, PDF-ок разного качества, которые нужно обрабатывать быстро и без ошибок. Недавно столкнулся с задачей автоматизации такого процесса, и хочу поделиться опытом — что работает, а что лучше не трогать.
Анализ существующего процесса
Первым делом разобрался, что происходит с документами сейчас. Типовая картина:
- Входящие документы: справки о доходах, выписки, паспорта, договоры
- Ручная обработка: сотрудники вбивают данные в CRM
- Проверка: менеджер сверяет введённые данные
- Архивирование: документы складываются в папки
Узким местом была именно ручная обработка — на один документ уходило 5-15 минут в зависимости от сложности.
Архитектура решения
Спроектировал систему из нескольких компонентов:
Модуль распознавания документов
# Примерная структура pipeline обработки
class DocumentProcessor:
def __init__(self):
self.ocr_engine = TesseractOCR()
self.classifier = DocumentClassifier()
self.extractors = {
'passport': PassportExtractor(),
'income_statement': IncomeExtractor(),
'bank_statement': BankStatementExtractor()
}
def process_document(self, file_path):
# 1. Предобработка изображения
image = self.preprocess_image(file_path)
# 2. OCR
text = self.ocr_engine.extract_text(image)
# 3. Классификация типа документа
doc_type = self.classifier.classify(text, image)
# 4. Извлечение структурированных данных
extractor = self.extractors[doc_type]
structured_data = extractor.extract(text, image)
return structured_data
Компоненты системы
1. Preprocessing модуль
- Нормализация качества сканов
- Поворот и выравнивание страниц
- Удаление шумов и артефактов
2. OCR-движок
- Tesseract для базового распознавания
- Специализированные модели для рукописного текста
- Fallback на облачные API для сложных случаев
3. Классификатор документов
- CNN для определения типа по изображению
- NLP-модель для анализа текста
- Правила для edge cases
4. Экстракторы данных
- Регулярные выражения для стандартных полей
- Named Entity Recognition для произвольного текста
- Computer Vision для поиска печатей и подписей
Выбор технологий
OCR-решения
Тестировал несколько вариантов:
- Tesseract 5.x — хорошо для качественных сканов
- PaddleOCR — лучше справляется с рукописным текстом
- Google Vision API — дорого, но очень точно
- ABBYY SDK — отличное качество, высокая цена
Остановился на гибридном подходе: Tesseract для основной массы + облачный API для сложных документов.
ML-фреймворки
# Пример классификатора на PyTorch
import torch
import torch.nn as nn
from transformers import AutoModel, AutoTokenizer
class DocumentClassifier(nn.Module):
def __init__(self, num_classes=10):
super().__init__()
self.bert = AutoModel.from_pretrained('DeepPavlov/rubert-base-cased')
self.classifier = nn.Linear(768, num_classes)
self.dropout = nn.Dropout(0.1)
def forward(self, input_ids, attention_mask):
outputs = self.bert(input_ids=input_ids,
attention_mask=attention_mask)
pooled = outputs.pooler_output
return self.classifier(self.dropout(pooled))
Инфраструктура
- FastAPI для REST API
- Redis для кэширования результатов OCR
- PostgreSQL для хранения метаданных
- MinIO для файлового хранилища
- Docker для контейнеризации
Этапы внедрения
Фаза 1: MVP для одного типа документов
Начал с паспортов — самый простой и структурированный формат. Это позволило:
- Отладить pipeline обработки
- Собрать feedback от пользователей
- Замерить метрики качества
Фаза 2: Расширение на основные типы
Добавил справки о доходах и банковские выписки. Здесь уже понадобились более сложные алгоритмы извлечения данных.
Фаза 3: Интеграция с CRM
Настроил автоматическую передачу данных в существующую систему через API. Добавил интерфейс для ручной проверки спорных случаев.
Проблемы и решения
Качество входящих документов
Проблема: Сканы разного качества, фотографии с телефона, повёрнутые страницы.
Решение: Модуль предобработки с автоматическим улучшением качества:
def preprocess_image(self, image_path):
image = cv2.imread(image_path)
# Поворот по углу наклона текста
angle = self.detect_skew_angle(image)
if abs(angle) > 0.5:
image = self.rotate_image(image, angle)
# Улучшение контрастности
image = cv2.convertScaleAbs(image, alpha=1.2, beta=10)
# Удаление шумов
image = cv2.medianBlur(image, 3)
return image
Разнообразие форматов
Проблема: Один тип документа может выглядеть по-разному в зависимости от банка или организации.
Решение: Создал шаблоны для каждого варианта + fallback на универсальный экстрактор через NER.
Ложные срабатывания
Проблема: OCR иногда галлюцинирует цифры и буквы.
Решение:
- Валидация извлечённых данных по бизнес-правилам
- Confidence score для каждого поля
- Ручная проверка для низких scores
Метрики и мониторинг
Настроил отслеживание ключевых показателей:
Технические метрики
- Accuracy OCR: процент правильно распознанных символов
- Document classification accuracy: точность определения типа документа
- Field extraction precision: точность извлечения конкретных полей
- Processing time: время обработки одного документа
Бизнес-метрики
- Manual review rate: процент документов, требующих ручной проверки
- Processing throughput: количество документов в час
- Error rate: процент документов с ошибками извлечения
# Пример мониторинга
import logging
from prometheus_client import Counter, Histogram, Gauge
# Метрики Prometheus
documents_processed = Counter('documents_processed_total',
'Total processed documents',
['document_type', 'status'])
processing_time = Histogram('document_processing_seconds',
'Time spent processing document')
confidence_score = Gauge('extraction_confidence_score',
'Confidence score of data extraction')
Результаты автоматизации
Система показала хорошие результаты по основным KPI:
- Скорость обработки: среднее время сократилось с 10 минут до 30 секунд на документ
- Точность извлечения: для структурированных документов (паспорта) — 98%+
- Покрытие автоматизации: 85% документов обрабатываются без участия человека
Уроки и рекомендации
Что работает хорошо
- Гибридный подход к OCR — комбинация разных движков под разные задачи
- Поэтапное внедрение — начинать с простых документов, постепенно усложнять
- Human-in-the-loop — всегда оставлять возможность ручной проверки
Чего стоит избегать
- Переоценка качества OCR — даже лучшие решения дают ошибки на реальных данных
- Игнорирование edge cases — 10% сложных документов могут съесть 90% времени разработки
- Жёсткие правила извлечения — лучше использовать ML-подходы с обучением на данных
Дальнейшее развитие
Планирую развивать систему в нескольких направлениях:
Улучшение качества
- Дообучение моделей на собранных данных
- Добавление новых типов документов
- Интеграция с внешними источниками для верификации
Масштабирование
- Горизонтальное масштабирование обработки
- Оптимизация для работы с большими объёмами
- API для интеграции с другими системами
FAQ
Q: Какой ROI у такой автоматизации? A: Зависит от объёмов, но типично окупается за 6-12 месяцев. Основная экономия — на зарплате операторов и ускорении процессов.
Q: Насколько сложно интегрировать с существующими системами? A: Если есть API у CRM/ERP — несложно. Если только база данных — нужно писать адаптеры. Самое сложное — когда система legacy без документации.
Q: Что делать с персональными данными? A: Обязательно учитывать требования 152-ФЗ: шифрование при хранении, логирование доступа, право на удаление. Лучше сразу консультироваться с юристами.
Q: Можно ли использовать готовые SaaS-решения? A: Да, есть ABBYY FlexiCapture, Cognitive Technologies, зарубежные — но они дорогие и не всегда покрывают специфику бизнеса. Своё решение даёт больше контроля.
Q: Как оценить качество работы системы? A: Нужны метрики на разных уровнях: техническом (accuracy, precision, recall) и бизнесовом (время обработки, процент ручных проверок, количество ошибок в продакшене).
Нужна помощь с автоматизацией документооборота? Напишите мне — обсудим ваш проект.