表单相关字段检测学习方法(图片格式)

Learning method for detecting relevant fields in forms (image format)

所以我一直在开发一个应用程序,用户可以在其中上传表示某种形式的(扫描的)PDF 文件,在他们感兴趣的字段周围绘制边界框,然后对这些内容进行 OCR 并以结构化文本格式返回.因为绘制边界框有点麻烦,所以我在考虑一种方法来减少用户所需的工作;即已经提供 him/her 自动检测的字段划分。我开始研究这个问题并发现了一些有趣的方法,主要基于计算机视觉算法。然而,由于这个应用程序将来可能会被频繁使用,因此用户会绘制很多边界框,所以对我来说,不尝试使用这个数据集来应用学习方法几乎是一种浪费。所以我开始查看许多不同的表格并注意到它们中的大多数都是按照这样的方式由边框构成的:

这里有几点观察:100% 填充文本的框通常不需要提取,因为它们代表 terms/conditions/disclaimers/etc。也不会请求(大部分)为空的框,因为它们大多表示不相关的字段。唯一有趣的盒子似乎是那些在 top/left 中带有标签且在盒子正文中包含一些内容的盒子。

当然也应该说,并不是每一个表单都像上面的那样有很好的边框结构。有些只在字段之间使用单一分隔边框(即水平或垂直),有时根本没有边框。

因为我们在处理图像,所以我开始研究对象识别并尝试了 YOLOv2(卷积神经网络),我在 100 种形式的数据集上训练了一晚上(我意识到这个数据集仍然太小而且自从我在 CPU 上训练以来,我也没有训练足够长的时间)。无论如何,我希望所有训练字段都有边框和一些内容这一事实能够快速帮助系统自己找到带边框的框。然而,到目前为止,结果非常令人失望(平均 loss/error = 9.6)。我开始考虑这个问题,然后意识到如果用户跳过某些边界框非常精细​​的区域,它会在学习过程中混淆神经网络,我说得对吗?

至于我的问题的其余部分:你们认为对象识别是解决问题的方法,还是考虑到这种形式的性质,它对系统来说太混乱了?如果是这样,如果我应用一些过滤器来尝试 "blur" 文本在一起,使这些框看起来更像彼此,情况是否仍然如此?或者,给定每个文档(大多数)相关框的坐标数据集,什么才是更好的学习方法?甚至可能是一种不会过多基于边界存在的方法?

请记住,我要求的唯一要求是能够使用用户绘制的边界框作为数据集来不断改进系统。

谢谢大家的宝贵时间!

关于神经网络策略,先识别一段文字可能会更有趣。这样,在给定 100 个文档的情况下,您将有更多数据可供学习。稍后,您可以学习它来识别特定的 header。如果你有文本的边界框,就很容易确定哪个文本接近所述 header。如果您想要的输出是与图像中显示的一样大的边界框,则网络将很难找到有用的信息,而不是直接包含文本的受限小框。当然,因为你的盒子是手动输入的,它的模糊性将是预测它们的准确性损失的主要来源。因此,拥有像素精确的输入也会对此有所帮助。

也可以考虑使用 version spaces 作为替代学习方法。包含特征的学习盒是其旗舰用例之一。

另一种策略是根本不使用机器学习。 Matlab 和 Octave 等数学框架有 powerful algorithms that can reduce an image to a binary single pixel wide grid of detected lines (example)。这当然需要一些额外的算法工作,当没有线条(找到垂直/水平 'cuts' 与最少的黑色像素)或部分线条时也是如此。尽管如此,结果可能比学习者更准确。