使用 AWS AI 服务进行智能文档处理:第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。

使用 AWS AI 服务进行智能文档处理:第 2 部分

亚马逊的智能文档处理 (IDP) 可帮助您加快业务决策周期并降低成本。 在多个行业中,客户在其业务过程中每年需要处理数百万份文档。 对于处理数百万文档的客户而言,这是最终用户体验的一个关键方面,也是数字化转型的首要任务。 由于格式多样​​,大多数公司手动处理文件,例如 W2、索赔、ID 文件、发票和法律合同,或使用耗时、容易出错且成本高昂的传统 OCR(光学字符识别)解决方案。 具有 AWS AI 服务的 IDP 管道使您能够超越 OCR,提取更准确、更通用的信息,更快地处理文档,节省资金,并将资源转移到更高价值的任务上。

在本系列中,我们概述了 IDP 管道,以减少提取文档并将关键信息输入下游系统所需的时间和精力。 下图显示了通常属于 IDP 工作流的阶段。

在这个由两部分组成的系列中,我们将讨论如何使用 AWS AI 服务大规模自动化和智能处理文档。 在 部分1,我们讨论了 IDP 工作流程的前三个阶段。 在这篇文章中,我们将讨论剩余的工作流程阶段。

解决方案概述

以下参考架构展示了如何使用 AWS AI 服务,例如 亚马逊Textract亚马逊领悟,以及其他 AWS 服务来实施 IDP 工作流程。 在第 1 部分中,我们描述了数据捕获和文档分类阶段,我们对文档进行分类和标记,例如银行对账单、发票和收据文档。 我们还讨论了提取阶段,您可以在其中从文档中提取有意义的业务信息。 在这篇文章中,我们通过在提取阶段查看 Amazon Comprehend 默认和自定义实体来扩展 IDP 管道,执行文档丰富,并简要了解 亚马逊增强AI (Amazon A2I) 在审查和验证阶段包括人工审查人员。

使用 AWS AI 服务进行智能文档处理:第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。

我们也用 亚马逊领悟医疗 作为该解决方案的一部分,该服务可准确快速地从非结构化医学文本中提取信息,识别提取的健康信息之间的关系,并链接到 ICD-10-CM、RxNorm 和 SNOMED CT 等医学本体。

Amazon A2I 是一种机器学习 (ML) 服务,可让您轻松构建人工审核所需的工作流程。 Amazon A2I 为所有开发人员带来人工审查,消除了与构建人工审查系统或管理大量人工审查员相关的无差别繁重工作,无论它是否在 AWS 上运行。 亚马逊 A2I 与 亚马逊Textract亚马逊领悟 让您能够在 IDP 工作流程中引入人工审核步骤。

先决条件

在开始之前,请参阅 部分1 有关 IDP 的高级概述以及有关数据捕获、分类和提取阶段的详细信息。

萃取阶段

在本系列的第 1 部分中,我们讨论了如何使用 Amazon Textract 功能对任何类型的文档进行准确的数据提取。 为了扩展此阶段,我们使用 Amazon Comprehend 预训练实体和 Amazon Comprehend 自定义实体识别器来进一步提取文档。 自定义实体识别器的目的是识别特定实体并以 CSV 或人类可读格式生成有关我们文档的自定义元数据,以供业务用户稍后分析。

命名实体识别

命名实体识别 (NER) 是一项自然语言处理 (NLP) 子任务,涉及筛选文本数据以定位名词短语(称为命名实体),并使用标签对每个短语进行分类,例如品牌、日期、事件、位置、组织、人、数量或标题。 例如,在声明“我最近订阅了 Amazon Prime”中,Amazon Prime 是命名实体,可以归类为品牌。

Amazon Comprehend 使您能够检测文档中的此类自定义实体。 每个实体还具有 Amazon Comprehend 针对每种实体类型返回的置信度分数。 下图说明了实体识别过程。

使用 Amazon Comprehend 识别命名实体

为了从文本文档中获取实体,我们调用 comprehend.detect_entities() 方法并将语言代码和文本配置为输入参数:

def get_entities(text):
    try:
        #detect entities
        entities = comprehend.detect_entities(LanguageCode="en", Text=text)  
        df = pd.DataFrame(entities["Entities"], columns = ['Text', 'Type'])
        display(HTML(df.to_html(index=False)))
    except Exception as e:
        print(e)

我们运行 get_entities() 银行文件上的方法并获得结果中的实体列表。

来自 Comprehend 的 get_entities 方法的响应。

尽管实体提取在识别银行文档中所有内容的默认实体类型方面工作得相当好,但我们希望在我们的用例中识别特定实体。 更具体地说,我们需要在银行对账单中识别客户的储蓄和支票帐号。 我们可以使用 Amazon Comprehend 自定义实体识别来提取这些关键业务术语。

训练 Amazon Comprehend 自定义实体识别模型

为了从客户的银行对账单中检测我们感兴趣的特定实体,我们用两个自定义实体训练了一个自定义实体识别器: SAVINGS_ACCHECKING_AC.

