陈颂光
全栈工程师,能够独立开发从解释器到网站和桌面/移动端应用的各类软件。
关注我的 GitHub

从CROHME 2023看手写数学公式识别在过去四年的发展

联机手写数学公式识别竞赛(Competition on Recognition of Handwritten Mathematical Expressions,CROHME)一直是公式识别领域认受性最高的评测平台。作为文档分析与识别国际会议(International Conference on Document Analysis and Recognition,ICDAR)的一部分,2023年这个竞赛继2011-2014、2016和2019年后再度举办。作为本届的其中一个参赛者,我有幸在全部三个任务上夺冠,现在是时候总结一下本次参赛的经验,并展望手写公式识别领域的前景。

竞赛结果

竞赛结果已经在官网公布。各参赛队伍的成绩如下:

CROHME 2023测试集上各参赛队伍的表现

为了与上一届竞赛各参赛队伍和近年发现论文中的结果对比,这里也列出各参赛队伍在上一届测试集上的成绩:

CROHME 2019测试集上各参赛队伍的表现

联机手写识别与脱机手写识别相比仍然有显著优势

在CROHME 2023中联机任务的最高准确率达到82.34%,而脱机任务的最高准确率却只有70.81%,差距超过11.5%。可见,联机手写识别与脱机手写识别相比仍然有非常显著的优势。不过,双模态任务的最高准确率达到84.12%,说明现有分别针对两个模态的方法仍然有互补性,但要利用好也不是直截了当的,亚军队伍就似乎在双模态任务上完全放弃脱机输入,使得它在联机任务和双模态任务上准确率完全相同。更重要的是,联机手写公式识别的准确率在过去四年间仍然在攀升,在CROHME 2019测试集上,最高准确率从80.73%大幅提升到88.24%,本届竞赛的前两名的表现都明显优于上届前三名共同的水平。相反,脱机手写公式识别的最高准确率只从77.15%轻微提升到77.83%。这说明,脱机手写识别可能已经到达一个瓶颈,不容易再取得突破。可惜的是,上届前三名科大讯飞、三星和MyScript都没有参加本届竞赛,未能知晓他们的近况。

与脱机手写识别(光学字符识别,OCR)相比,联机手写识别有时间维度的额外信息可用,而且排除了大部分的背景噪声。在CROHME 2019中,图片都是根据轨迹简单地渲染出来的,背景是干净的纯白而前景是干净的纯黑,在这个条件下,联机与脱机识别的准确率差距还不太明显。在该竞赛中,在两项任务均夺冠的科大讯飞的系统在联机和脱机任务的识别率分别为80.73%和77.15%,差距不到4个百分点。事实上,只要设计一个基于规则的笔画提取算法,并用提取出的笔画去训练一个联机手写识别系统,就能轻易得到一个准确率超过75%的脱机手写识别系统。即使直接调用现成的联机手写识别系统,也可以得到65.22%的准确率。在2020年的脱机手写数学公式识别与定位竞赛(Competition on Offline Recognition and Spotting of Handwritten Mathematical Expressions,OffRaSHME) 竞赛中,图片背景仍然相当干净,但前景的笔画已经有粗细和浓淡等变化,这时科大讯飞的脱机手写数学公式识别系统已经达到79.85%的准确率,而基于笔画提取的方法只有61.35%的准确率(后面可以改进到65%左右)。到了CROHME 2023,背景也不再是纯色的,同时带有一些噪声,这时基于笔画提取方法的预估准确率已经掉到45%左右。按照这个趋势,当面对通过拍照获得的图片时,脱机手写识别的准确率还会进一步下降,而且还会面临公式检测与定位的额外困难。这表明,联机手写识别的准确率优势主要源于较低水平的背景噪声,时间信息反而是次要的。

本届新增样本更具挑战性

近年,在脱机手写识别方面,出现了HME100k和MLHME38k等更真实和具挑战性的数据集。本届CROHME的数据集也同样变得更有挑战性了,反映在各参赛系统在2023年的测试集的准确率明显低于它们在2019测试集上的表现。

每一届CROHME竞赛都会扩充前一届的训练集的并提供全新的测试集。与CROHME 2019相比,联机手写公式训练集增加了:

  • 来自CROHME 2014测试集(同时是CROHME 2019的检验集)的986条公式。
  • 由东京农工大学合成约15万条公式。这些公式大幅增加了公式的多样性,但不少样本看起来很奇怪,例如许多减号非常宽(估计是由于按符号高度做规范化造成的)。
  • 由南特大学和东京农工大学1045条新收集的联机手写公式。

检验集则由CROHME 2016测试集的1147条公式和555条新收集公式组成。测试集由2354条新收集公式组成。

