Optimize blueprint extraction accuracy in Amazon Bedrock Data Automation

TL;DR · AI 摘要
AWS 通过 Amazon Bedrock Data Automation 提供蓝图指令优化功能,可显著提升从非结构化文档中提取数据的准确性。
核心要点
- 使用 3 到 10 个示例文档即可在几分钟内优化蓝图指令。
- 无需单独进行模型微调即可提升提取精度。
- 蓝图指令优化可处理文档格式差异和边缘情况。
结构提纲
按章节快速跳转。
- §引言
从非结构化文档中提取结构化数据是组织自动化的重要目标,但准确率提升是关键挑战。
蓝图指令优化是 Amazon Bedrock Data Automation 的功能,通过提供示例文档自动优化提取指令。
实际文档中字段标签、布局和边缘情况的复杂性增加了提取难度。
通过 AWS 控制台或 API 运行优化工作流程,并应用最佳实践选择示例和真实数据。
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- 蓝图指令优化
- 功能优势
- 无需模型微调
- 快速优化(几分钟)
- 提升提取精度
- 使用场景
- 处理文档格式差异
- 解决边缘情况
- 支持多供应商文档
金句 / Highlights
值得收藏与分享的关键句。
蓝图指令优化可在几分钟内完成,无需进行模型微调。
通过提供 3 到 10 个示例文档,蓝图指令可自动优化以提高准确性。
文档布局和字段标签的差异是提取精度下降的主要原因。
在 Amazon Bedrock 数据自动化中优化蓝图提取的准确性 | 人工智能
提取结构化数据是从发票、合同、税务表格和注册申请等非结构化文档中实现的常见自动化目标。实现高提取精度仍然是一个关键挑战。当文档与预期模板不一致、不同供应商的格式存在差异或扫描质量较差时,准确性会下降。通过 Amazon Bedrock 数据自动化(BDA),您可以使用单一 API 对文档进行分类、提取、标准化和验证数据。您可以使用可自定义的蓝图生成针对特定文档格式和业务需求的自定义输出。然而,要优化蓝图提取的准确性以处理生产文档的全部多样性,仍然需要进行迭代调整。
蓝图指令优化是 BDA 的一项功能,可以自动优化您的提取指令,直接解决这一挑战。您只需提供三到十个带有预期值的示例文档,BDA 就能在几分钟内优化您的蓝图指令,而不是几周。不需要进行单独的模型微调。
到本文结束时,您将能够优化蓝图以提高准确性,通过 Amazon Bedrock 控制台或 API 运行优化工作流,并应用选择示例和真实值的最佳实践。
文档字段提取的挑战
当您使用 Amazon Bedrock 数据自动化构建智能文档处理(IDP)管道时,您会创建蓝图,这些蓝图定义了从文档中提取哪些字段。每个字段都包含一个自然语言指令,用于指导提取。例如:
- 字段:invoice_number → 指令:“发票编号”。
- 字段:total_amount → 指令:“应付总额”。
这些初始指令在简单情况下工作良好。然而,现实中的文档引入了额外的复杂性:
- 不同文档变体的字段标签各不相同。
- 看起来相似的标签可能会引起混淆(例如,“小计”与“总计”)。
- 不同供应商或时间段的文档布局不同。
- 边缘情况需要更具体的提取指导。
以下是一个采购订单蓝图模式的简略示例。每个字段都有一个类型、一个 inferenceType(explicit 用于直接出现在文档中的值,inferred 用于需要推理的值),以及一个指导提取的指令:
{
"class": "Purchase Order",
"type": "object",
"properties": {
"po_number": {
"type": "string",
"inferenceType": "explicit",
"instruction": "采购订单的唯一标识符"
},
"order_date": {
"type": "string",
"inferenceType": "explicit",
"instruction": "订单下达的日期"
},
"order_total": {
"type": "number",
"inferenceType": "explicit",
"instruction": "订单的总金额"
},
"special_requests": {
"type": "string",
"inferenceType": "inferred",
"instruction": "订单中包含的任何特殊请求或备注"
}
}
}蓝图指令优化会优化每个字段的指令值。类型和 inferenceType 保持不变。您可以在 GitHub 仓库中查看完整的采购订单模式。
你已经了解自己的文档和数据。蓝图指令优化为你提供了一条更快捷的路径,以缩小准确性差距。
传统方法:手动迭代
为了提高提取准确性,你通常需要手动对字段指令进行多次迭代:尝试不同的措辞,添加上下文,并通过试错法不断优化描述。每个循环都需要运行提取,将结果与预期值进行比较,调整指令,并重复这一过程。对于处理来自数百家供应商文档的组织来说,这种过程可能需要每个文档类型花费数周时间。
优化方法:自动化优化
通过蓝图指令优化,你可以在一个工作流程中自动完成整个优化循环。BDA 分析其提取结果与你提供的真实值之间的差异,然后优化每个字段的自然语言指令,从而在几分钟内生成优化后的指令,而不是数周。
通过蓝图指令优化提高准确性
按照以下步骤,使用你工作负载中的真实文档来优化提取指令。
- 提供示例文档 – 上传三到十份具有代表性的生产工作负载文档,包括提取过程中遇到挑战的边缘情况。此外,尽可能涵盖生产文档分布的多样性,以避免过拟合。
- 提供真实值 – 为每个示例文档中的每个字段提供正确的预期值。真实值是经过验证的准确数据,用作衡量提取质量的基准。这告诉 BDA 正确的答案应该是什么。
- 运行优化 – 启动优化过程。BDA 将其初始提取结果与你提供的真实值进行比较,然后优化每个字段的自然语言指令。
- 查看结果 – 检查详细的准确性指标以及优化后的指令。优化过程通常在几分钟内完成。指标包括 F1 分数(精确率和召回率的综合度量)和完全匹配率(提取值与真实值完全匹配的字段百分比)。
优化后的指令结合了从你的示例中学习到的模式,并增加了更多细节和具体性。例如,一个初始指令“发票号码”可能会变为“发票号码,通常位于文档页眉的右上角,格式为数字或字母数字代码,后跟‘Invoice #’或‘Invoice No’”。
示例场景:采购订单提取
为了说明优化工作流程,我们通过一个虚构的自行车制造公司的文档,逐步演示采购订单提取的场景。
你创建了一个蓝图,用于从采购订单中提取字段,包括订单号、物品描述、数量、单价和总金额。
在你上传了四份具有代表性的采购订单(来自 Cycle Central 和 Bike World 等零售商)并提供相应的真值文件后,运行优化,准确性得到提升:
| 指标 | 优化前 | 优化后 | |------|--------|--------| | 每个文件的完全匹配(最佳情况) | 92% | 100% | | 总体完全匹配 | 90% | 92% |
BDA 自动优化指令,以解决特定供应商的格式、字段标签变化以及采购订单集中的布局差异,从而将总体完全匹配率从 90% 提高到 92%。
如果你处理的是大量数据,即使提高几个百分点的准确性,也能直接减少人工审核队列,提高处理吞吐量。
入门
你可以通过 Amazon Bedrock 控制台或 API 访问蓝图指令优化功能。你可以使用自己的文档,或者部署示例解决方案,其中包含蓝图、示例 PDF 文档和真实值 JSON 文件。
先决条件
要跟随本文的步骤,你需要以下内容:
- 一个 AWS 账户。
- 在支持的区域中启用了 Amazon Bedrock 数据自动化功能的 Amazon Bedrock 访问权限。
- 一个具有使用 Amazon Bedrock 数据自动化和 Amazon Simple Storage Service (Amazon S3) 权限的 AWS Identity and Access Management (AWS IAM) 角色。
- 三到十个代表你生产工作负载的示例文档。
- 每个示例文档的预期提取值的真实值 JSON 文件,或部署模板中包含的示例。真实值文件与蓝图的模式一致,每个字段都填写了正确的预期值。以下是一个采购订单的简略示例:
{
"po_number": "PO-2026-0224-1265",
"retailer_name": "Bike World",
"order_date": "2026-02-24",
"order_total": 11571.25,
"order_items": [
{
"sku": "AB-MB-076",
"product_name": "Trail Classic",
"quantity": 6,
"unit_price": 1864.37,
"line_total": 11186.22
}
]
}部署示例解决方案
要部署解决方案,请按照以下步骤操作:
- 从 GitHub 仓库下载 CloudFormation 模板。
- 打开 AWS CloudFormation 控制台。
- 选择 创建堆栈,然后选择 上传模板文件。
- 上传下载的模板文件并选择下一步。
- 对于堆栈名称,输入一个名称(例如,blueprint-optimization-sample)。
- 遵循其余提示,确认 IAM 功能,并选择 创建堆栈。
堆栈部署一个示例蓝图、文档文件、真实值文件和一个 Amazon SageMaker AI 笔记本。该笔记本将引导你使用 API 进行优化工作流程。GitHub 仓库中也提供了完整的代码示例。
堆栈部署完成后,请按照以下步骤操作:
- 打开 AWS 管理控制台。
- 导航到 Amazon SageMaker AI。
- 从左侧导航窗格中选择 笔记本。
- 找到堆栈创建的笔记本实例。
- 选择 打开 JupyterLab。
- 在 JupyterLab 中,导航到源目录。
- 打开采购订单优化笔记本。
- 选择 Python 3 作为内核。
- 按照笔记本中的说明,使用提供的示例文档创建和优化蓝图。优化需要几分钟时间。
- 优化完成后,查看优化后的蓝图,并将更新后的指令与原始指令进行比较。
- 可选地,将优化后的蓝图推广为生产使用。
- 完成后,在笔记本中运行清理单元格,清空 S3 存储桶,然后删除 CloudFormation 堆栈。
如果你更喜欢使用控制台,示例文档和真实值文件可以在堆栈创建的 Amazon S3 存储桶中找到。
使用控制台
从 Amazon Bedrock 控制台,你可以使用自动生成的模式或手动定义的模式创建蓝图。如果你使用的是已部署堆栈中的示例,可以粘贴提供的 JSON。
- 导航到 Amazon Bedrock 数据自动化。
- 选择 自定义输出设置。
- 选择“创建蓝图”。
- 上传一个具有代表性的样本文档。
- 定义您的 JSON 架构。
- 如果要使用已部署堆栈中的样本,请选择“手动创建新蓝图”。
- 切换到 JSON 视图。
- 粘贴样本蓝图 JSON。图 1:创建蓝图页面,显示 JSON 架构编辑器,您可以在此粘贴蓝图定义。
- 保存您的蓝图。
- 选择“获取结果”以运行初始提取。这将建立优化前的基准准确率。
- 在蓝图详情页面上选择“优化蓝图”。上传额外的样本文档(建议上传三个或更多),并为每个文件提供真实值。您可以上传真实值 JSON 文件,或选择“自动填充”以从当前提取结果中获取初始值,然后手动编辑。
- 优化完成后,Amazon Bedrock Data Automation 会显示每个文件以及总体的优化前后准确率指标,如以下图像所示。选择“保存优化后的蓝图”以用改进版本替换现有蓝图。图 2:优化结果页面,显示每个文件的优化前后准确率指标以及总体改进情况。
解读结果
结果页面会为每个样本文件以及总体显示三个指标。了解每个指标的含义有助于决定是否保存优化后的蓝图或添加更多示例并重新运行。
精确匹配率是指提取值与真实值完全匹配的字段百分比,逐字匹配。这是最严格的准确率衡量方式。在前面的示例中,Cycle Central 文件的精确匹配率从 92.4% 提高到了 100%,这意味着 BDA 提取的每个字段都与预期值完全匹配。
总体 F1 分数将精确度(BDA 提取内容的正确比例)和召回率(BDA 找到正确数据的比例)合并为一个分数。F1 分数对于像项目描述这种具有可变长度值的字段特别有用,因为精确匹配可能过于严格,但部分得分是有意义的。在这个示例中,F1 分数也从 92.4% 提高到了 100%,表明优化后的指令既捕捉到了正确的值,也捕捉到了正确的内容量。
置信度分数反映了 BDA 对每个提取值的确定程度。更高的置信度分数意味着 BDA 在该字段中找到了更清晰的文档信号。对于此文件,置信度从 57.8% 提高到了 60.1%,这是一个较小的提升,当文档布局模糊时,这是可以预期的。较高的置信度分数可以减少在人机协作流程中需要人工审核的字段数量。
使用“按文件的指标”标签页来识别优化后仍然得分较低的文档。这些是添加更多针对性示例的候选对象。切换到“聚合指标”以评估整个样本集的蓝图健康状况,然后再选择“保存优化后的蓝图”。
API 演示
以下示例展示了使用 AWS SDK for Python(Boto3)进行优化工作流的关键 API 调用。完整的可运行笔记本可在 GitHub 仓库中找到。
- 创建蓝图
将您的 JSON 架构传递给 CreateBlueprint。使用 DEVELOPMENT 阶段作为沙盒:在您明确将其推广到 LIVE 蓝图之前,它不会影响 LIVE 蓝图。
import boto3, json
bda_client = boto3.client('bedrock-data-automation')
2. 开始优化
使用您的样本文档和真实数据文件调用 InvokeBlueprintOptimizationAsync。每个样本将一个文档的 S3 URI 与一个真实数据 JSON 的 S3 URI 进行配对。
response = bda_client.invoke_blueprint_optimization_async( blueprint={ 'blueprintArn': blueprint_arn, 'stage': 'DEVELOPMENT' }, samples=[ { 'assetS3Object': {'s3Uri': 's3://my-bucket/samples/PO_001.pdf'}, 'groundTruthS3Object': {'s3Uri': 's3://my-bucket/ground-truth/PO_001.json'} },
... 其他样本
], outputConfiguration={ 's3Object': {'s3Uri': 's3://my-bucket/optimization-output/'} }, dataAutomationProfileArn=profile_arn ) invocation_arn = response['invocationArn']
3. 轮询以获取完成状态
该任务异步运行。轮询 GetBlueprintOptimizationStatus,直到状态达到 Success。
import time
while True: status = bda_client.get_blueprint_optimization_status( invocationArn=invocation_arn )['status'] if status == 'Success': break elif status in ('ServiceError', 'ClientError'): raise RuntimeError(f'优化失败: {status}') time.sleep(15)
4. 获取优化后的蓝图
任务完成后,GetBlueprint 返回更新后的架构,其中每个字段的指令值都得到了优化。
bp = bda_client.get_blueprint( blueprintArn=blueprint_arn, blueprintStage='DEVELOPMENT' ) optimized_schema = json.loads(bp['blueprint']['schema'])
5. 推广到 LIVE(可选)
当指标满足您的要求时,将优化后的蓝图推广到生产环境。
bda_client.copy_blueprint_stage( blueprintArn=blueprint_arn, sourceStage='DEVELOPMENT', targetStage='LIVE' )
## 与其他 Amazon Bedrock 功能的集成
优化后的蓝图在提取层提高准确性,这有助于增强您在 Amazon Bedrock Data Automation 上构建的下游工作流程:
- Amazon Bedrock Knowledge Bases,一个完全托管的检索增强生成(RAG)功能,通过更高质量的提取数据获得更好的向量嵌入,从而提高 RAG 工作流程的准确性。
- Amazon Bedrock Agents – 依赖提取文档数据的智能工作流程(如自主的抵押贷款处理)可从更可靠的输入中受益,从而减少错误处理的复杂性。
- Amazon Bedrock Guardrails – 通过自动推理检查验证的提取数据可以从更干净的输入中受益,从而提高验证的准确性。
通过提取字段的置信度评分和视觉定位(边界框),您可以在需要时实现人机协作验证。蓝图指令优化同时改进了提取值和相关的置信度评分,从而提高了自动化处理路径的可靠性。
## 最佳实践
根据早期客户的反馈,我们建议以下做法:
- 选择具有代表性的示例 – 选择能够代表您生产工作负载多样性的文档,包括常见格式和提取过程中遇到挑战的边缘情况。
- 验证真实值的准确性 – 在运行优化之前,确认预期值是否正确,因为真实值的质量会直接影响结果。
- 从三到五个示例开始 – 仅使用少量精心挑选的示例即可实现显著的改进,如果初始结果未达到您的准确率目标,可以再添加更多示例。
- 包含具有挑战性的案例 – 添加以前提取失败的示例,以帮助优化过程学习如何准确提取边缘情况。
- 在需要时重新优化 – 如果您注意到随时间推移准确率下降,例如当工作负载中出现新的文档格式时,可以再次运行优化。
## 可用性和定价
Blueprint 指令优化功能在 Amazon Bedrock Data Automation 所支持的 AWS 区域中提供。有关最新区域可用性信息,请参阅 Amazon Bedrock Data Automation 文档。
优化过程会根据示例文档中的页面数量产生标准的 BDA 推理成本。有关详细定价信息,请参阅 Amazon Bedrock 定价页面。
## 清理
如果您部署了示例解决方案或在遵循本文过程中创建了资源,请完成以下步骤以避免产生持续费用:
警告:以下清理步骤将永久删除资源和数据,包括任何优化后的蓝图和示例文档。在继续之前,请保存您想要保留的任何内容。
- 从 AWS CloudFormation 控制台删除 CloudFormation 堆栈。这将删除 SageMaker AI 笔记本、S3 存储桶和相关资源。
- 通过导航到 Amazon Bedrock 控制台中的 Amazon Bedrock Data Automation,选择蓝图并选择“删除”来删除您创建的蓝图。
- 从您在堆栈之外创建的 S3 存储桶中删除示例文档和真实值文件。
有关管理 Amazon Bedrock Data Automation 资源的更多信息,请参阅 Amazon Bedrock Data Automation 文档。
## 结论
Blueprint 指令优化可以显著减少实现高提取准确率所需的手动工作量。通过提供包含真实值的几个示例文档,您可以在几分钟内自动优化提取指令并提高准确率,而不是需要数周时间。
结合 Amazon Bedrock Data Automation 的置信度评分、视觉定位以及与 Amazon Bedrock Agents 和 Amazon Bedrock Knowledge Bases 的集成,此功能可以加速从原型到生产 IDP 工作流的路径。
作为下一步,我们建议您执行以下操作:
- 通过将示例解决方案部署到您的账户并运行 SageMaker AI 笔记本,尝试该功能。
- 在您自己的文档上运行优化,以衡量针对您特定用例的准确率改进情况。
- 探索优化后的蓝图如何与 Amazon Bedrock Knowledge Bases 集成,用于文档搜索和检索,或与 Amazon Bedrock Agents 集成,用于自动化决策流程。
要开始:
- [Amazon Bedrock Data Automation 文档](https://docs.aws.amazon.com/bedrock/latest/userguide/data-automation.html)
- [Amazon Bedrock 控制台](https://console.aws.amazon.com/bedrock/)
- [示例解决方案 CloudFormation 模板](https://github.com/aws-samples/amazon-bedrock-data-automation-samples)
- [Amazon Bedrock 定价](https://aws.amazon.com/bedrock/pricing/)
如需构建文档处理解决方案的专家指导,AWS 专业服务和 AWS 合作伙伴可以提供帮助。
## 作者简介
'\"