Автоматизация предварительной разметки PDF для Amazon Comprehend

Автоматизация предварительной разметки PDF с помощью Amazon Comprehend

Amazon Comprehend – это сервис обработки естественного языка (NLP), который предоставляет предварительно обученные и настраиваемые API для извлечения информации из текстовых данных. Клиенты Amazon Comprehend могут обучать настраиваемые модели распознавания названных сущностей (NER) для извлечения интересующих сущностей, таких как местоположение, имя человека и дата, уникальных для их бизнеса.

Для обучения настраиваемой модели вам необходимо сначала подготовить обучающие данные, вручную аннотируя сущности в документах. Это можно сделать с помощью Инструмента аннотации полуструктурированных документов Comprehend, который создает задачу Amazon SageMaker Ground Truth с настраиваемым шаблоном, позволяющим аннотаторам рисовать ограничивающие рамки вокруг сущностей прямо на PDF-документах. Однако для компаний, у которых уже есть табличные данные о сущностях в ERP-системах, таких как SAP, ручная аннотация может быть монотонной и затратной по времени.

Для уменьшения затрат на подготовку обучающих данных мы создали инструмент предварительной разметки с использованием AWS Step Functions, который автоматически предварительно аннотирует документы с использованием существующих табличных данных о сущностях. Это значительно уменьшает объем ручной работы, необходимой для обучения точных моделей настраиваемого распознавания сущностей в Amazon Comprehend.

В этой статье мы рассмотрим процесс настройки инструмента предварительной разметки и покажем примеры того, как он автоматически аннотирует документы из общедоступного набора данных образцов банковских выписок в формате PDF. Полный код доступен в репозитории GitHub.

Обзор решения

В этом разделе мы обсудим входные и выходные данные инструмента предварительной разметки и предоставим обзор архитектуры решения.

Входные и выходные данные

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

Инструмент также использует файл-манифест, который связывает PDF-документы с сущностями, которые мы хотим извлечь из этих документов. Сущности состоят из двух частей: expected_text для извлечения из документа (например, AnyCompany Bank) и соответствующего entity_type (например, bank_name). В следующем разделе мы покажем, как создать этот файл-манифест из CSV-документа, подобного следующему примеру.

Инструмент предварительной разметки использует файл-манифест для автоматической разметки документов соответствующими сущностями. Затем мы можем использовать эти аннотации напрямую для обучения модели Amazon Comprehend.

Кроме того, вы можете создать задачу разметки SageMaker Ground Truth для ручной проверки и редактирования, как показано на следующем скриншоте.

После завершения проверки вы можете использовать размеченные данные для обучения модели распознавания настраиваемых сущностей Amazon Comprehend.

Архитектура

Инструмент предварительной разметки состоит из нескольких функций AWS Lambda, организованных с использованием Step Functions. Он представлен в двух версиях, использующих разные методики для генерации предварительных аннотаций.

Первая техника – fuzzy matching. Для этого требуется предварительный файл манифеста с ожидаемыми сущностями. Инструмент использует алгоритм fuzzy matching для создания предварительных аннотаций, сравнивая схожесть текста.

Fuzzy matching ищет строки в документе, которые похожи (но не обязательно идентичны) на ожидаемые сущности, перечисленные в предварительном файле манифеста. Сначала вычисляются оценки схожести текста между ожидаемым текстом и словами в документе, затем сопоставляются все пары выше порогового значения. Поэтому даже если точных совпадений нет, fuzzy matching может найти варианты, такие как сокращения и ошибки при написании. Это позволяет инструменту предварительно помечать документы, не требуя точного соответствия сущностей. Например, если 'AnyCompany Bank' указан в качестве ожидаемой сущности, Fuzzy Matching аннотирует вхождения 'Any Companys Bank'. Это обеспечивает большую гибкость по сравнению со строгим сопоставлением строк и позволяет инструменту предварительной разметки автоматически пометить больше сущностей.

Следующая диаграмма иллюстрирует архитектуру этой машины состояний Step Functions.