从上一届首次设立脱机识别任务时,全部图片都是通过直接渲染轨迹得到的,本届则增加了一些更真实的扫描数据。脱机手写公式训练集:

  • OffRaSHME训练集中的10,000条公式。
  • 1604条扫描的公式。与之前的样本相比,这些图片是彩色的且背景带有明显的噪点/线。
  • 1045条新收集的与联机手写公式配对的扫描公式。这些图片是彩色的且背景不再全是白色的。

检验集则由CROHME 2016测试集的1147条公式和555条新收集公式组成。测试集由2354条新收集公式组成。

不过,这些新增样本似乎是先有LaTeX标注再转换为LG和SymLG等格式的,一度造成与过往的数据集的众多不一致性,而这些不一致性足以大幅影响评价指标(超过10个百分点)。

  • LaTeX到LG/SymLG的工具会把多位数看作单个符号并对部分根式产生多余的Inside关系。在提醒主办方后,他们迅速地修正了该问题,但Inside关系的问题回归了至少两次,有一次甚至出现在开放提交结果后。
  • 未能区分subscript和underscript。在提醒主办方后,他们决定手动重新标注数据,最终导致正式竞赛日期推迟了约半个月。
  • 一些INKML中小于号没有转义,导致不能使用的XML解析器解析。虽然在提醒主办方后,他们修正了该问题,但这类问题揭露了他们企图通过拼接方式来生成XML,而正确的方式应该是使用成熟的XML库而应该避免把XML当作字符串来处理。
  • 新增样本不再提供笔画与符号间可靠的对应关系。过往INKML文件的MathML标注容许笔画级引用对应的符号,但新收集的样本不再提供MathML标注。部分合成的样本在INKML中提供了traceGroup标签,但无效笔画ID引用、未被引用的笔画ID和其它标注错误层出不穷,而且在同一符号在公式中出现多次时也无法区分它们。LG文件也存在大量无效引用和非树结构。原则上,通过规则合成的公式理应可以自动生成准确的对应关系,但可惜主办方最终决定移除合成样本的所有traceGroup标注,并任由LG文件继续出错。
  • 1604条扫描的公式中大约10%与INKML文件对不上,但主办方决定抛弃有关样本而未有修正对应。 虽然在我向主办方指出了这些明显的问题,他们均积极处理,最终基本上确保了训练集、检验集和测试集标注的一致性,但这反映了当前这个领域的一个通病,就是对数据缺乏敏感性,无论是竞赛组织者还是其它参赛者都没有仔细检查数据。

在联机识别任务上,亚军视源中央研究院在CROHME 2019测试集上的准确率只比我们低不到4个百分点,但在CROHME 2023测试集上的准确率却比我们低近10个百分点,有点怀疑他们在某种程度上把CROHME 2019当作了检验集,导致过拟合了该数据集。在某种意义下,在CROHME 2023测试集上,笔顺的相对重要性更高。在脱机识别任务上,许多数学公式都只占新收集的图片中的一小部分,在没有公式检测的情况下,多余的背景区域可能会影响某些算法。

相关研究文献没有的充分重视数据增广

过去四年间,端到端可训练的编码器-解码器神经网络已经成为识别公式的绝对主流方法。文献中提出了各式各样的方法去提高准确率:

  • 修改网络结构。
    • 使用Transformer的解码器。堆叠带多头注意力机制的层可以更好地发现长距离依赖关系,不过计算量一般会较大,而且更容易过度拟合。
    • 使用树解码器。由于数学公式可以自然地被看作树,这种方法企图让神经网络更直接地输出树状结构,例如每一步预测一个节点的类型、它的父节点和两个节点间的关系。
    • 使用图编码器。这种方法的基本思想是把每条笔画看作图中的一个顶点,而把有可能属于同一或有关系符号的笔画对应的顶点用边连接,于是就能用图神经网络去提取顶点和边的特征。不过,这种建模在存在符号间连笔时并不合理,而且难以改造成能识别真实场景的图片。
  • 使用辅助的损失函数。
    • 引导采样点/像素与输出符号间的对应。这方法可以使注意力机制更精确,但要求训练数据标注各个符号的位置。
    • 引导各符号的存在性甚至出现次数。这方法也可以让编码器提取出能更直接地用于分类的信息,从而加速收敛。
  • 增加语言模型。
    • 生成式语言模型。它们的常见的用法是在解码过程中结合识别模型和语言模型分别给出的置信度,或者用语言模型对多个候选公式分别打分(例如语言困惑度)再重新排序。不过,自回归的解码器本身就隐含地包含了语言模型,外加额外语言模型的效果似乎并不明显。
      • 使用基于n-gram的语言模型。
      • 使用基于RNN的语言模型。
      • 使用基于Transformer的语言模型。
    • 形式语言模型。在解码过程中可以确保输出严格符合人手设计的上下文无关语法,例如解析LL(1)语法的语法分析就可以与序列到序列模型的集束搜索解码过程无缝结合。这类语言模型可以防止出现不合法的识别结果(例如序列到序列模型不时会产生花括号不匹配的LaTeX代码),方便在运行期定制识别范围,但对提高总体识别率的作用也不大。
  • 数据增广。
    • 局部和整体的几何形变。这种方法可以提高模型对输入的鲁棒性,但未能生成整体结构不同的公式。
    • 分解。这种方法可以改善模型对递归结构的理解,但子公式的数量和形式还是有比较大的局限性。
    • 随机替换手写样本中符号为其它符号。这种做法可以加强模型区分不同符号的能力,但未能生成整体结构不同的公式,同时会弱化语言模型。
    • 利用印刷体样本。其想法是利用对比学习或对抗生成网络的思想来引导神经网络对配对的印刷体和手写体样本提取出相近的特征,从而让网络得益于容易自动生成大量印刷体图片。这方法可以用于打造同时适用于印刷体和脱机手写体的公式识别系统,但对联机手写识别来说不够直接。

