Document AI: вилучення структурованих даних зі скан-копій

Сотні накладних, інвойсів та договорів щоденно надходять у вигляді скан-копій. Ручне введення — вузьке горло, помилки неминучі. Втрати часу та бюджету зростають. Ми вирішуємо це за допомогою Document AI — автоматичного вилучення структурованих даних. Наш підхід дає F1 до 96% на складних полях і скор

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1003

Сотні накладних, інвойсів та договорів щоденно надходять у вигляді скан-копій. Ручне введення — вузьке горло, помилки неминучі. Втрати часу та бюджету зростають. Ми вирішуємо це за допомогою Document AI — автоматичного вилучення структурованих даних. Наш підхід дає F1 до 96% на складних полях і скорочує час обробки в 10–20 разів. На відміну від класичного OCR, який видає лише плоский текст, Document AI розуміє семантику та візуальне розташування елементів. Модель знає, що 12 345.00 справа від Total — підсумкова сума, а не випадкове число. Це ключовий елемент автоматизації документообігу, де машинне навчання дозволяє позбутися рутини.

Якість вилучення безпосередньо залежить від розмітки та архітектури моделі. Ми використовуємо LayoutLMv3 — State-of-the-Art для документів з довільним шаблоном. Нижче розберемо ключові проблеми та їх вирішення.

Як Document AI вилучає структуровані дані?

Стек: PyTorch, Hugging Face Transformers, LayoutLMv3, Tesseract для OCR. Для кожного типу документів навчаємо окрему модель з BIO-розміткою сутностей (NER).

