亚马逊AWS官方博客

使用 Amazon Textract 与 Amazon Comprehend 从文档中提取自定义实体

Original URL: https://aws.amazon.com/cn/blogs/machine-learning/extracting-custom-entities-from-documents-with-amazon-textract-and-amazon-comprehend/

 

Amazon Textract 是一项机器学习(ML)服务,能够轻松从各类文档扫描件中提取文本与数据。Textract超越了简单的光学字符识别(OCR)来识别表单中的字段内容和表中存储的信息。基于此,大家可以使用Amazon Textract即时“读取”几乎任何类型的文档,并在无需任何人工或代码编写的前提下准确提取其中的文本与数据。

Amazon Textract在各个领域中拥有诸多实际应用。例如,人才管理企业可以使用Amazon Textract对候选人的技能集进行自动化提取,医疗保健组织则可从文档中快速提取患者信息以满足医疗需求等。

在组织处理各类文档时,往往要求我们从文档中的非结构化文本处提取实体。例如,合同文档中可能包含大量文本段落,其中的名词与合同条款以自然语言形式直接列出,而非如表格数据般具有清晰的键/值或表单结构。Amazon Comprehend是一项自然语言处理(NLP)服务,能够从非结构化文本当中提取关键性短语、地点、名称、组织、事件以及情感等。使用自定义实体识别,大家可以将并未预先受到支持的新实体类型划归至预设的通用实体类型当中,借此根据特定业务提取实体以满足实际需求。

在本文中,我们将展示如何使用Amazon Textract与Amazon Comprehend从文档扫描件中提取自定义实体。

用例概述

在本文中,我们将对Resume Entities for NER 数据集中的简历文档进行处理,提取其中的实体,并尝试以自动化方式实现整个流程以获得多种洞察见解,例如候选人掌握的具体技能等。我们使用Amazon Textract从这些简历中提取文本,并使用Amazon Comprehend自定义实体功能,将AWS、C以及C++等技能识别为自定义实体。以下截屏所示,为示例输入文档。

以下截屏所示,为使用Amazon Textract与Amazon Comprehend生成的相应输出。

解决方案概述

下图所示,为一套无服务架构解决方案。该架构能够处理传入文档,使用Amazon Textract进行自定义实体提取,并使用Amazon Comprehend对自定义模型进行训练。在将文档上传至 Amazon Simple Storage Service (Amazon S3)存储桶时,即会触发对应的AWS Lambda函数。该函数将调用Amazon Textract DetectDocumentText API以提取文本,并使用提取到的文本内容调用以进一步检测其中的自定义实体。

整个解决方案分为两个部分:

  • 训练:
    • 使用Amazon Textract从PDF文档中提取文本
    • 使用 Amazon SageMaker Ground Truth标记结果数据
    • 使用Amazon Comprehend配合标记数据进行自定义实体识别训练
  • 推理:
    • 向Amazon Textract发送文档以进行数据提取
    • 将提取到的数据发送至Amazon Comprehend自定义模型以进行实体提取

启动AWS CloudFormation堆栈

在本文中,我们将使用AWS CloudFormation堆栈部署解决方案,并创建方案中所需要的各项资源,具体包括S3存储桶、Amazon SageMaker实例以及必要的AWS身份与访问管理(AWS Identity and Access Management,简称IAM)角色。关于各栈的更多详细信息,请参阅演练:堆栈更新

  • 下载相应 CloudFormation模板 并将其保存在您的本地磁盘上。
  • 使用您的IAM用户名与密码登录至 AWS管理控制台
  • 在AWS CloudFormation控制台上,选择 Create Stack

或者,您也可以直接选择 Launch Stack 以启动该栈。

  • Create Stack页面上,选择 Upload a template file 并上传我们之前下载完成的CloudFormation模板。
  • 选择 Next。
  • 在下一页面中,为该堆栈输入名称。
  • 其他各项皆保留默认设置。
  • Review页面中,选择 I acknowledge that AWS CloudFormation might create IAM resources with custom names(我已知悉AWS CloudFormation可能使用自定义名称创建IAM资源)。
  • 选择 Create stack
  • 等待该堆栈完成运行。