然后我们训练一个自定义实体识别模型。 我们可以选择以下两种方式之一向 Amazon Comprehend 提供数据:注释或实体列表。

注释方法通常可以为图像文件、PDF 或 Word 文档带来更精确的结果,因为您通过将更准确的上下文作为注释与文档一起提交来训练模型。 但是,注释方法可能既费时又费力。 为简单起见,我们使用实体列表方法,您只能将其用于纯文本文档。 此方法为我们提供了一个 CSV 文件,该文件应包含纯文本及其对应的实体类型,如前面的示例所示。 此文件中的实体将特定于我们的业务需求(储蓄和支票帐号)。

有关如何使用注释或实体列表方法为不同用例准备训练数据的更多详细信息,请参阅 准备训练数据.

以下屏幕截图显示了我们的实体列表的示例。

实体列表的快照。

创建 Amazon Comprehend 自定义 NER 实时终端节点

接下来,我们使用我们训练的模型创建一个自定义实体识别器实时端点。 我们使用 创建端点 API 通过 comprehend.create_endpoint() 创建实时端点的方法:

#create comprehend endpoint
model_arn = entity_recognizer_arn
ep_name = 'idp-er-endpoint'

try:
    endpoint_response = comprehend.create_endpoint(
        EndpointName=ep_name,
        ModelArn=model_arn,
        DesiredInferenceUnits=1,    
        DataAccessRoleArn=role
    )
    ER_ENDPOINT_ARN=endpoint_response['EndpointArn']
    print(f'Endpoint created with ARN: {ER_ENDPOINT_ARN}')
    %store ER_ENDPOINT_ARN
except Exception as error:
    if error.response['Error']['Code'] == 'ResourceInUseException':
        print(f'An endpoint with the name "{ep_name}" already exists.')
        ER_ENDPOINT_ARN = f'arn:aws:comprehend:{region}:{account_id}:entity-recognizer-endpoint/{ep_name}'
        print(f'The classifier endpoint ARN is: "{ER_ENDPOINT_ARN}"')
        %store ER_ENDPOINT_ARN
    else:
        print(error)

在训练自定义实体识别器后,我们使用自定义实时终端节点从文档中提取一些丰富的信息,然后借助 Amazon Comprehend 识别的自定义实体和来自 Amazon Textract 的边界框信息执行文档编辑。

富集阶段

在文档丰富阶段,我们可以通过编辑个人身份信息 (PII) 数据、自定义业务术语提取等来执行文档丰富。 我们之前的示例文档(银行对账单)包含客户的储蓄和支票帐号,我们要对其进行编辑。 因为我们已经通过我们的 Amazon Comprehend 自定义 NER 模型了解这些自定义实体,所以我们可以轻松地使用 Amazon Textract 几何数据类型来编辑这些 PII 实体出现在文档中的任何位置。 在以下架构中,我们从银行对帐单文档中编辑关键业务术语(储蓄和支票账户)。

文档充实阶段。

正如您在以下示例中所见,支票和储蓄帐号现在隐藏在银行对帐单中。

编辑的银行对账单样本。

传统的 OCR 解决方案难以从大多数非结构化和半结构化文档中准确提取数据,因为这些文档的多个版本和格式的数据布局方式存在显着差异。 然后,您可能需要实现自定义预处理逻辑,甚至手动从这些文档中提取信息。 在这种情况下,IDP 管道支持您可以使用的两个功能:Amazon Comprehend 自定义 NER 和 Amazon Textract 查询。 这两项服务都使用 NLP 来提取有关文档内容的见解。

使用 Amazon Textract 查询进行提取

使用 Amazon Textract 处理文档时,您可以将新的查询功能添加到您的分析中以指定您需要的信息。 这涉及传递一个 NLP 问题,例如“客户的社会安全号码是什么?” 到亚马逊文本。 Amazon Textract 在文档中查找该问题的信息,并将其返回到与文档的其余信息分开的响应结构中。 查询可以单独处理,也可以与任何其他查询组合处理 FeatureType,如 Tables or Forms.

使用 Amazon Textract 进行基于查询的提取。

借助 Amazon Textract 查询,您可以高精度地提取信息,而不管数据在文档结构(例如表单、表格和复选框)中的布局方式,或位于文档的嵌套部分中的方式。

为了演示查询功能,我们从 COVID-19 疫苗接种卡等文档中提取有价值的信息,例如患者的名字和姓氏、剂量制造商等。

疫苗接种卡样本。

我们使用 textract.analyze_document() 函数并指定 FeatureType as QUERIES 以及将查询以自然语言问题的形式添加到 QueriesConfig.

为简化起见,已对以下代码进行了精简。 完整代码请参考 GitHub 样例代码 analyze_document().

response = None
with open(image_filename, 'rb') as document:
    imageBytes = bytearray(document.read())

