自动化PDF预标签化以供亚马逊Comprehend使用
使用自动化PDF预标签化以供亚马逊Comprehend使用
Amazon Comprehend 是一项自然语言处理(NLP)服务,提供预训练和自定义的API,可从文本数据中提取洞察力。 Amazon Comprehend 客户可以训练自定义命名实体识别(NER)模型,以提取他们业务独有的位置、人名和日期等感兴趣的实体。
要训练一个自定义模型,首先需要通过手动注释文档中的实体来准备训练数据。可以使用Comprehend半结构化文档注释工具来完成,该工具可以创建一个Amazon SageMaker Ground Truth作业,并使用自定义模板,允许注释者直接在PDF文档上绘制实体的边界框。然而,对于在SAP等企业资源计划(ERP)系统中具有现有表格实体数据的公司,手动注释可能是重复且耗时的。
为了减少准备训练数据的工作量,我们使用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状态机编排。它有两个版本,使用不同的技术生成预注释。
第一种技术是模糊匹配。这需要一个包含预期实体的预示文件。该工具使用模糊匹配算法通过比较文本相似性生成预注释。
模糊匹配查找文档中与预示文件中列出的预期实体相似(但不一定相同)的字符串。它首先计算预期文本与文档中的单词之间的文本相似度得分,然后匹配所有得分高于阈值的成对实体。因此,即使没有完全匹配,模糊匹配也可以找到缩写和拼写错误等变体。这使得工具能够在没有要求实体逐字出现的情况下对文档进行预标签。例如,如果“AnyCompany Bank”被列为预期实体,模糊匹配将对“Any Companys Bank”出现的地方进行注释。这比严格的字符串匹配更加灵活,并使预标签工具能够自动标记更多的实体。
下图显示了此步骤函数状态机的架构。
第二种技术需要一个预训练的Amazon Comprehend实体识别模型。该工具使用Amazon Comprehend模型生成预注释,按照下图所示的工作流程进行。
下图显示了完整的架构。
在接下来的章节中,我们将逐步介绍如何实施解决方案。
部署预标记工具
将存储库克隆到本地计算机:
git clone https://github.com/aws-samples/amazon-comprehend-automated-pdf-prelabeling-tool.git
该存储库是在Comprehend半结构化文档标注工具的基础上构建的,并通过在SageMaker Ground Truth UI上预先显示预注释,扩展了其功能。
预标记工具既包含Comprehend半结构化文档标注工具的资源,也包含一些特定于预标记工具的资源。您可以使用AWS Serverless Application Model(AWS SAM)部署该解决方案,这是一个可以用于定义无服务器应用基础设施代码的开源框架。
如果您之前已经部署了Comprehend半结构化文档标注工具,请参阅Pre_labeling_tool/README.md
中的FAQ部分,了解如何仅部署特定于预标记工具的资源的说明。
如果您之前没有部署过该工具并且是全新开始,请按照以下步骤部署整个解决方案。
将当前目录更改为注释工具文件夹:
cd amazon-comprehend-semi-structured-documents-annotation-tools
构建和部署解决方案:
make ready-and-deploy-guided
创建预示文件
在使用预标记工具之前,您需要准备好您的数据。主要输入是PDF文档和一个预示文件。预示文件包含每个PDF文档的位置(在'pdf'
下)和一个在'expected_entities'
下标注预期实体的JSON文件的位置。
这个笔记本文件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’(可选) – 在匹配中应该忽略的词语列表。这些参数应该用于防止模糊匹配匹配你知道是错误的特定词语组合。当查看名称时,如果你想忽略一些数字或电子邮件地址,这将非常有用。
例如,之前显示的PDF的expected_entities
如下所示:
[ { '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。
要启动预标注工具,请提供一个带有以下键的event
:
- Premanifest – 将每个PDF文档映射到其
expected_entities
文件。这应该包含Amazon Simple Storage Service (Amazon S3)存储桶(在bucket
下)和文件的键(在key
下)。 - Prefix – 用于创建
execution_id
,为输出存储的S3文件夹和SageMaker Ground Truth标注任务名称命名。 - entity_types – 在UI中显示供标注者标注的实体类型。这些应该包括预期实体文件中的所有实体类型。
- 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控制台上监控状态机的进度。以下图示说明了状态机的工作流程。
当状态机完成时,请执行以下操作:
- 检查保存在
comprehend-semi-structured-docs
S3存储桶的prelabeling/
文件夹中的以下输出:- 每个文档的每一页的个别注释文件(每个文档每页一个)在
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进行自定义实体识别变得更加容易。
有关使用SageMaker Ground Truth标注任务标注PDF文档的更多信息,请参阅使用Amazon Comprehend提取文档中命名实体的自定义文档注释和使用Amazon SageMaker Ground Truth标记数据。