使用示例标记工具训练自定义模型

此内容适用于:Document Intelligence v2.1 checkmarkv2.1

提示

本文将文档智能 REST API 与示例标记工具结合使用,通过手动标记的数据训练自定义模型。

先决条件

完成此项目需要以下资源:

  • Azure 订阅 - 创建试用订阅
  • 拥有 Azure 订阅后,请在 Azure 门户中创建文档智能资源 以获取你的密钥和终结点。 部署后,选择”转到资源”。
    • 需要从创建的资源获取密钥和终结点,以便将应用程序连接到文档智能 API。 稍后需要在本快速入门中将密钥和终结点粘贴到代码中。
    • 可以使用免费定价层 (F0) 试用该服务,然后再升级到付费层进行生产。
  • 至少有六个相同类型的表单。 使用此数据训练模型并测试表单。 对于此快速入门,可使用示例数据集(下载并提取 sample_data.zip)。 将训练文件上传到标准性能层 Azure 存储帐户中 blob 存储容器的根目录。

创建文档智能资源

转到 Azure 门户并创建新的文档智能资源。 在“创建”窗格中提供以下信息:

项目详细信息 说明
订阅 选择已被授予访问权限的 Azure 订阅。
资源组 包含你的资源的 Azure 资源组。 可以创建新组或将其添加到预先存在的组。
区域 Azure AI 服务资源的位置。 不同位置可能会导致延迟,但不会影响资源的运行时可用性。
名称 资源的描述性名称。 建议使用描述性名称,例如“MyNameFormRecognizer”。
定价层 资源的费用取决于所选的定价层和使用情况。 有关详细信息,请参阅 API 定价详细信息
查看 + 创建 选择“查看 + 创建”按钮,在 Azure 门户上部署资源。

检索密钥和终结点

文档智能资源完成部署以后,请在门户的“所有资源”列表中找到并选中它。 你的密钥和终结点将位于资源的“密钥和终结点”页的“资源管理”下。 请先将它们保存到临时位置,然后继续。

试试看

在线试用文档智能示例标记工具

你需要一个 Azure 订阅(创建一个用于试用的订阅)以及一个文档智能资源终结点和密钥,以试用文档智能服务。

设置示例标记工具

注意

如果存储数据位于 VNet 或防火墙后,则必须在 VNet 或防火墙后部署文档智能示例标记工具,并通过创建系统分配的托管标识来授予访问权限。

使用 Docker 引擎来运行示例标记工具。 请按以下步骤设置 Docker 容器。 有关 Docker 和容器的基础知识,请参阅 Docker 概述

提示

OCR 窗体标签工具也可用作 GitHub 上的开源项目。 该工具是使用 React + Redux 生成的 TypeScript Web 应用程序。 若要了解详细信息或进行参与,请参阅 OCR 窗体标记工具存储库。 若要在线试用该工具,请转到文档智能示例标签工具网站

  1. 首先,在主计算机上安装 Docker。 本指南介绍如何将本地计算机用作主机。 若要在 Azure 中使用 Docker 托管服务,请参阅部署示例标记工具操作指南。

    主计算机必须满足以下硬件要求:

    容器 最小值 建议
    示例标记工具 2 核,4 GB 内存 4 核,8 GB 内存

    按照适用于所用操作系统的说明在计算机上安装 Docker:

  2. 通过 docker pull 命令获取示例标记工具容器。

     docker pull mcr.microsoft.com/azure-cognitive-services/custom-form/labeltool:latest-2.1
    
  3. 现在,已准备好通过 docker run 运行容器。

     docker run -it -p 3000:80 mcr.microsoft.com/azure-cognitive-services/custom-form/labeltool:latest-2.1 eula=accept
    

    此命令使示例标记工具可通过 Web 浏览器提供。 转到 http://localhost:3000

注意

你还可以使用文档智能 REST API 来标记文档和训练模型。 若要使用 REST API 进行训练和分析,请参阅使用 REST API 和 Python 通过标签进行训练

设置输入数据

首先,请确保所有训练文档的格式相同。 如果有多种格式的表单,请根据通用格式将它们组织到子文件夹中。 训练时,需要将 API 定向到子文件夹。

配置跨域资源共享 (CORS)

对存储帐户启用 CORS。 在 Azure 门户中选择你的存储帐户,然后在左侧窗格中选择“CORS”选项卡。 在底部行上,填写以下值。 选择顶部的“保存”。

  • 允许的来源 = *
  • 允许的方法 = [全选]
  • 允许的标头 = *
  • 公开的标头 = *
  • 最长时间 = 200

CORS setup in the Azure portal

连接到示例标记工具

示例标记工具将连接到源(上传的原始表单)和目标(创建的标签和输出数据)。

可以在项目之间设置和共享连接。 它们使用可扩展的提供程序模型,因此你可以轻松地添加新的源/目标提供程序。

若要创建新连接,请在左侧导航栏中选择“新建连接”(插头)图标。