# Call Textract
response = textract.analyze_document(
    Document={'Bytes': imageBytes},
    FeatureTypes=["QUERIES"],
    QueriesConfig={
            "Queries": [{
                "Text": "What is the date for the 1st dose covid-19?",
                "Alias": "COVID_VACCINATION_FIRST_DOSE_DATE"
            },
# code trimmed down for simplification
#..
]
}) 

对于查询功能, textract.analyze_document() 函数在响应 JSON 中输出所有 OCR 单词和线条、几何信息和置信度分数。 但是,我们可以打印出我们查询的信息。

Document 是一个包装函数,用于帮助解析来自 API 的 JSON 响应。 它提供了高级抽象并使 API 输出可迭代且易于从中获取信息。 有关详细信息,请参阅 文本响应解析器提取器 GitHub 存储库。 在我们处理响应后,我们会得到以下信息,如屏幕截图所示。

import trp.trp2 as t2
from tabulate import tabulate

d = t2.TDocumentSchema().load(response)
page = d.pages[0]

query_answers = d.get_query_answers(page=page)

print(tabulate(query_answers, tablefmt="github"))

来自查询提取的响应。

审查和验证阶段

这是我们 IDP 管道的最后阶段。 在这个阶段,我们可以使用我们的业务规则来检查文档的完整性。 例如,从保险索赔文档中,准确且成功地提取了索赔 ID。 我们可以使用 AWS 无服务器技术,例如 AWS Lambda 进一步自动化这些业务规则。 此外,我们可以包括人工进行文档审查,以确保预测准确。 Amazon A2I 可加快构建人工审核所需的工作流程以进行 ML 预测。

借助 Amazon A2I,您可以在模型无法做出高置信度预测或持续审核其预测时允许人工审阅者介入。 IDP 管道的目标是减少将准确信息输入决策系统所需的人工输入量。 使用 IDP,您可以减少文档流程的人工输入量以及文档处理的总成本。

从文档中提取所有准确信息后,您可以使用 Lambda 函数进一步添加业务特定规则,最后将解决方案与下游数据库或应用程序集成。

人工审查和验证阶段。

有关如何创建 Amazon A2I 工作流程的更多信息,请按照 准备模块 4 步骤结束 03-idp-document-enrichment.ipynb 请通过 WestEd 就业网页,在我们的 GitHub回购.

清理

为防止将来对您的 AWS 账户产生费用,请删除我们在存储库设置中预置的资源,方法是导航到 清理部分 在我们的回购中。

结论

在这篇由两部分组成的帖子中,我们了解了如何在很少或没有 ML 经验的情况下构建端到端 IDP 管道。 我们讨论了管道的各个阶段以及使用 AWS AI 服务(例如 Amazon Textract、Amazon Comprehend、Amazon Comprehend Medical 和 Amazon A2I)设计和构建行业特定用例的动手解决方案。 在里面 第一篇文章 在本系列中,我们演示了如何使用 Amazon Textract 和 Amazon Comprehend 从各种文档中提取信息。 在这篇文章中,我们深入探讨了如何训练 Amazon Comprehend 自定义实体识别器以从我们的文档中提取自定义实体。 我们还使用 Amazon Textract 以及来自 Amazon Comprehend 的实体列表执行文档丰富技术,例如编辑。 最后,我们了解了如何通过包括一个私人工作团队来为 Amazon Textract 使用 Amazon A2I 人工审核工作流程。

有关本文中完整代码示例的更多信息,请参阅 GitHub回购.

我们建议您查看 亚马逊Textract, 亚马逊领悟亚马逊A2I 文档并遵循提供的指南。 另外,请花点时间查看并了解以下产品的定价 亚马逊Textract, 亚马逊领悟亚马逊A2I.


关于作者

使用 AWS AI 服务进行智能文档处理:第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。 钦兰 是 Amazon Web Services 的 AI/ML 专家解决方案架构师。 她对应用数学和机器学习充满热情。 她专注于为 AWS 客户设计智能文档处理解决方案。 工作之余,她喜欢萨尔萨舞和巴哈塔舞。

使用 AWS AI 服务进行智能文档处理:第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。索纳利萨胡 在 Amazon Web Services 领导智能文档处理 AI/ML 解决方案架构师团队。 她是一个充满激情的技术爱好者,喜欢与客户合作,利用创新解决复杂的问题。 她的核心关注领域是用于智能文档处理的人工智能和机器学习。

使用 AWS AI 服务进行智能文档处理:第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。安扬·比斯瓦斯 是 AI/ML 专家高级解决方案架构师。 Anjan 与企业客户合作,热衷于开发、部署和解释 AI/ML、数据分析和大数据解决方案。 Anjan 拥有超过 14 年与全球供应链、制造和零售组织合作的经验,并积极帮助客户开始使用 AWS 并进行扩展。

使用 AWS AI 服务进行智能文档处理:第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。苏普拉卡什·杜塔 是 Amazon Web Services 的解决方案架构师。 他专注于数字化转型战略、应用程序现代化和迁移、数据分析和机器学习。 他是 AWS 的 AI/ML 社区的一员,负责设计智能文档处理解决方案。

时间戳记:

更多来自 AWS机器学习