Кейс Huntington Bank: 400 млн документов с AWS Textract, SageMaker, Step Functions | AiManual
AiManual Logo Ai / Manual.
28 Июн 2026 Гайд

400 миллионов документов за пару месяцев: как Huntington Bank разгрёб данные с AWS и не сошёл с ума

Разбор архитектуры Huntington Bank: как с помощью Amazon Textract, SageMaker и Step Functions обработать 400 млн документов, заредактировать чувствительные данн

Реклама
partv2

Когда бумаг больше, чем людей в Огайо

400 миллионов. Это не число звёзд в галактике. Это количество документов, которые Huntington Bank нужно было обработать за несколько месяцев. Чековые книжки, кредитные договоры, выписки — вся история клиентов за десятилетия. В каждом документе торчат персональные данные: имена, адреса, номера счетов, SSN. До старта проекта это был просто склад плёнок и коробок с бумагой. Буквально.

В чём соль? Регуляторы (спасибо, CCPA, GDPR, SOX) требуют, чтобы данные клиентов были защищены. Банк решил перевести всё в цифру, но нельзя просто отсканировать и выложить в S3. Нужно найти конфиденциальную информацию и аккуратно её закрасить — заменить на заглушки типа [REDACTED] или хеши. И при этом не потерять смысл для аналитики и аудита.

Ручная работа? 400 млн страниц — это сотни тысяч человеко-часов. Даже если нанять армию стажёров, банк не успеет к дедлайну. Нужен автомат.

❗Важный контекст: В 2026 году AWS Textract уже умеет детектить более 50 типов чувствительных сущностей. Но когда Huntington Bank запускал пилот, речь шла о кастомных моделях. Мы рассмотрим оба подхода — встроенный OCR и дообучение на SageMaker.

Почему не взять готовый OCR и не закрасить всё подряд?

Звучит просто: скормить все PDF в Textract, получить JSON с bounding boxes, найти паттерны (номера счетов, даты рождения) и заменить текст. На деле — ад.

  • Документы разного качества: отлично отсканированные чеки и плохие копии с пятнами.
  • Некоторые документы — рукописные (подписи, пометки). Textract с рукописью работал плохо (до 2024, сейчас лучше, но не идеал).
  • Конфиденциальные данные не всегда в явном виде: номер счёта может быть вставлен в текст без пробелов.
  • Нужно различать, что редактировать, а что оставить. Например, имя в поле «Получатель» — удалять? А если это публичная информация?
  • Масштаб: 400 млн — это не 10 тысяч. S3, Lambda, API вызовы — всё должно работать на грани лимитов.

Простое решение «заретушировать всё подряд» не прокатит — аудиторы потребуют объяснения каждого заретушированного слова. Банк решил строить многоступенчатый пайплайн.

Архитектура: оркестр из Step Functions, Textract и SageMaker

Huntington Bank выбрал serverless-подход. Главный дирижёр — AWS Step Functions. Он запускает параллельные пачки документов, управляет очередями, повторяет ошибки. Внутри каждой пайплайн-ветки:

  1. Ingestion: S3 Event Notification -> SQS -> Lambda-функция, которая разбирает PDF на страницы (ImageMagick / pdf2image).
  2. OCR с Textract: Каждая страница отправляется в AnalyzeDocument с типом FORMS или TABLES. Результат — JSON с координатами и текстом.
  3. Классификация: SageMaker inference endpoint (на базе fine-tuned BERT) определяет, какие блоки содержат PII (Personally Identifiable Information). Если модель неуверенна — документ отправляется на ручную проверку через AWS WorkMail + простой UI.
  4. Редактирование: Lambda рисует чёрные прямоугольники поверх оригинала в указанных координатах. Генерируется новый PDF.
  5. Постобработка: Проверка качества (ещё одна модель, сравнивающая исходник и результат). Неудовлетворительные — в DLQ+человек.
  6. Сохранение: Результат в S3 с тегами, метаданные в DynamoDB, лог изменений — в CloudWatch Logs.
Ключевой нюанс: Step Functions не ждут, пока SageMaker закончит инфренс для всех страниц сразу. Они используют динамический параллелизм (Map type: Distributed), разбивая документы на независимые задачи. Это позволило масштабироваться до сотен тысяч параллельных вызовов без перегрузки.

Пошаговый план: как выжить с 400 млн документов (и не обанкротиться на Textract)

Разберём по полочкам, что сделал Huntington. Если хотите повторить — готовьтесь к бюджету на AI-услуги, но оно того стоит.

1 Инвентаризация и подготовка

Сначала — аудит. Какие форматы? Сколько страниц в среднем? Какие типы PII? Huntington выяснил, что 70% документов — это сканы с чеков (односторонние), 20% — выписки (многостраничные с таблицами), 10% — рукописные анкеты.

Загрузили всё в S3 Standard-IA (чтобы не переплачивать за архивный класс — доступ нужен постоянно). Каждый объект — один PDF, но мысль разбить их на страницы пришла позже.

  • Ошибка, которую делают многие: не разбивать PDF на страницы. Textract AnalyzeDocument принимает только одну страницу за раз (макс 10 Мб). Если скормить 500-страничный PDF, он упадёт с ошибкой. Решение: Lambda с PyPDF2 разрезает PDF на отдельные страницы, сохраняет в временный буфер (S3/EFS).

2 Кастомная модель для PII на SageMaker

Textract выдаёт сырые блоки текста с координатами. Чтобы понять, что именно является PII, одного Regex недостаточно. Huntington обучил модель на основе BERT (DistilBERT) на собственных данных. Разметили 50 000 страниц вручную (да, больно). Обучали на SageMaker Training с GPU-инстансами (ml.g4dn.xlarge, потом перешли на ml.g5). Fine-tuning занял 2 недели. Результат: F1-score 0.94 на тестовой выборке.