在字段中填写以下值:

  • 显示名称 - 连接显示名称。

  • 说明 - 项目说明。

  • SAS URL - Azure Blob 存储容器的共享访问签名 (SAS) URL。 若要检索自定义模型训练数据的 SAS URL,请在 Azure 门户中转到你的存储资源。 导航到你的容器,右键单击并选择“生成 SAS”。 请务必获取容器的 SAS,而不是存储帐户本身的。 确保选中“读取”、“写入”、“删除”和“列出”权限,然后单击“生成 SAS 令牌和 URL”。 然后将“URL”部分中的值复制到临时位置。 它应当采用 https://<storage account>.blob.core.chinacloudapi.cn/<container name>?<SAS value> 形式。

    SAS URL retrieval

Connection settings of Sample Labeling tool.

创建新项目

在示例标记工具中,项目会存储你的配置和设置。 创建新项目并在字段中填写以下值:

  • 显示名称 - 项目显示名称
  • 安全令牌 - 某些项目设置可以包含敏感值,例如密钥或其他共享机密。 每个项目都会生成一个安全令牌,可用于加密/解密敏感项目设置。 可以在左侧导航栏底部选择齿轮图标,然后在“应用程序设置”中找到安全令牌。
  • 源连接 - 上一步中创建的、用于此项目的 Azure Blob 存储连接。
  • 文件夹路径 -(可选)如果源表单位于 blob 容器上的某个文件夹中,请在此处指定文件夹名称
  • 文档智能服务 URL - 文档智能终结点 URL。
  • 密钥 - 文档智能密钥。
  • 说明 -(可选)项目说明

New project page on Sample Labeling tool.

标记表单

创建或打开项目时,会打开主标记编辑器窗口。 标记编辑器由三部分组成:

  • 一个可调整大小的 v3.0 窗格,其中包含源连接中的可滚动表单列表。
  • 可以应用标记的主编辑器窗格。
  • 通过标记编辑器窗格,用户可以修改、锁定、重新排序和删除标记。

标识文本和标签

在左侧窗格中选择“对未访问的文档运行布局”,以获取每个文档的文本和表布局信息。 标记工具将在每个文本元素周围绘制边界框。

标记工具还将显示已自动提取的表。 选择文档左侧的表/网格图标可查看提取的表。 在本快速入门中,由于表内容是自动提取的,因此我们不会对表内容进行标记,而是依靠自动提取。

Table visualization in Sample Labeling tool.

在 v2.1 中,如果训练文档中有某个值未填写,可以在该值的输入位置绘制一个框。 使用窗口左上角的“绘制区域”使该区域可供标记。

将标签应用于文本

接下来创建标记(标签),并将其应用到希望模型分析的文本元素。

  1. 首先,使用标记编辑器窗格创建要识别的标记。
    1. 选择 + 创建新标记。
    2. 输入标记名称。
    3. 按 Enter 保存标记。
  2. 在主编辑器中,从突出显示的文本元素或绘制的区域中选择字词。
  3. 选择要应用的标记,或按相应的键盘键。 数字键已分配为前 10 个标记的热键。 可以使用标记编辑器窗格中的向上和向下箭头图标对标记进行重新排序。
  4. 按照这些步骤标记至少五种形式。

    提示

    在标记窗体时,请记住以下提示:

    • 只能将一个标记应用到所选的每个文本元素。
    • 每页只能应用每个标记一次。 如果某个值多次显示在同一窗体中,将为每个实例创建不同的标记。 例如:“invoice# 1”、“invoice# 2”等。
    • 标记不能跨页。
    • 按照值在窗体中的显示方式标记值;不要尝试使用两个不同的标记将值拆分为两个部分。 例如,即使某个地址字段跨越多行,也应使用单个标记对其进行标记。
    • 不要在标记的字段中包含键 — 仅包含值。
    • 系统应自动检测表数据,最终的输出 JSON 文件中将提供这些数据。 但是,如果模型无法检测所有表数据,你也可以手动标记这些字段。 使用不同的标签标记表中的每个单元格。 如果窗体中的表包含不同的行数,请确保使用可能最大的表标记至少一个窗体。
    • 使用 + 右侧的按钮搜索、重命名、重新排序和删除标记。
    • 若要在不删除标记本身的情况下删除已应用的标记,请在文档视图上选择带标记的矩形,并按 Delete 键。

Main editor window of Sample Labeling tool.

指定标记值类型

可以设置每个标记的预期数据类型。 打开标记右侧的上下文菜单,然后从菜单中选择一个类型。 此功能可让检测算法做出假设,从而提高文本检测准确度。 它还确保在最终 JSON 输出中以标准格式返回检测到的值。 值类型信息保存在与标签文件位于相同路径的 fields.json 文件中。

Value type selection with Sample Labeling tool

目前支持以下值类型和变体:

  • string

    • default、no-whitespacesalphanumeric
  • number

    • default、currency
    • 格式已设置为浮点值。
    • 示例:输出时将文档上的 1234.98 格式设置为 1234.98
  • date

    • default、dmymdyymd
  • time

  • integer

    • 格式已设置为整数值。
    • 示例:输出时将文档上的 1234.98 格式设置为 123498。
  • selectionMark

注意

请参阅以下日期格式设置规则:

