image

步骤概述

定制的 OCR 解决方案提供了在文档或图像中定义唯一类别的功能。通过与各种客户合作开发定制 OCR 解决方案,我们经常听到这样的问题:“此解决方案在我的数据上表现如何?我们开发了一种方法,允许使用表单识别器工作室根据自定义数据对 Microsoft 的表单识别器进行基准测试,并在一个过程中使用基本事实批注训练自定义模型。

使用表单识别器工作室批注基本事实

在训练自定义表单识别器模型之前,必须具有标记或批注的数据集,也称为基本事实。为了提供注释过程的示例,我们创建了一个扫描的手写邮政地址的示例图像。真实名称为“John Doe”,地址为“000 Fifth Ave, NY 10065, USA”,如下图所示:

image2

步骤 1:定义范围内的字段。这取决于您的特定应用。在我们的玩具图像示例中,我们预先定义了 3 个字段:“名称”、“地址”和“Missed”(包含不可识别/无法识别的内容(如果有的话)。

步骤 2:打开表单识别器工作室,选择“自定义模型”,然后创建一个新项目(按照文档中的说明填写所有必填字段,例如 Azure 订阅和存储帐户)。项目创建完成后,我们可以通过“拖放”上传我们的玩具图片。请注意,单击图像时,内置表单识别器模型将在后台自动触发 OCR 图像(通常每个图像需要 1 或 2 秒)。

image3

步骤 3:点击右上角的“+”按钮,创建预定义字段。例如,我们在场景中创建了 3 个字段,包括一个“Missed”字段来捕获丢失/非 OCR 的内容。

image4

步骤 4:通过将相关的 OCR 内容分配给关联字段来开始注释图像。例如,我们将“John Doe”分配给提交的“名称”,方法是将鼠标悬停在相关字符上:

image5

同时,会在 Blob 容器中自动创建一个 JSON 文件,以动态反映批注进度。此文件将我们的注释结果捕获为标签值对。可以使用 Azure 存储资源管理器查找和编辑此文件

image6

步骤 5(可选):更正错误的 OCR 字段和遗漏的内容(如果有)。

更正错误的 OCR 字段。在我们的示例中,OCR识别的邮政编码是“…, NY 6005, …”,而事实为 “…, NY 10065, …”,如下面的蓝色条突出显示:

image7

在这种情况下,我们需要手动更正“地址”字段中的邮政编码:

  1. 在 Azure 存储资源管理器中,转到存储上传图像的 Blob 容器。
  2. 单击带有“…labels.json“扩展名。
  3. 按“编辑”按钮,导航到错误的OCR字段/标签“地址”,手动将“6005”替换为“10065”,然后单击“保存”按钮以触发更新。

以下屏幕截图说明了错误 OCR 方案的更正过程:

image8

更正遗漏的内容。在我们的示例中,遗漏的内容是邮政编码中的初始字符“1”,由下面的蓝色圆圈突出显示:

image9

在这种情况下,我们需要手动将其添加到“Missed”字段中:

  1. 点击左上角的“区域”按钮,在字符“1”周围画一个边界框,并将其分配给“Missed”字段,如下所示: image10

  2. 转到 Blob 容器。

  3. 单击带有“…labels.json“扩展名。

  4. 按“编辑”按钮,您会发现一个名为“Missed”的新创建标签,其中包含一个空的“文本”字段。接下来,您需要手动插入字符“1”作为其值,然后单击“保存”按钮以触发更新

以下屏幕截图说明了丢失内容方案的更正过程:

image11

我们更正了错误的 OCR 字段和遗漏的内容,以确保注释质量(可以刷新表单识别器工作室以查看仪表板中更正的更改)。

步骤 6: 移动到下一个图像并重复注释过程(即步骤 4 或步骤 4 + 步骤 5)。

训练自定义神经表单识别器模型以识别自定义字段/实体

若要为自定义实体训练自定义神经模型(如上面的邮件示例中所示),请使用上一步中的批注。这些注释也将用于稍后的基准测试。若要开始训练,只需单击位于表单识别器工作室 API 右上角的“训练”按钮。有关将单独的模型合并为一个的详细说明,请参阅提供的文档。本文档还将介绍测试新训练的表单识别器实例的过程。请注意,如果您只需要 OCR 或通用实体,您还可以使用通用文档 API

同样重要的是要记住,在测试经过训练的表单识别器实例时,应使用不属于训练过程的文档。例如,如果您已注释了 100 个图像,请使用 80-90 个图像进行训练,其余图像用于测试。在测试图像上所做的注释可用于在下一步中测量OCR和字段/实体识别的性能。

从 Azure 存储资源管理器中提取批注项目

若要执行 OCR 基准测试,可以直接从 Azure 存储资源管理器下载输出。您可以在以下存储库下访问基准测试代码。只需将存储资源管理器中下载的数据目录粘贴到从 GitHub 下载的项目的根目录中即可。使用存储资源管理器时,订阅级别文档树可能如下所示:

image12

测量 OCR 和现场识别的性能

在本节中,我们将区分在两个级别上测量自定义表单识别器的性能:

  1. OCR 级别:表单识别器如何数字化我的文档并将图像/文档正确转换为机器可读的格式?
  2. 字段级别:表单识别器在训练后关联预定义(和标记)字段/类别的程度如何?

用于回答这些问题的指标是使用 Levenshtein Distance 的单词相似性。简而言之,Levenshtein Distance 是一种衡量两个单词或短语彼此差异的方法。我们将使用 fuzzywuzzy 的实现,它为我们提供了以下间隔:

1
0 = there is no similarity between string A and B; 100 = A and B are the same word.

为了计算此指标,我们将引入一个需要以下输入的代码库:

  1. 预先标记的文件:这是将用作基本事实的文件。这些文件可以通过文件名.labels.json扩展名来识别。
  2. 表单识别器输出:这是表单识别器具有 OCR 的内容。这些文件可以通过预训练模型的文件名.ocr.json扩展名或自定义训练模型输出的png.json(或其他文件扩展名.json)来标识。
  3. 图像在 的情况下。JPEG 或.PNG文件(可选):这是在 label.json 和 ocr.json 文件之间执行动态边界框转换所必需的。

OCR 级别

您可以选择手动重新组织文件并分离图像、标签和 OCR 文件,也可以下载整个文件夹并使用存储库中提供的文件分发脚本作为模板。请注意,此模板可能需要自定义。

字段/实体级别

若要从字段/实体识别访问图像,必须首先训练自定义表单识别器模型。训练后,您可以在“测试”选项卡下找到训练好的模型。提供的图像说明了训练模型在工作室中的位置以及自定义模型输出的下载按钮的位置。您可以选择从用户界面下载文件,也可以导航到“result”旁边的代码磁贴,然后使用 IDE 通过 API 调用检索结果。

image13

提供的 README.md 文件说明了预期的输出和可能的自定义。

将您的知识付诸实践并执行基准计算

完成文件注释并在必要时训练用于字段/实体识别的自定义模型后,您可以继续评估 OCR 解决方案的性能。提供了两个 shell 文件用于执行必要的脚本,或者您可以使用提供的交互式 python 笔记本 (.ipynb) 作为计算基准的交互式方法。可以使用 Azure 机器学习工作室或首选的本地 IDE 来执行计算,前提是具有具有必要依赖项的 Python 环境。生成的输出会将预测/提取的值放在注释的地面实况旁边,可能如下所示:

Filename Entity True Value Extracted Value Confidence Score Fuzzy Score
File_1 Address 000 Fifth Avenue 000 Fifth Avenue 0.99 100
File_1 Address 156 Denison Street 15 Deni Street 0.87 88

因此,您可以检查每个带注释的单词/实体的单词相似性。还可以选择将此事务并行比较用作仪表板(如 PowerBI)的输入。