大家可以在Events选项卡的堆栈创建流程部分,检查各类事件。堆栈创建完成之后,请查看Resources选项卡以查看AWS CloudFormation模板创建的所有资源。

  • 在CloudFormation栈的Outputs选项卡部分,记录Amazon SageMaker实例URL。

在Jupyter notebook上运行工作流

要运行您的工作流,请完成以下操作步骤:

  • 打开我们在上一步中保存的Amazon SageMaker实例URL。
  • New 下拉菜单中, 选择 Terminal
  • 在终端内,克隆 GitHub cd Sagemaker; git clone URL。

到这里,您将看到如以下截屏所示的文件夹结构。

  • 打开Textract_Comprehend_Custom_Entity_Recognition.ipynb
  • 运行各notebook单元。

代码演练

将所有文档上传至您的S3存储桶。

现在各PDF已经准备就绪,可供Amazon Textract执行OCR处理。通过StartDocumentTextDetection异步API调用启动处理流程。

在本文中,我们受篇幅所限,仅展示两份PDF格式的简历。如果需要,您可以使用全部220份简历。我们已经将所有简历处理完成,供您直接参考。

要使用Amazon Comprehend训练自定义实体识别模型,那么与任何模型训练工作一样,训练数据都是必不可少的前提条件。在本文中,我们使用Ground Truth标记我们的实体。在默认情况下,Amazon Comprehend能够识别诸如人员、职务以及组织之类的实体。关于更多详细信息,请参阅检测实体。为了展示自定义实体识别功能,我们将重点关注简历中的候选人技能实体。Ground Truth已经提供充足的标记数据,大家可以通过GitHub repo直接获取这部分数据(详见enity_list.csv文件)。关于标记数据的操作说明,请参阅使用Amazon SageMaker Ground Truth与Amazon Comprehend开发NER模型

现在,我们已经掌握了原始数据与标记数据,可以开始训练模型了。要启动此流程,主使用 create_entity_recognizer API调用。提交训练作业之后,大家可以在Amazon Comprehend控制台上看到正在训练的识别器。

在训练过程中,Amazon Comperhend会保留一部分数据作为测试素材。在识别器训练完成之后,大家还可以查看各实体的识别性能以及识别器自身的整体性能水平。

我们准备了部分文本样本,用于测试刚刚训练完成的自定义实体识别器。我们通过相同的步骤执行OCR,而后将Amazon Textract输出上传至Amazon S3,并启动自定义识别器作业。

在提交作业之后,大家可以在Amazon Comprehend控制台的Analysis Jobs之下查看分析进度。

分析作业完成后,您可以下载输出并查看结果。在本文的示例中,我们将JSON结果转换为表格形式以提高可读性。

总结

机器学习与人工智能能够极大提升组织的敏捷水平,将原本只能手动完成的任务转为自动化流程,借此增强执行效率。在本文中,我们演示了一套端到端架构,可通过Amazon Textract与Amazon Comprehend提取候选人技能等自定义实体。本文还将大家讲解了如何使用Amazon Textract进行数据提取,以及如何使用Amazon Comprehend通过您的自有数据集训练自定义实体识别器,并借此实现自定义实体识别。这一流程可以广泛应用于各个行业,例如医疗保健与金融服务等。

要了解关于Amazon Textract提供的各项文本与数据提取功能的更多详细信息,请参阅Amazon Textract工作原理解读

 

本篇作者

Yuan Jiang

专注于机器学习的解决方案架构师。他同时也是Amazon计算机视觉先锋计划的成员。

Sonali Sahu

Amazon机器学习技术领域社区成员、解决方案架构师。她同时也是Amazon 计算机视觉先锋计划的成员。

Kashif Imran

Amazon Web Services首席解决方案架构师。他与众多巨头级AWS客户合作,共同运用AI/ML技术解决复杂的业务问题。他还提供相关技术指导与设计建议,旨在大规模实施计算机视觉应用。他的专长涵盖应用程序架构、无服务器、容器、NoSQL以及机器学习等领域。