Amazon Textract 是一项机器学习ML服务,可以自动从扫描的文档中提取文本、手写内容和数据。查询Queries功能允许用户使用自然语言从各种复杂文档中提取特定信息。自定义查询Custom Queries为企业提供了一种自助方式,以定制查询功能,适用于不标准的业务文档,例如汽车贷款合同、支票和工资单。通过定制此功能以识别特定于这些文档类型的独特术语、结构和关键信息,用户可以更精准地满足后端处理需求,并减少人力干预。自定义查询易于集成到现有的 Textract 流水线中,用户无需在机器学习专业知识或基础设施管理上投入额外成本,就可以继续受益于 Amazon Textract 的完全管理智能文件处理功能。
在这篇文章中,我们将展示如何使用自定义查询准确提取复杂和非标准文档支票中的数据。此外,我们还将讨论自定义查询的好处,并分享有效使用此功能的最佳实践。
在开始新的用例时,您可以通过访问 Textract 控制台 使用分析文档演示Analyze Document Demo或批量文档上传者Bulk Document Uploader来评估 Textract 查询在您文档上的表现。请参考 查询的最佳实践 来编写适用于您的业务用例的查询。如果您在查询响应中发现错误,可能是由于您业务文档的性质,这时可以用自定义查询来提高准确性。在短短几小时内,您可以使用 AWS 管理控制台 注释您的样本文档,并训练一个适配器adapter。适配器是可以插入 Amazon Textract 预训练深度学习模型的组件,定制其输出以适应您的注释文档。您可以通过将适配器标识符作为额外参数传递给 分析文档查询 API 请求来使用该适配器进行推理。
让我们探讨如何利用 自定义查询 在实际场景中如从支票提取数据提高提取准确性。处理支票时的主要挑战在于其高度变化的特性,取决于支票类型例如,个人支票或现金支票、金融机构和国家例如,MICR 行格式。这些变化可能包括收款人姓名、金额数字和文字、日期和签名的位置。准确识别和适应这些变化在数据提取过程中可能是一项复杂的任务。为了提高数据提取的准确性,组织通常会采用手动验证和审查流程,这增加了提取过程的成本和时间。
自定义查询通过允许您在不同类型的支票上定制预训练查询功能来解决这些挑战。对预训练功能的定制化帮助您在处理的特定布局上实现高数据提取精度。
在我们的用例中,一个金融机构希望从支票中提取以下字段:收款人姓名、付款人姓名、账户号码、路由号码、支付金额数字、支付金额文字、支票号码、日期和备忘录。
接下来,我们将探索为支票处理生成适配器的过程。适配器可以通过控制台或通过 API 程序性创建。本文将详细介绍控制台体验;如果您想要程序性创建适配器,请参考 customquerieschecksblogipynb Jupyter 笔记本选项 2。
适配器生成过程分为五个高级步骤:创建适配器、上传样本文档、标注文档、训练适配器和评估性能指标。
在 Amazon Textract 控制台中,创建一个新适配器,提供名称、描述和可选的标签这能帮助您识别适配器。您可以选择启用自动更新,这将允许 Amazon Textract 在底层查询功能更新时自动更新您的适配器。
创建适配器后,您将看到适配器详细信息页面,其中包含 如何工作 部分的步骤列表。这个部分会在您逐步完成操作时提示您接下来的步骤。
适配器生成的初始阶段涉及谨慎选择合适的样本文档集进行标注、训练和测试。我们有一个选项可以自动将文档分为测试和训练数据集;但是在此过程中,我们手动拆分数据集。
重要的是,您可以使用少至五个测试和五个训练样本构建适配器,但必须确保这个样本集是多样且具有代表性的,能够符合生产环境中的工作负载。
对于本教程,我们整理了支票样本数据集,您可以 下载。我们的数据集包括个人支票、现金支票、刺激支票和嵌在工资单中的支票等多种变体。我们还包括了手写和印刷支票,以及备忘录行等字段的变体。
surfshark机场接下来,您通过将查询与相应的答案关联来注释样本文档,可以通过控制台进行注释。您可以选择自动标注或手动标注。自动标注使用 Amazon Textract 查询进行数据集的初步标注。我们建议您使用自动标注来加快注释过程。
在处理支票的用例中,我们使用以下查询。如果您的用例涉及其他文档类型,请参考 最佳实践 来编写适用于您的用例的查询。
收款人是谁?支票号码是多少?收款人的地址是什么?日期是什么?账户号码是多少?支票金额文字是什么?账户姓名/付款人/出票人姓名是什么?美元金额是多少?银行名称/付款银行名称是什么?银行路由号码是多少?MICR 行是什么?备忘录是什么?完成自动标注过程后,您可以检查并编辑每个文档的答案。选择 开始审核,检查每个图像的注释。
如果某个查询的响应缺失或错误,您可以通过绘制边界框或手动输入响应来添加或编辑响应。
为加快您的操作,我们已经为您预标注了支票样本,您可以复制到您的 AWS 账户中。运行 customquerieschecksblogipynb Jupyter 笔记本,自动更新您的注释。
在审核完所有样本文档以确保注释的准确性后,您可以开始适配器训练过程。这一步骤中,您需要指定适配器保存的位置。训练过程的持续时间将取决于训练使用的数据集的大小。如果您选择使用自己选择的注释工具,您还可以程序性地调用训练 API,并将相关的输入文件传递给 API。有关更多详细信息,请参考 自定义查询。
适配器训练完成后,您可以通过检查评估指标如 F1 分数、精确度和召回率来评估其性能。您可以集体分析这些指标,也可以逐个文档分析。使用我们的样本支票数据集,您将看到经过训练的适配器使准确率F1 分数从 68 提升至 92。
此外,您可以通过选择 试用适配器 来测试适配器在新文档上的输出。
评估结束后,您可以通过将额外样本文档纳入训练数据集或重新注释得分低于您的阈值的文档来提高适配器的性能。要重新注释文档,请在适配器详细信息页面上选择 验证文档,选择文档,随后选择 审阅注释。
随着训练的成功完成,您现在可以在 AnalyzeDocument API 调用中使用适配器。API 请求类似于 Amazon Textract 查询 API 请求,唯一不同的是增加了 AdaptersConfig 对象。
您可以运行以下示例代码,或直接在 customquerieschecksblogipynb Jupyter 笔记本中运行。示例笔记本还提供了关于 Amazon Textract 查询与 Amazon Textract 自定义查询之间结果比较的代码。
创建一个 AdaptersConfig 对象,其中包含适配器 ID 和适配器版本,您还可以选择包含要应用适配器的页面:
python!python m pip install amazontextractcaller upgrade!python m pip install amazontextractresponseparser upgrade
import boto3from textractcallertcall import calltextract TextractFeatures Query QueriesConfig Adapter AdaptersConfigimport trptrp2 as t2from tabulate import tabulate
adapter1 = Adapter(adapterid=111111111 version=1 pages=[])adaptersconfig = AdaptersConfig(adapters=[adapter1])
创建一个 QueriesConfig 对象,其中包含您训练适配器时使用的查询,并调用 Amazon Textract API。请注意,您也可以包含适配器未训练过的附加查询。Amazon Textract 将自动为这些问题使用查询功能,而非自定义查询,这样您就可以根据需要灵活使用自定义查询。
python
queries = []queriesappend(Query(text=What is the check# alias=CHECKNUMBER pages=[]))queriesappend(Query(text=What is the date alias=DATE pages=[]))queriesappend(Query(text=What is the check amount in words alias=CHECKAMOUNTWORDS pages=[]))queriesappend(Query(text=What is the dollar amount alias=DOLLARAMOUNT pages=[]))queriesappend(Query(text=Who is the payee alias=PAYEENAME pages=[]))queriesappend(Query(text=What is the customer account# alias=ACCOUNTNUMBER pages=[]))queriesappend(Query(text=what is the payee address alias=PAYEEADDRESS pages=[]))queriesappend(Query(text=What is the bank routing number alias=BANKROUTINGNUMBER pages=[]))queriesappend(Query(text=What is the memo alias=MEMO pages=[]))queriesappend(Query(text=What is the account name/payer/drawer name alias=ACCOUNTNAME pages=[]))queriesappend(Query(text=What is the bank name/drawee name alias=BANKNAME pages=[]))queriesconfig = QueriesConfig(queries=queries)
documentname =

textractjsonwithadapter = calltextract(inputdocument=documentname boto3textractclient=textractclient features=[TextractFeaturesQUERIES] queriesconfig=queriesconfig adaptersconfig=adaptersconfig)
最后,为了更好地阅读,我们将结果制表:
pythondef tabulatequeryanswers(textractjson) d = t2TDocumentSchema()load(textractjson) for page in dpages queryanswers = dgetqueryanswers(page=page) print(tabulate(queryanswers tablefmt=github))
tabulatequeryanswers(textractjsonwithadapter)
要清理您的资源,请按照以下步骤操作:
在 Amazon Textract 控制台中,选择导航窗格中的 自定义查询。选择您要删除的适配器。选择 删除。您可以通过创建先前生成的适配器的新版本来定期改进您的适配器。要创建适配器的新版本,您只需向现有适配器添加新的样本文档,标注这些文档并执行训练。您可以同时维护多个适配器版本,以便在开发流水线中使用。为了无缝更新您的适配器,请不要对存储适配器生成所需文件的 Amazon Simple Storage Service (S3) 存储桶进行更改或删除。
当在您的文档上使用自定义查询时,请参阅 Amazon Textract 自定义查询的最佳实践 以获取额外的注意事项和最佳实践。
自定义查询提供了以下好处:
增强的文档理解:通过高精度提取和规范化数据,自定义查询减少了对手动审核和审计的依赖,使您能够构建更可靠的智能文件处理工作流程的自动化。更快的价值实现:当您遇到需要更高准确率的新文档类型时,可以在几小时内使用自定义查询生成适配器,而无需等待预训练模型更新,拥有对管道的完全控制,而无需依