1. 简介
Document AI 是一种文档理解解决方案,可接受文档、电子邮件等非结构化数据,使数据更易于理解、分析和使用。
通过 Document AI Workbench 使用增量训练,您可以为专用文档类型提供额外的有标签示例并创建新的模型版本,从而实现更高的文档处理准确率。
在本实验中,您将创建账单解析器处理器、配置该处理器以进行追加训练、为示例文档添加标签,以及对该处理器进行追加训练。
本实验中使用的文档数据集由一家虚构的管道公司随机生成的账单组成。
前提条件
此 Codelab 以其他 Document AI Codelab 中展示的内容为基础。
建议您先完成以下 Codelab,然后再继续。
- 使用 Document AI (Python) 进行光学字符识别 (OCR)
- 使用 Document AI (Python) 进行表单解析
- 使用 Document AI (Python) 的专业处理器
- 使用 Python 管理 Document AI 处理器
- Document AI:人机协同
学习内容
- 为账单解析器处理器配置追加训练。
- 使用注解工具为 Document AI 训练数据添加标签。
- 训练新的模型版本。
- 评估新模型版本的准确性。
所需条件
2. 准备工作
此 Codelab 假定您已完成入门 Codelab 中列出的 Document AI 设置步骤。
请先完成以下步骤,然后再继续:
3. 创建处理器
您必须先创建一个账单解析器处理器,以用于本实验。
- 在控制台中,前往 Document AI 概览页面。
- 点击 Create Processor,向下滚动到 Specialized(或在搜索栏中输入 Invoice Parser),然后选择 Invoice Parser。
- 将其命名为
codelab-invoice-uptraining
(或您能记住的其他名称)并从列表中选择距离最近的区域。
- 点击 Create 以创建处理器。然后,您应该会看到“Processor Overview”页面。
4. 创建数据集
为了训练处理方,我们需要创建一个包含训练数据和测试数据的数据集,以帮助处理方识别我们想要提取的实体。
您需要在 Cloud Storage 中创建新的存储桶来存储数据集。注意:此存储桶不得与当前存储文档的存储桶相同。
- 打开 Cloud Shell 并运行以下命令以创建存储桶。或者,在 Cloud 控制台中创建新存储桶。保存此存储桶名称,稍后会用到。
export PROJECT_ID=$(gcloud config get-value project)
gsutil mb -p $PROJECT_ID "gs://${PROJECT_ID}-uptraining-codelab"
- 转到数据集标签页,然后点击创建数据集
- 将您在第 1 步中创建的存储桶的名称粘贴到目标路径字段中。(请勿包含
gs://
)
- 等待数据集创建完毕,然后数据集应该会将您定向到“数据集管理”页面。
5. 导入测试文档
现在,我们将示例账单 PDF 导入数据集。
- 点击 Import Documents(导入文件)
- 我们提供了一个示例 PDF 文件,供您在此实验中使用。复制以下链接并将其粘贴到源路径框中。退出“数据拆分”显示为“未分配”点击导入。
cloud-samples-data/documentai/codelabs/uptraining/pdfs
- 等待文档导入。在我的测试中,此过程不到 1 分钟的时间。
- 导入完成后,您应该会在数据集管理界面中看到该文档。点击该标签页以进入标签控制台。
6. 为测试文档添加标签
接下来,我们将确定要提取的实体的文本元素和标签。这些标签将用于训练我们的模型以解析此特定文档结构并确定正确的类型。
- 您现在应该进入标签控制台,如下所示。
- 点击“选择文本”工具,然后突出显示文本“McWilliam Piping International Piping Company”并为其分配标签
supplier_name
。您可以使用文本过滤条件来搜索标签名称。
- 突出显示文本“14368 Pipeline Ave Chino, CA 91710”并为其分配标签
supplier_address
。
- 突出显示文本“10001”并为其分配标签
invoice_id
。
- 突出显示“2020-01-02”并为其分配标签
due_date
。
- 切换到“边界框”工具。突出显示文本“指节连接器”并为其分配标签
line_item/description
。
- 突出显示文本“9”并为其分配标签
line_item/quantity
。
- 突出显示文本“74.43”并为其分配标签
line_item/unit_price
。
- 突出显示文本“669.87”并为其分配标签
line_item/amount
。
- 对接下来的两个订单项重复前面的 4 个步骤。完成后,它应如下所示。
- 突出显示文本“1,419.57”(在小计旁边),并分配标签
net_amount
。
- 突出显示文本“113.57”(在“税费”旁边),并分配标签
total_tax_amount
。
- 突出显示文本“1,533.14”(在“合计”旁边)并分配标签
total_amount
。
- 突出显示其中一个“$”指定标签
currency
。
- 完成后,加标签的文档应如下所示。请注意,您可以通过点击文档中的边界框或左侧菜单中的标签名称/值来调整这些标签。完成加标签操作后,点击保存。
- 以下是标签和值的完整列表
标签名称 | 文本 |
| McWilliam Piping International Piping Company |
| 14368 Pipeline Ave Chino, CA 91710 |
| 10001 |
| 2020-01-02 |
| 转向节耦合器 |
| 9 |
| 74.43 |
| 669.87 |
| PVC 管(12 英寸) |
| 7 |
| 15.90 |
| 111.30 |
| 铜管 |
| 7 |
| 91.20 |
| 638.40 |
| 1,419.57 |
| 113.57 |
| 1,533.14 |
| $ |
7. 将文档分配到训练集
您现在应返回到数据集管理控制台。请注意,已加标签和未加标签的文档数以及有效标签的数量都发生了变化。
- 我们需要将此文档分配给“训练”或“测试”。点击相应文档。
- 点击 Assign to Set(分配给集合),然后点击 Training(训练)。
- 请注意,数据拆分数值已更改。
8. 导入预先加标签的数据
Document AI 增量训练要求训练集和测试集中至少有 10 个文档,并且每个集中的每个标签有 10 个实例。
为了获得最佳性能,我们建议您在每个数据集中至少有 50 个文档,每个标签至少有 50 个实例。通常,训练数据越多,准确性就越高。
为 100 个文档手动添加标签需要很长时间,因此我们有一些预先添加了标签的文档,您可以为本实验导入这些文档。
您可以导入 Document.json
格式的已预先添加标签的文档文件。这些文件可能是调用处理器并使用人机协同 (HITL) 验证准确性的结果。
- 点击导入文件。
- 复制/粘贴以下 Cloud Storage 路径并将其分配给训练集。
cloud-samples-data/documentai/codelabs/uptraining/training
- 点击添加其他存储桶。然后,复制/粘贴以下 Cloud Storage 路径并将其分配给测试集。
cloud-samples-data/documentai/codelabs/uptraining/test
- 点击导入,然后等待文档导入。这将比上次花费更长的时间,因为要处理的文档更多。在我的测试中,此过程大约需要 6 分钟时间。您可以离开此页面,稍后再返回来查看。
- 完成后,您应该会在“数据集管理”页面看到文档。
9. 修改标签
我们用于此示例的示例文档并不包含 Invoice Parser 支持的所有标签。在训练之前,我们需要将未使用的标签标记为非活动状态。在追加训练之前,您也可以按照类似步骤添加自定义标签。
- 点击左下角的管理标签。
- 您现在应该位于标签管理控制台中。
- 使用复选框和停用/启用按钮,仅将以下标签标记为已启用。
currency
due_date
invoice_id
line_item/amount
line_item/description
line_item/quantity
line_item/unit_price
net_amount
supplier_address
supplier_name
total_amount
total_tax_amount
- 完成后,控制台应如下所示。完成后,请点击保存。
- 点击返回箭头以返回数据集管理控制台。请注意,包含 0 个实例的标签已标记为“非活跃”。
10. 可选:为新导入的文档自动添加标签
在为已部署现有处理器版本的处理器导入未加标签的文档时,您可以使用自动加标签功能来节省加标签的时间。
- 在训练页面上,点击导入文档。
- 复制并粘贴以下 路径。该目录包含 5 个没有加标签的发票 PDF 文件。从数据拆分下拉列表中选择训练。
cloud-samples-data/documentai/Custom/Invoices/PDF_Unlabeled
- 在自动加标签部分,选中使用自动添加标签功能导入复选框。
- 选择现有处理器版本,以便为文档添加标签。
- 例如:
pretrained-invoice-v1.3-2022-07-15
- 点击导入,然后等待文档导入。您可以离开此页面,稍后再返回来查看。
- 完成后,文档会显示在训练页面的已自动加标签部分中。
- 您不能使用自动加标签的文档进行训练或测试,除非将其标记为已加标签。找到已自动加标签部分以查看自动加标签的文档。
- 选择第一个文档以进入标签控制台。
- 验证标签、边界框和值,确保其正确无误。标记任何被省略的值。
- 完成后,选择标记为已加标签。
- 为每个自动加标签的文档重复标签验证,然后返回训练页面以使用数据进行训练。
11. 增量训练模型
现在,我们可以开始训练账单解析器了。
- 点击训练新版本
- 为您的版本指定一个容易记住的名称,例如
codelab-uptraining-test-1
。基础版本是构建此新版本时所依据的模型版本。如果您使用的是新处理器,则唯一的选项应该是 Google Pretrained Next with Uptraining
- (可选)您还可以选择查看标签统计信息,以查看关于数据集中标签的指标。
- 点击开始训练以开始追加训练过程。系统应该会将您重定向至“数据集管理”页面。您可以在右侧查看训练状态。训练将需要几个小时才能完成。您可以离开此页面,稍后再返回来查看。
- 如果您点击版本名称,则会转到管理版本页面,其中会显示训练作业的版本 ID 和当前状态。
12. 测试新模型版本
训练作业完成后(在我的测试中,此过程大约为 1 小时),您现在可以测试新的模型版本并开始将其用于预测。
- 转到管理版本页面。您可以在此处查看当前状态和 F1 得分。
- 我们需要先部署此模型版本,然后才能使用它。点击右侧的垂直点,然后选择部署版本。
- 在等待版本部署时,从弹出式窗口中选择部署。这需要几分钟才能完成。部署此版本后,您还可以将此版本设置为默认版本。
- 完成部署后,转到评估标签页。然后点击“版本”下拉菜单,选择我们新创建的版本。
- 在此页面上,您可以查看完整文档以及各个标签的各项评估指标,包括 F1 得分、精确率和召回率。 您可以在 AutoML 文档中详细了解这些指标。
- 下载下方链接的 PDF 文件。这是一个未包含在训练集或测试集中的示例文档。
- 点击 Upload Test Document,然后选择 PDF 文件。
- 提取的实体应如下所示。
13. 总结
恭喜,您已成功使用 Document AI 对账单解析器进行了追加训练。现在,您可以像解析任何专业处理方一样使用此处理器解析账单。
您可以参阅特殊处理器 Codelab,了解如何对处理响应进行处理。
清理
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请执行以下操作:
- 在 Cloud Console 中,转到管理资源页面。
- 在项目列表中,选择您的项目,然后点击“删除”。
- 在对话框中输入项目 ID,然后点击“关停”以删除项目。
资源
许可
此作品已获得 Creative Commons Attribution 2.0 通用许可授权。