在我看来大部分公式识别领域的论文都侧重于小样本泛化能力,但通过数据增广来扩大训练集似乎是更可取的方向。同时文献中的方法缺乏正交性,十多种方法都声称可以把公式识别的准确率从45%提高到55%,但我自己的发现是结合多种技巧往往不能产生明显的叠加效果。

我的经验是,基于语料合成相应的轨迹/图片是提高公式识别准确率的最有效方法,这种方法不但可以让模型的训练期间接触到更多内容不同的公式,而且能加强隐含的语言模型(通过使用随机生成的语料也可以反过来用来削弱语言模型),并且适用于各种网络结构,又不会增加推理时的计算量或部署难度。粗暴的合成工具和公开的数据集足以把单模型准确率从50%推进到80%。在生产环境中,这方法有助于扩展支持的数学符号和结构清单。相对而言,网络结构反而似乎不是关键。

从手写识别技术到成功的产品仍然有一段距离

竞赛固然能够在相对公平的条件下对比不同队伍的技术实力,但竞赛与产品有着不尽相同的要求,让公式识别对大众实用才能体现其价值。竞赛只关注准确性,但部署(特别是端侧部署)时对速度、内存占用和模型体积等方面是有要求的。在竞赛中,我们可以通过集成多个较大且非量化的模型来用资源占用换准确率;在产品中,我们需要在两者之间选取一个平衡点。此外,CROHME竞赛只涉及不到一百个符号,而且没有矩阵和帽子等常用的结构,数学公式识别系统产品往往还需要支持更多的符号和结构,其中不少是容易与其它符号混淆的。

由于公式识别不太可能做到完全准确,一个协助用户在短时间内发现并修正识别错误机制是重要的。除了可以用常规的公式编辑器编辑识别结果外,还可以利用识别系统提供的信息,比如说,许多数学公式识别系统都能给出公式级和字符级的候选。一个前一候选正确率为80%左右的识别系统的前四候选正确率很可能接近于90%左右,这说明只要向用户提供四个候选,用户就能一键修正大约一半识别错误的公式。如果容许用户通过长按/右键/手势之类的方式把公式中的字符改成其它候选字符的话,能修正的错误比例还会更高。此外,通过用不同颜色显示置信度偏低的公式或符号,也可能可协助用户更有效地发现识别错误。

不少应用场景下不仅要知道用户写的公式是什么,还需要知道各个符号的位置以支持一些编辑和搜索功能。传统的数学公式识别系统一般会生成大量可能可把公式切割成符号集合的切分方式,然后结合符号分类器、关系分类器和语言模型去选取最佳的识别结果,因而一般能比较可靠地给出输入笔画与输出符号间的对应关系。虽然近年端到端可训练的神经网络极大地降低了做公式识别的门槛,只要标注足够的样本就能开发出一个看起来还行的系统,不需要具备扎实的计算机理论知识和编程功底,但这类方法不能显式生成对应关系。虽然也有人尝试让端到端系统生成对应关系,例如我们的系统在预测一个符号时也会预测各采样点属于它的可能性,并且取得了一定的效果,在超过90%识别对的公式中符号与笔画的对应关系也全对,但输出的对应关系仍然不像传统方法那样可靠。

数学公式难以输入的问题长期以来为人诟病,期望手写有一天能成为解决这个问题的工具之一。

关键词 文档分析