Вторая техника требует предварительно обученной модели распознавания сущностей Amazon Comprehend. Инструмент создает предварительные аннотации с использованием модели Amazon Comprehend, следуя рабочему процессу, показанному на следующей диаграмме.

Следующая диаграмма иллюстрирует полную архитектуру.

В следующих разделах мы рассмотрим шаги для реализации решения.

Развернуть инструмент предварительной разметки

Клонируйте репозиторий на ваш компьютер:

git clone https://github.com/aws-samples/amazon-comprehend-automated-pdf-prelabeling-tool.git

Этот репозиторий создан на основе инструмента аннотации полуструктурированных документов Comprehend Semi-Structured Documents и расширяет его функциональность, позволяя вам запустить работу разметки SageMaker Ground Truth с предварительно отображенными аннотациями на пользовательском интерфейсе SageMaker Ground Truth.

Инструмент предварительной разметки включает в себя как ресурсы инструмента аннотации полуструктурированных документов Comprehend, так и некоторые ресурсы, специфичные для инструмента предварительной разметки. Вы можете развернуть решение с помощью AWS Serverless Application Model (AWS SAM), инструмента с открытым исходным кодом, который позволяет определить код инфраструктуры для безсерверных приложений.

Если вы ранее развертывали инструмент аннотации полуструктурированных документов Comprehend, обратитесь к разделу FAQ в файле Pre_labeling_tool/README.md для инструкций о том, как развернуть только ресурсы, специфичные для инструмента предварительной разметки.

Если у вас нет опыта развертывания инструмента и вы начинаете с нуля, выполните следующие действия для развертывания всего решения.

Измените текущую директорию на папку инструмента аннотации:

cd amazon-comprehend-semi-structured-documents-annotation-tools

Соберите и разверните решение:

make ready-and-deploy-guided

Создать файл предварительного манифеста

Прежде чем использовать инструмент предварительной разметки, вам нужно подготовить ваши данные. Основными входными данными являются PDF-документы и файл предварительного манифеста. Файл предварительного манифеста содержит расположение каждого PDF-документа в поле 'pdf' и расположение JSON-файла с ожидаемыми сущностями для разметки в поле 'expected_entities'.

Блокнот generate_premanifest_file.ipynb показывает, как создать этот файл. В демонстрации предварительный файл манифеста показывает следующий код:

[  {    'pdf': 's3://<bucket>/data_aws_idp_workshop_data/bank_stmt_0.pdf',    'expected_entities': 's3://<bucket>/prelabeling-inputs/expected-entities/example-demo/fuzzymatching_version/file_bank_stmt_0.json'  },  ...]

Каждый JSON-файл, перечисленный в предварительном файле манифеста (под expected_entities), содержит список словарей, по одному для каждой ожидаемой сущности. Словари имеют следующие ключи:

  • ‘expected_texts’ – Список возможных текстовых строк, соответствующих сущности.
  • ‘entity_type’ – Соответствующий тип сущности.
  • ‘ignore_list’ (необязательно) – Список слов, которые должны быть игнорированы при сравнении. Эти параметры следует использовать для предотвращения совпадения расстояния Левенштейна для конкретных комбинаций слов, которые вы знаете, что неверны. Это может быть полезно, если вы хотите игнорировать некоторые числа или адреса электронной почты при просмотре имен.

Например, expected_entities PDF, показанного ранее, выглядит следующим образом:

[  {    'expected_texts': ['AnyCompany Bank'],    'entity_type': 'bank_name',    'ignore_list': []  },  {    'expected_texts': ['JANE DOE'],    'entity_type': 'customer_name',    'ignore_list': ['JANE.DOE@example_mail.com']  },  {    'expected_texts': ['003884257406'],    'entity_type': 'checking_number',    'ignore_list': []  }, ...]

Запустите предварительный инструмент разметки

С созданным в предыдущем шаге файлом предварительного манифеста начните запускать предварительный инструмент разметки. Дополнительные сведения см. в блокноте start_step_functions.ipynb.