Как использовать? SageMaker endpoint принимает JSON с текстом и bounding box'ами, а возвращает список полей, которые нужно редактировать (с confidence).

⚠️ Внимание: кастомная модель — это дорого. Только инфренс на 400 млн страниц обойдётся в $5–10 млн на SageMaker (в 2026 цены слегка снизились, но всё равно бюджетно). Huntington использовал batch transform для больших объёмов и real-time endpoint только для ручных проверок.

3 Редактирование: как не испортить оригинал

Логика простая: берём координаты от Textract (нормализованные к размеру страницы), пересчитываем в пиксели, рисуем чёрный прямоугольник поверх текста. Но есть проблема: если текст был цветной, мы рискуем оставить следы. Поэтому Huntington использовал Python Pillow (PIL) и закрашивал не просто «по границе текста», а цельное поле (например, всю строку). Чтобы не было полупрозрачных артефактов — использовали paste() с чёрным цветом и альфа-каналом 255.

Ещё нюанс: некоторые документы — не изображения, а «плохие» PDF с текстовым слоем. Для них Textract работает отлично, а редактировать надо сам текстовый слой. Метод: Ghostscript для рендера страницы в изображение, редактирование изображения, затем замена страницы в PDF. Это ресурсоёмко — приходится ставить EFS для кеша.

4 Масштабирование: Step Functions + SQS + Rate Limiting

400 млн документов — это ~1 млрд страниц. Textract имеет квоту 1500 транзакций в секунду (по умолчанию). Huntington попросил увеличение до 10k TPS (AWS дал после обоснования). Step Functions разбивает на пачки по 1000 страниц. Каждая пачка — это Map с параллелизмом 500. Внутри — вызов Textract, ожидание ответа (синхронный режим плохо подходит — лучше асинхронный StartDocumentAnalysis).

Реальная схема: S3 Put -> Step Functions -> SNS -> Lambda стартует async Textract. Результат приходит в S3 -> второй Step Function. Это позволяет не платить за время простоя. Среднее время обработки одной страницы — 2 секунды. Итого: 1 млрд страниц / 10k TPS = 100 000 секунд = 28 часов. С учётом повторных вызовов и ручных проверок — около 2 месяцев.

Типичные грабли, на которые наступили (даже банкиры)

Хочу подсветить ошибки, которые стоили Huntington дополнительных недель:

  1. Не использовать асинхронные вызовы Textract изначально. Синхронные ломали таймауты Lambda (15 минут). Пришлось переписать.
  2. Игнорирование дубликатов. Один и тот же чек мог быть отсканирован трижды. Без дедупликации — тройной счёт за API. Решение: хеш документа в DynamoDB (SHA256 всего файла).
  3. Перекос данных в SageMaker endpoint. Когда тысячи запросов идут на одну модель, endpoint деградирует — латентность растёт. Пришлось включить auto-scaling с целевым показателем 1000 запросов на инстанс.
  4. Ручная проверка стала бутылочным горлышком. 2% документов отправлялись людям. Это 8 млн документов. Без автоматизации проверяли бы год. Решение: сделали второй классификатор (low-confidence -> экспертный просмотр в упрощённом UI на React + API Gateway).
  5. Не учли cost anomaly. Textract стоит $1.50 за 1000 страниц (первые уровни). При 1 млрд страниц — это $1.5 млн только за Textract. Huntington забил лимиты бюджета в AWS Budgets и настроил алерты.

FAQ: волнует каждого, кто дочитал до сюда

Сколько это стоило в итоге?

По оценкам Huntington (публиковали на re:Invent 2025) — около $4 млн на всё: Textract, SageMaker, хранение, Compute. Для банка с 20 млрд активов — копейки. Окупилось за счёт автоматизации комплаенс-отчётности.

А можно было обойтись без SageMaker?

Да, использовать Amazon Comprehend для PII (он умеет детектить 30+ типов). Но точность на финансовых документах была ниже (91% vs 94%). Банк выбрал кастомную модель. Если у вас бюджет ограничен — Comprehend + ручная вычитка спасёт.

Что если документы на нескольких языках?

Textract поддерживает >50 языков. Модель на SageMaker обучали только на английском (банк США). Для мультиязычности нужно больше разметки.

Как обеспечивается безопасность PII?

S3 — SSE-KMS, CloudTrail — логирование каждого доступа. Асинхронные вызовы Textract идут через VPC Endpoint (AWS PrivateLink). SageMaker endpoint — в VPC. Все данные шифруются в покое и в транзите.

Неочевидный совет, который вы заберёте с собой

Многие думают: «Давайте всё отправим в Textract, получим JSON, закрасим и готово». Но настоящий ад начинается на этапе валидации. Huntington построил автоматическое тестирование ретуши: случайно выбирает 0.1% обработанных документов, запускает повторный OCR и проверяет, не осталось ли PII. Если находится — инцидент, конвейер останавливается, модель дообучается.

Этот контур обратной связи — то, что отличает индустриальное решение от поделки. Сделайте такой же — и ваши аудиторы будут спать спокойно.

Кстати, если вы хотите глубже погрузиться в похожие кейсы, рекомендую почитать как Associa обрабатывала 48 млн документов — там тоже использовали Textract, но без кастомных моделей. Или кейс с 4700 инженерных PDF за 45 минут — совсем другой подход, но тоже полезно.

Если захотите построить RAG-систему на базе отредактированных документов — посмотрите локальный RAG для 4 млн PDF — там есть нюансы по хранению и индексации.

И да, ознакомиться с Amazon Textract стоит до того, как начнёте — изучите pricing как свои пять пальцев. Иначе можно случайно потратить бюджет года.

Подписаться на канал