from transformers import LayoutLMv3Processor, LayoutLMv3ForTokenClassification from PIL import Image import torch class DocumentFieldExtractor: def __init__(self, model_path: str, labels: list[str]): self.processor = LayoutLMv3Processor.from_pretrained(model_path) self.model = LayoutLMv3ForTokenClassification.from_pretrained( model_path, num_labels=len(labels) * 2 + 1 # BIO tagging ) self.labels = labels self.model.eval() @torch.no_grad() def extract(self, image_path: str) -> dict: image = Image.open(image_path).convert('RGB') encoding = self.processor( image, return_tensors='pt', truncation=True, padding='max_length', max_length=512 ) outputs = self.model(**encoding) predictions = outputs.logits.argmax(-1).squeeze().tolist() return self._decode_entities(encoding, predictions) 

Розмітка даних ведеться в Label Studio з підтримкою Document AI — розмітник виділяє області на скан-копії та призначає тип поля. Мінімум 200–500 розмічених документів для базової якості.

Fine-tuning виконується стандартним Trainer з Hugging Face:

from transformers import TrainingArguments, Trainer from datasets import load_dataset training_args = TrainingArguments( output_dir='./invoice_extractor', num_train_epochs=20, per_device_train_batch_size=2, per_device_eval_batch_size=2, learning_rate=5e-5, warmup_steps=100, weight_decay=0.01, fp16=True, evaluation_strategy='epoch', save_strategy='best', metric_for_best_model='f1' ) trainer = Trainer( model=model, args=training_args, train_dataset=train_dataset, eval_dataset=eval_dataset, compute_metrics=compute_ner_metrics ) trainer.train() 

Які проблеми вирішує Document AI?

  • Нестандартні шаблони — різні постачальники оформлюють інвойси по-своєму. LayoutLMv3 стійкий до варіацій, якщо навчати на репрезентативній вибірці.
  • Низька якість скан-копій — перекоси, шум, погане освітлення. Попередня обробка (deskew, denoise) + дані з аугментаціями підвищують робастність.
  • Змішані типи документів — в одному потоці можуть бути і накладні, і договори. Ми навчаємо мультитипові моделі або класифікатор перед екстракцією.
  • Валідація вилучених даних — контрольні суми, формати дат, довідники. Постобробка з бізнес-правилами відсіює помилки.
Проблема Рішення
Нестандартні шаблони LayoutLMv3 адаптується при достатній кількості прикладів; навчаємо на репрезентативній вибірці
Низька якість скан-копій Попередня обробка (deskew, denoise) + аугментації даних
Змішані типи документів Використовуємо класифікатор перед екстракцією або мультитипову модель
Валідація вилучених даних Постобробка з бізнес-правилами: контрольні суми, формати дат, довідники

Чому LayoutLMv3 краще за класичний OCR?

Класичний OCR (Tesseract, Abbyy) видає лише текст та координати. Document AI на основі LayoutLMv3 додатково розуміє семантику: модель знає, що рядок "ІПН 7701234567" — це ІПН, а не номер рахунку. Як показано в роботі LayoutLMv3: Pre-training for Document AI with Unified Text and Image Masking, на датасеті CORD LayoutLMv3 досягає F1 95.5%, тоді як OCR+регулярки — близько 70–80%. LayoutLMv3 працює в 5–10 разів точніше при вилученні складних полів, особливо дат і сум.

Датасет Поле F1 (LayoutLMv3)
FUNSD (форми) Entity extraction 92.0%
CORD (чеки) Поля транзакцій 95.5%
SROIE (інвойси) 4 ключових поля 96.6%
DocVQA (QA на документах) ANLS 83.5%

Типові помилки при впровадженні екстрактора інвойсів

  • Замало розмічених даних — менше 200 скан-копій на тип, що призводить до перенавчання.
  • Однотипні шаблони у вибірці — модель не бачить варіацій і помиляється на нових форматах.
  • Ігнорування аугментацій — без поворотів і шуму модель падає на реальних скан-копіях.
  • Відсутність постобробки — дати в різних форматах, суми без роздільників — модель видає сирі токени, а не нормалізовані значення.

Що входить в роботу?

  • Індивідуальна модель — донавчений LayoutLMv3 під ваш тип документів.
  • API-контейнер — Docker-образ з REST API та прикладами запитів.
  • Документація — опис роботи моделі, інструкції з інтеграції.
  • Навчання співробітників — вебінар з розмітки даних та використання екстрактора.
  • Підтримка — 3 місяці моніторингу якості та донавчань при необхідності.

Отримайте консультацію щодо вашого проєкту — оцінка безкоштовно.

Вимоги до даних: для розмітки достатньо скан-копій у форматах PDF, JPG, PNG. Роздільна здатність не менше 150 DPI. Бажано, щоб шаблони були однотипними, але модель адаптується до варіацій при достатній кількості прикладів (від 200).

Покроковий процес впровадження

  1. Збір та розмітка даних — виділяємо 200–500 скан-копій вашого типу, розмічаємо поля через Label Studio.
  2. Fine-tuning моделі — налаштовуємо LayoutLMv3 під вашу розмітку, оптимізуємо гіперпараметри.
  3. Постобробка — додаємо правила валідації (формати, контрольні суми).
  4. Упаковка в API — модель у Docker-контейнері з REST ендпоінтами.
  5. Інтеграція та тестування — підключаємо до вашої системи, перевіряємо на відкладеній вибірці.
  6. Моніторинг та підтримка — відстежуємо якість, при необхідності донавчаємо.

Терміни: один тип документа з розміченою вибіркою займає 4–6 тижнів, для 3–5 типів — 8–12 тижнів, універсальний екстрактор — до 18 тижнів.

Наші компетенції та гарантії

Ми — команда ML-інженерів з 7+ роками досвіду в Computer Vision та NLP. Реалізували понад 30 проєктів з Document AI для банків, логістики та рітейлу. Маємо сертифікований досвід роботи з Hugging Face та NVIDIA.

Гарантуємо точність на вашому типі документів: якщо F1 нижче обумовленого порогу на тестовій вибірці — доопрацьовуємо модель безкоштовно. Впровадження включає моніторинг та можливість донавчання протягом 3 місяців.

Замовте пілотний проєкт — оцініть результат на ваших даних. Якщо ви хочете автоматизувати документообіг, зв'яжіться з нами для консультації та оцінки проєкту.