使用 Amazon Textract 和 Amazon Comprehend 智能拆分多格式文档包

源节点: 1372716

许多不同规模和行业垂直的组织仍然依赖大量文档来进行日常运营。为了解决这一业务挑战,客户正在使用 AWS 的智能文档处理服务,例如 亚马逊Textract亚马逊领悟 帮助 提取和过程自动化。在提取文本、键值对、表格和实体之前,您需要能够拆分通常包含异构表单类型的多页 PDF 文档。例如,在抵押贷款处理中,经纪人或贷款处理个人可能需要拆分合并的 PDF 贷款包,其中包含抵押贷款申请(房利美表格 1003)、W2、收入验证、1040 税表等。

为了解决这个问题,组织使用基于规则的处理:通过表单标题、页码、表单长度等识别文档类型。这些方法容易出错且难以扩展,尤其是当表单类型可能有多种变化时。因此,这些解决方法在实践中很快就会失效,并增加了人工干预的需要。

在这篇文章中,我们将展示如何使用少量代码为任何一组表单创建自己的文档拆分解决方案,而无需构建自定义规则或处理工作流程。

解决方案概述

在本文中,我们使用一组常见的抵押贷款申请表来演示如何使用 Amazon Textract 和 Amazon Comprehend 创建比早期方法更强大的智能文档拆分器。在处理抵押贷款申请文件时,借款人提交由不同页长的异构文档类型组成的多页 PDF;要提取信息,用户(例如银行)必须分解此 PDF。

尽管我们展示了抵押表格的具体示例,但您通常可以扩展此方法并将其应用于几乎任何多页 PDF 文档集。

我们使用 Amazon Textract 从文档中提取数据并构建与 Amazon Comprehend 兼容的数据集来训练 文档分类模型。接下来,我们训练分类模型并创建可以执行实时文档分析的分类端点。请记住,Amazon Textract 和 Amazon Comprehend 分类终端节点会产生费用,因此请参阅 Amazon Textract定价亚马逊全面定价 了解更多信息。最后,我们展示了如何使用此端点对文档进行分类,并根据分类结果分割文档。

此解决方案使用以下 AWS 服务:

先决条件

您需要完成以下先决条件才能构建和部署此解决方案:

  1. Install 安装 Python 3.8.x。
  2. Install 安装 jq。
  3. Install 安装 AWS SAM CLI。
  4. Install 安装 码头工人.
  5. 请确保您有 安装了点子.
  6. 安装和配置AWS命令行界面 (AWS CLI)。
  7. 配置 您的 AWS 凭证。

该解决方案旨在以最佳方式工作 us-east-1us-west-2 利用 Amazon Textract 较高默认配额的区域。对于特定区域工作负载,请参阅 Amazon Textract 终端节点和配额。确保整个解决方案使用单个区域。

克隆仓库

首先,通过运行以下命令克隆存储库;然后我们切换到工作目录:

git clone https://github.com/aws-samples/aws-document-classifier-and-splitter.git
cd aws-document-classifier-and-splitter

解决方案工作流程

该解决方案由三个工作流程组成:

  • 工作流程1_端点构建器 – 获取培训文档并在 Amazon Comprehend 上构建自定义分类终端节点。
  • workflow2_docsplitter – 充当文档拆分服务,其中文档按类别拆分。它使用在中创建的分类端点 workflow1.
  • 工作流程3_本地 – 适用于处于严格监管行业且无法在 Amazon S3 中保留数据的客户。此工作流程包含本地版本 workflow1workflow2.

让我们深入了解每个工作流程及其工作原理。

工作流程 1:从 PDF、JPG 或 PNG 文档构建 Amazon Comprehend 分类器

第一个工作流程获取存储在 Amazon S3 上的文档,并通过一系列步骤发送它们,以通过 Amazon Textract 从文档中提取数据。然后,提取的数据用于创建 Amazon Comprehend 自定义分类终端节点。下面的架构图对此进行了演示。

推出 workflow1,您需要包含训练数据集文件(这些文件可以是图像、单页 PDF 或多页 PDF)的文件夹的 Amazon S3 URI。该文件夹的结构必须如下所示:

root dataset directory
---- class directory
-------- files

或者,该结构可以有额外的嵌套子目录:

root dataset directory
---- class directory
-------- nested subdirectories
------------ files

类子目录(第二级目录)的名称将成为 Amazon Comprehend 自定义分类模型中使用的类的名称。例如,在以下文件结构中,类为 form123.pdf is tax_forms:

training_dataset
---- tax_forms
-------- page_1
------------ form123.pdf

要启动工作流程,请完成以下步骤:

  1. 将数据集上传到您拥有的 S3 存储桶。

建议为要分类的每个类别提供超过 50 个样本。以下屏幕截图显示了此文档类结构的示例。

  1. 建立 sam-app 通过运行以下命令(根据需要修改提供的命令):