必须指定格式(dmymdyymd)以使日期格式生效。

以下字符可用作日期分隔符:, - / . \。 空格不能用作分隔符。 例如:

  • 01,01,2020
  • 01-01-2020
  • 01/01/2020

日和月可以分别写成一位或两位数,年可以写成两位数或四位数:

  • 1-1-2020
  • 1-01-20

如果日期字符串具有 8 位数,则分隔符是可选的:

  • 01012020
  • 01 01 2020

月份也可以写成它的全称或简称。 如果使用名称,则分隔符为可选。 但是,这种格式的识别可能不如其他格式准确。

  • 01/1 月/2020
  • 01Jan2020
  • 2020 Jan 01

标签表(仅适用于 v2.1)

有时,将数据标记为表可能比标记为键值对更好。 在这种情况下,可以通过选择“添加新表标记”来创建表标记。 根据文档指定该表包含固定还是可变的行数,并定义架构。

Configuring a table tag.

定义表标记后,标记单元格值。

Labeling a table.

训练自定义模型

在左侧窗格中选择“训练”图标打开“训练”页。 然后选择“训练”按钮开始训练模型。 训练过程完成后,你将看到以下信息:

  • 模型 ID - 已创建和训练的模型的 ID。 每个训练调用都将创建一个具有自己的 ID 的新模型。 将此字符串复制到安全位置;如果要通过 REST API客户端库指南进行预测调用,则需要使用此字符串。
  • 平均准确度 - 模型的平均准确性。 可以添加和标记更多表单,然后重新训练以创建新的模型,从而提高模型准确度。 建议首先标记五个表单,然后根据需要添加更多表单。
  • 标记列表,以及每个标记的估计准确度。

Training view.

训练完成后,检查“平均准确度”值。 如果该值较低,应添加更多输入文档,并重复标记步骤。 已标记的文档将保留在项目索引中。

提示

还可以使用 REST API 调用来运行训练过程。 若要了解如何执行此操作,请参阅使用 Python 通过标签进行训练

组合已训练的模型

通过模型组合,最多可将 200 个模型组合到一个模型 ID。 使用组合的 modelID 调用“分析”时,文档智能服务会对提交的表单进行分类、选择最佳匹配模型,然后返回该模型的结果。 当传入的表单可能属于多个模板中的一个模板时,此操作非常有用。

  • 若要在示例标记工具中组合模型,请选择导航栏中的“模型组合”(合并箭头)图标。
  • 选择要组合在一起的模型。 带有箭头图标的模型是已组合的模型。
  • 选择“组合”按钮。 在弹出窗口中,为新的组合模型命名,然后选择“组合”。
  • 操作完成后,新组合的模型应会出现在列表中。

Model compose UX view.

分析表单

从导航栏中选择“分析”图标以测试模型。 选择源本地文件。 浏览该文件,然后从你在测试文件夹中解压缩的示例数据集中选择一个文件。 再选择“运行分析”按钮,获取表单的键/值对、文本和表预测值。 该工具在边界框中应用标记,并报告每个标记的置信度。

Screenshot of analyze-a-custom-form window

提示

还可以通过 REST 调用运行分析 API。 若要了解如何执行此操作,请参阅使用 Python 通过标签进行训练

改进结果

可能需要执行进一步的训练来改进模型,具体取决于报告的准确度。 完成预测后,检查每个已应用标记的置信度值。 如果平均准确度训练值较高,但置信度分数较低(或结果不准确),请将预测文件添加到训练集,标记该文件,然后再次训练。

如果分析的文档不同于训练中使用的文档,则报告的平均准确度、置信度分数和实际准确度可能不一致。 请记住,用户查看某些文档时,虽然看起来很相似,但在 AI 模型中却有明显的区别。 例如,你可以使用具有两种变体的表单类型进行训练,其中训练集由 20% 变体 A 和 80% 变体 B 组成。在预测过程中,变体 A 文档的置信度分数可能会较低。

保存项目并在稍后恢复

若要在其他时间或在另一个浏览器中恢复项目,需要保存项目的安全令牌,稍后再重新输入。

获取项目凭据

转到项目设置页(滑块图标),并记下安全令牌名称。 然后,转到应用程序设置(齿轮图标),其中显示了当前浏览器实例中的所有安全令牌。 查找项目的安全令牌,并将其名称和密钥值复制到一个安全位置。

还原项目凭据

若要恢复项目,首先需要创建到同一 blob 存储容器的连接。 为此,请重复这些步骤。 然后,转到应用程序设置页(齿轮图标),查看项目的安全令牌是否存在。 如果没有,请添加一个新的安全令牌,并复制上一步中的令牌名称和密钥。 选择“保存”以重新训练设置。

恢复项目

最后,转到主页(房子图标),然后选择“打开云项目”。 然后选择 Blob 存储连接,并选择项目的 .fott 文件。 应用程序加载项目的所有设置,因为它具有安全令牌。

后续步骤

本快速入门介绍了如何使用文档智能示例标记工具通过手动标记的数据来训练模型。 如果要构建自己的实用工具来标记训练数据,请使用用于处理标记数据训练的 REST API。