在以前的文章,我们研究了Turnitin面临的全页手写识别(Full Page手写识别)问题,注意到它的范围远远大于经典手写文本识别(HTR),以及解决它的典型方法的局限性。在这篇文章中,我们将展示我们的方法以及我们创建和部署的AI模型来解决这个问题。
模型架构
鉴于我们在前一篇文章中提到的问题(并且之前已经用经典方法开发了一个系统),我们设计了一个新的神经网络(深度学习)模型,接收图像并发出文本。从图像到转录的所有步骤都不是手工完成的;模型通过机器学习.调整模型以适应新数据集或添加新功能,只是使用不同的标签或不同的数据进行再培训或微调的问题。
图2显示了我们的神经网络架构。它由一个卷积神经基于网络的编码器和一个变压器的译码器.这种端到端机器学习(ML)方法的主要优势是,它是完全数据驱动的,因此,通过使用不同的数据集和/或目标对模型进行再训练,可以很容易地改变模型。例如,我们可以添加新的语言、新的辅助任务,甚至新的文本类型,如数学标记(Latex)。
这种架构的另一个优势是,它借鉴了通用人工智能领域的想法,而不是定制的HTR解决方案。这些想法同样适用于不同的模式和领域(视觉、NLP、语音、视频、基因组学等),从而使这种设计在未来的应用中更有弹性。它是使用PyTorch.对于那些感兴趣的人,我们的研究论文提供了详细信息(获取预印本)在这里).
训练数据
不用说,对于像我们这样的端到端ML模型,训练数据是至关重要的—具体地说,模型需要根据服务中预期的数据进行训练。
数据标签
我们已经从之前的模型中标记了单线作物,但这对于端到端模型来说是不够的。我们需要标记完整的文本段落(图片),不仅仅是它们的文本转录,还包括所有额外的语义标记。因此,我们执行了一个小项目,以获得适当的注释图像。我们对模型预计会遇到的图像进行了全面的分析,并提出了一套标注规则/准则。此外,还开发了一个web应用程序来实现上述注释工作。图3显示了一个示例注释。
合成数据
手写数据增强与综合生成的图像,我们创建的随机跨度从维基百科的文本使用100 +字体。这些示例在图像大小、文本长度、方向、文本对齐和画布上的位置等方面有所不同。字体是印刷体和草体的混合。虽然这个数据集训练模型识别打印字体,但它也通过将模型暴露给手写数据中不存在的新主题(可能是语言),增强了模型的语言技能。例如,如果我们想提高模型在化学术语上的性能,我们不需要寻找标记的化学文本图像数据集;相反,我们可以用化学文本增强WikiText数据并重新训练模型。该模型将学习从现有的非化学笔迹数据中识别笔迹,但将学习化学单词以及它们如何在句子中使用语言模型)。
动态管道
我们最终将合成数据集与三个我们从Gradescope提交的注释数据集结合起来。此外,由于手写数据稀缺,我们通过将短长度文本的图像拼接到段落中来人为地增加手写数据。因此,我们的大部分训练图像最终都是动态构建的,而不是从静态数据集中挑选的。这显著地增加了整体数据集的大小,显著地提高了模型对未见数据的性能,即,泛化;1在某些情况下甚至是至关重要的。我们也表演各种各样的图像对应-失真和噪声的增加-同样,为了增加模型在训练中看到的例子的多样性。广义上来说,这属于正则化技术.最后,我们在飞行中创建每个训练小批,从所有可能的数据变化和增强中随机取样。这使得训练梯度在每一步都尽可能的“真实”。该模型使用PyTorch需要花几天时间在8个gpu上学习。
结论
我们的模型在性能上超过了所有主要供应商提供的文本识别云API(我们在Gradescope数据上的错误率是7.6%,而最佳可用API的错误率是14.4%)。我们还将它与发布的最新结果进行了比较,据我们所知,它是目前最著名的全页手写识别模型(我们在一个常用的学术挑战数据集上的错误率称为我是目前整个页面识别模型的6.3%,而不是16.2%)。在我们的研究论文.也就是说,只有错误率降到1%以下,我们才认为问题完全解决了。研究界还有更多的工作要做。
我们的工作并不仅仅是部署模型。一旦部署和处理了新的用户数据(从定义上讲,这些数据是我们以前从未见过的),我们就必须关注它的性能,并对出现问题的迹象保持警惕。这将是一篇即将发表的关于机器学习监测的博客文章的主题,机器学习监测是人工智能产品开发的一部分,在很大程度上被低估和开发不足。
脚注
- 泛化是模型适当地适应新的、以前未见过的数据的能力。这是一个至关重要的能力,因为模型只有在投入生产时才会遇到看不见的数据。