cd workflow1_endpointbuilder/sam-app
sam build
sam deploy --guided
Stack Name [sam-app]: endpointbuilder
AWS Region []: us-east-1
#Shows you resources changes to be deployed and require a 'Y' to initiate deploy
Confirm changes before deploy [y/N]: n
#SAM needs permission to be able to create roles to connect to the resources in your template
Allow SAM CLI IAM role creation [Y/n]: y
Save arguments to configuration file [Y/n]: n Looking for resources needed for deployment:
Creating the required resources...
Successfully created!
Managed S3 bucket: {your_bucket}
#Managed repositories will be deleted when their functions are removed from the template and deployed
Create managed ECR repositories for all functions? [Y/n]: y

构建的输出是 Step Functions 状态机的 ARN。

  1. 构建完成后,导航至 状态机 Step Functions 控制台上的页面。
  2. 选择您创建的状态机。
  3. 开始执行.
  4. 输入以下必需的输入参数:
{
“folder_uri”: “s3://{your dataset}”
}

  1. 开始执行.

状态机启动工作流程。这可能需要几个小时,具体取决于数据集的大小。下面的屏幕截图显示了我们的状态机正在进行中。

当状态机完成时,图中的每个步骤都是绿色的,如下面的屏幕截图所示。

您可以导航到 Amazon Comprehend 控制台以查看部署的终端节点。

您现在已经使用文档构建了自定义分类器。这标志着结束 workflow1.

工作流程 2:构建端点

第二个工作流程采用您在中创建的端点 workflow1 并根据模型训练的类别分割文档。下面的架构图对此进行了演示。

推出 workflow2,我们构建 sam-app。根据需要修改提供的命令:

cd workflow2_docsplitter/sam-app
sam-app % sam build
Build Succeeded sam-app % sam deploy --guided
Configuring SAM deploy
=========================================
Stack Name [sam-app]: docsplitter
AWS Region []: us-east-1
#Shows you resources changes to be deployed and require a 'Y' to initiate deploy
Confirm changes before deploy [y/N]: n
#SAM needs permission to be able to create roles to connect to the resources in your template
Allow SAM CLI IAM role creation [Y/n]: y
Save arguments to configuration file [Y/n]: n Looking for resources needed for deployment:
Managed S3 bucket: {bucket_name}
#Managed repositories will be deleted when their functions are removed from the template and deployed
Create managed ECR repositories for all functions? [Y/n]: y

创建堆栈后,您会在 输出 CloudFormation 堆栈的选项卡。您可以开始向此端点发出请求。

示例请求可在 workflow2_docsplitter/sample_request_folder/sample_s3_request.py 文件。该 API 采用三个参数:S3 存储桶名称、文档 Amazon S3 URI 和 Amazon Comprehend 分类终端节点 ARN。 Workflow2仅支持PDF输入。

在我们的测试中,我们使用包含五种不同文档类型的 11 页抵押文档。

API 的响应是包含所有拆分文档的 .zip 文件的 Amazon S3 URI。您还可以在 API 调用中提供的存储桶中找到此文件。

下载对象并查看根据类别拆分的文档。

这标志着结束 workflow2。我们现在展示了如何使用自定义 Amazon Comprehend 分类终端节点来对文档进行分类和拆分。

工作流程3:本地文档拆分

我们的第三个工作流程遵循类似的目的 workflow1workflow2 生成 Amazon Comprehend 终端节点;但是,所有处理都是使用本地计算机完成的,以生成 Amazon Comprehend 兼容的 CSV 文件。此工作流程是为高度监管行业的客户创建的,在这些行业中,可能无法在 Amazon S3 上持久保存 PDF 文档。以下架构图是本地端点构建器工作流程的直观表示。

下图说明了本地文档拆分器架构。

该解决方案的所有代码都可以在 workflow3_local/local_endpointbuilder.py 文件来构建 Amazon Comprehend 分类终端节点以及 workflow3_local/local_docsplitter.py 发送文件进行拆分。

结论

文档拆分是构建成功且智能的文档处理工作流程的关键。对于企业来说,这仍然是一个非常相关的问题,尤其是为日常运营聚合多种文档类型的组织。一些示例包括处理保险索赔文件、保险单申请、SEC 文件、纳税表和收入核实表。

在这篇文章中,我们采用了一组用于贷款处理的常见文档,使用 Amazon Textract 提取数据,并构建了 Amazon Comprehend 自定义分类终端节点。通过该端点,我们对传入文档进行分类,并根据各自的类别对它们进行拆分。您可以将此流程应用于几乎任何文档集,并应用于各个行业,例如医疗保健和金融服务。要了解有关 Amazon Textract 的更多信息, 访问网页.


作者简介

阿迪提·拉吉尼什 是滑铁卢大学一年级软件工程专业的学生。 她的兴趣包括计算机视觉、自然语言处理和边缘计算。 她还热衷于基于社区的 STEM 外展和宣传。 在业余时间,她可以攀岩、弹钢琴或学习如何烤出完美的烤饼。

拉吉帕塔克 是加拿大和美国财富 50 强和中型 FSI(银行、保险、资本市场)客户的解决方案架构师和技术顾问。 Raj 专注于机器学习,并在文档提取、联络中心转换和计算机视觉方面有应用。

来源:https://aws.amazon.com/blogs/machine-learning/intelligently-split-multi-form-document-packages-with-amazon-texttract-and-amazon-comprehend/

时间戳记:

更多来自 AWS机器学习博客