Чтобы запустить предварительный инструмент разметки, предоставьте событие со следующими ключами:

  • Premanifest – Сопоставляет каждый PDF-документ с его файлом expected_entities. Он должен содержать ведро (под bucket) и ключ (под key) файла Amazon Simple Storage Service (Amazon S3).
  • Prefix – Используется для создания execution_id, который называет папку S3 для хранения вывода и название рабочего процесса разметки SageMaker Ground Truth.
  • entity_types – Отображается в пользовательском интерфейсе для разметчиков для маркировки. В него должны входить все типы сущностей в файлах ожидаемых сущностей.
  • work_team_name (необязательно) – Используется для создания задания разметки SageMaker Ground Truth. Он соответствует использованию частного рабочего персонала. Если он не предоставлен, будет создан только файл манифеста, а не задание разметки SageMaker Ground Truth. Вы можете использовать файл манифеста для создания задания разметки SageMaker Ground Truth позже. Обратите внимание, что на момент написания этого текста нельзя предоставить внешний рабочий персонал при создании задания маркировки из блокнота. Однако вы можете клонировать созданное задание и назначить его внешнему рабочему персоналу в консоли SageMaker Ground Truth.
  • comprehend_parameters (необязательно) – Параметры для прямого обучения модели пользовательского распознавателя сущностей Amazon Comprehend. Если он опущен, этот этап будет пропущен.

Чтобы запустить состояние машины, выполните следующий код на Python:

import boto3stepfunctions_client = boto3.client('stepfunctions')

response = stepfunctions_client.start_execution(stateMachineArn=fuzzymatching_prelabeling_step_functions_arn,input=json.dumps(<event-dict>))

Это запустит выполнение машины состояний. Вы можете отслеживать прогресс машины состояний в консоли Step Functions. Ниже приведена диаграмма рабочего процесса машины состояний.

Когда конечный автомат завершен, выполните следующие действия:

  • Проверьте следующие выходные данные, сохраненные в папке prelabeling/ бакета comprehend-semi-structured-docs в S3:
    • Индивидуальные файлы аннотаций для каждой страницы документов (по одному на страницу на документ) в папке temp_individual_manifests/
    • Манифест для работы по разметке SageMaker Ground Truth в файле consolidated_manifest/consolidated_manifest.manifest
    • Манифест, который можно использовать для обучения собственной модели Amazon Comprehend в файле consolidated_manifest/consolidated_manifest_comprehend.manifest
  • На консоли SageMaker откройте работу по разметке SageMaker Ground Truth, которая была создана для просмотра аннотаций
  • Проверьте и протестируйте обученную пользовательскую модель Amazon Comprehend

Как уже упоминалось, этот инструмент может создавать работы по разметке SageMaker Ground Truth только для частных рабочих групп. Чтобы передать разметку человеческим силам, можно клонировать работу по разметке на консоли SageMaker Ground Truth и прикрепить рабочую группу к новой работе.

Очистка

Для избежания дополнительных расходов удалите созданные ресурсы и удалите стек, развернутый с помощью следующей команды:

make delete

Заключение

Инструмент предварительной разметки предоставляет мощный способ использования существующих табличных данных для ускорения процесса обучения пользовательских моделей распознавания сущностей в Amazon Comprehend. Автоматическая предварительная аннотация PDF-документов значительно сокращает ручные работы, необходимые для процесса разметки.

Инструмент имеет две версии: с нечетким сопоставлением и на основе Amazon Comprehend, что обеспечивает гибкость в создании начальных аннотаций. После предварительной разметки документов вы можете быстро просмотреть их в работе по разметке SageMaker Ground Truth или даже пропустить этот этап и непосредственно обучить пользовательскую модель Amazon Comprehend.

Инструмент предварительной разметки позволяет быстро извлечь ценность вашей исторической информации о сущностях и использовать ее для создания собственных моделей, настроенных на вашу специфическую область. Ускорение наиболее трудоемкой части процесса делает пользовательское распознавание сущностей с Amazon Comprehend более доступным, чем когда-либо.

Дополнительные сведения о том, как размечать PDF-документы с помощью работы по разметке SageMaker Ground Truth, см. Пользовательская аннотация документов для извлечения именованных сущностей в документах с использованием Amazon Comprehend и Использование Amazon SageMaker Ground Truth для разметки данных.