Разработка AI-системы для работы с документами (Document AI)
Document AI — платформа для интеллектуальной обработки документов: извлечения данных, классификации, поиска, анализа. Заменяет ручной ввод данных из документов и позволяет организациям работать с документальным архивом программно.
Типы задач Document AI
Система обрабатывает различные типы документов и задач:
Структурированные документы (счета, накладные, налоговые формы): детерминированные форматы, извлечение полей с высокой точностью.
Полуструктурированные (договоры, анкеты, заявления): вариативная структура, требует понимания контекста.
Неструктурированные (письма, отчёты, медицинские записи): свободный текст, NLP-обработка.
Изображения и сканы: предварительный OCR, затем NLP-обработка.
Архитектура Document AI платформы
[Входящий документ: PDF, DOCX, JPG, TXT]
→ [Document Intake Service]
├── Определение типа (PDF/скан/текстовый)
└── Маршрутизация
→ [Pre-processing]
├── OCR (если скан): Tesseract / Azure DI / Google Document AI
├── Извлечение таблиц: Camelot / pdfplumber / Table Transformer
└── Layout Analysis: расположение элементов страницы
→ [AI Processing Pipeline]
├── Классификация типа документа
├── Извлечение структурированных данных
├── Валидация извлечённых данных
└── Генерация суммари / аналитики
→ [Output]
├── JSON с извлечёнными данными
├── Структурированная запись в БД
└── Уведомления / интеграции
Извлечение данных из структурированных документов
Для стандартизированных форм (СФ, УПД, накладные в формате ФНС XML) — детерминированный парсинг через XPath, без ML:
from lxml import etree
def parse_upd(xml_path: str) -> InvoiceData:
tree = etree.parse(xml_path)
root = tree.getroot()
ns = {"n": "urn:NDS"}
return InvoiceData(
seller_inn=root.findtext(".//n:СвПродавца/n:ИдСв/n:СвЮЛ/@ИННЮЛ", namespaces=ns),
invoice_number=root.findtext(".//n:Документ/n:НомерДок", namespaces=ns),
total_amount=float(root.findtext(".//n:ВсегоОпл", namespaces=ns) or 0),
)
ML нужен только для нестандартных форматов.
Intelligent Document Processing (IDP) для сканов
from azure.ai.documentintelligence import DocumentIntelligenceClient
from azure.core.credentials import AzureKeyCredential
client = DocumentIntelligenceClient(endpoint, AzureKeyCredential(key))
# Анализ счёта
with open("invoice.jpg", "rb") as f:
poller = client.begin_analyze_document(
model_id="prebuilt-invoice",
body=f.read(),
content_type="application/octet-stream"
)
result = poller.result()
# Доступ к полям
invoice = result.documents[0]
vendor_name = invoice.fields.get("VendorName")
total_amount = invoice.fields.get("InvoiceTotal")
Альтернативы: Google Document AI, AWS Textract, PaddleOCR + LLM extraction для on-premise.
Классификация типов документов
Multi-class классификатор на основе:
- Текстового содержимого (TF-IDF / BERT embeddings)
- Структурных признаков (наличие таблиц, количество страниц, разделы)
- Метаданных (имя файла, источник)
Typical accuracy: 96–99% для чётких типов (СФ vs договор vs акт), 88–94% для схожих типов.
Валидация и уверенность
Каждое извлечённое поле сопровождается confidence score. При низком confidence (< 0.8) — флаг для ручной проверки. Cross-validation: суммы в прописи и цифрах совпадают? ИНН проходит checksum? Дата логична?
Straight-Through Processing rate: для высококачественных структурированных документов достигает 85–95%.
Поиск по архиву документов
Векторный поиск позволяет находить документы по смыслу:
"Договоры с поставщиками из Германии 2022–2023 года"
→ Semantic search по корпусу + metadata filter
→ Ranked results с подсветкой релевантных фрагментов
Сроки разработки
Месяц 1: OCR pipeline, классификатор типов документов, базовое извлечение
Месяц 2–3: Обработка приоритетных типов документов, валидация, интеграции с ERP/ECM
Месяц 4: Семантический поиск, UI для ручной корректировки, аналитика
Месяц 5–6: Production hardening, масштабирование, мониторинг качества







