1. 简介
Document AI 是一种文档理解解决方案,可以提取文档、电子邮件等非结构化数据,从而让用户更容易理解、分析和使用这些数据。
通过 Document AI Workbench 进行增量训练,您可以为专业文档类型提供更多带标签的示例,并创建新的模型版本,从而提高文档处理准确率。
在本实验中,您将创建账单解析器处理器、配置该处理器以进行追加训练、为示例文档添加标签,并对该处理器进行追加训练。
本实验中使用的文档数据集包含一家虚构管道公司的随机生成的发票。
前提条件
此 Codelab 基于其他 Document AI Codelab 中介绍的内容。
建议您先完成以下 Codelab,然后再继续。
- 使用 Document AI 进行光学字符识别 (OCR) (Python)
- 使用 Document AI 解析表单 (Python)
- 使用 Document AI 专用处理器 (Python)
- 使用 Python 管理 Document AI 处理器
- Document AI:人机协同
学习内容
- 为账单解析器处理器配置自训练。
- 使用注释工具为 Document AI 训练数据添加标签。
- 训练新模型版本。
- 评估新模型版本的准确率。
所需条件
2. 准备工作
本 Codelab 假定您已完成入门 Codelab 中列出的 Document AI 设置步骤。
请先完成以下步骤,然后再继续操作:
3. 创建处理器
您需要先创建一个账单解析器处理器,以便在本实验中使用。
- 在控制台中,前往 Document AI 概览页面。

- 点击创建处理器,向下滚动到专用(或者在搜索栏中输入“账单解析器”),然后选择账单解析器。

- 将其命名为
codelab-invoice-uptraining(或您能记住的其他名称)并从列表中选择距离最近的区域。

- 点击创建以创建处理器。然后,您应该会看到“处理器概览”页面。

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 文件导入我们的数据集。
- 点击导入文档

- 我们提供了一个示例 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。

- 切换到“边界框”工具。突出显示文本“Knuckle Couplers”,然后分配标签
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. 将文档分配给训练集
您现在应该会返回到数据集管理控制台。请注意,已加标签和未加标签的文档数量以及有效标签的数量都已发生变化。

- 我们需要将此文档分配给“训练”集或“测试”集。点击相应凭证。

- 点击分配给集合,然后点击训练。

- 请注意,数据拆分数量已发生变化。

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. 修改标签
我们在此示例中使用的示例文档不包含账单解析器支持的所有标签。在训练之前,我们需要将不使用的标签标记为无效。您还可以按照类似的步骤在增量训练之前添加自定义标签。
- 点击左下角的管理标签。

- 您现在应该位于标签管理控制台中。

- 使用复选框和停用/启用按钮,仅将以下标签标记为已启用。
currencydue_dateinvoice_idline_item/amountline_item/descriptionline_item/quantityline_item/unit_pricenet_amountsupplier_addresssupplier_nametotal_amounttotal_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 文件。此文档是一个未包含在训练集或测试集中的示例文档。
- 点击上传测试文档,然后选择 PDF 文件。

- 提取的实体应如下所示。

13. 总结
恭喜!您已成功使用 Document AI 追加训练了账单解析器。现在,您可以像使用任何特殊处理器一样,使用此处理器解析账单。
您可以参阅特殊处理器 Codelab,了解如何对处理响应进行处理。
清理
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请执行以下操作:
- 在 Cloud Console 中,转到管理资源页面。
- 在项目列表中,选择您的项目,然后点击“删除”。
- 在对话框中输入项目 ID,然后点击“关停”以删除项目。
资源
- Document AI Workbench 文档
- 文档的未来发展 - YouTube 播放列表
- Document AI 文档
- Document AI Python 客户端库
- Document AI 示例
许可
此作品已获得 Creative Commons Attribution 2.0 通用许可授权。