Transformers与OCR:信息提取的深入比较

2023年09月26日 由 alex 发表 560 0

简介


信息提取(IE)是一个对小型企业和初创企业尚未解决的问题。最好的现有解决方案往往对创业者来说成本过高,而开源工具往往缺乏解决这一挑战所需的质量。那么,有没有其他选择呢?


我们通过两种方式解决了这个问题:首先,开发了一个应用光学字符识别(OCR)的图像处理流水线,其次,通过对一个名为Donut的无OCR模型进行微调。最后,我们比较了这两种模型的准确性,进行了多次测试,评估了它们的优势和局限性。


什么是信息提取,为什么它很重要?


从本质上讲,信息提取(IE)是自然语言处理(NLP)的一个子领域,负责识别文本中的相关信息并将其提取到特定的输出格式中。所谓“相关信息”的概念因任务而异,但当涉及到关系提取(RE)时,可以通过以下方式概括这一挑战:1)在文本中谁是相关实体,2)它们之间的关系是什么?


以前做了什么?


现有解决方案:成本太高


通常情况下,这个任务是通过计算机视觉和自然语言处理的组合来完成的。假设皮特提供的文档之一被扫描并转换成了图像。首先,会进行文本检测阶段,以确定信息的位置,并在其周围创建文本框。接下来,OCR引擎会读取图像中每个框中的内容,并将其转换为文本。最后,一个算法(可以是OCR后处理流程或语言模型)会对提取的信息进行分类(例如,将“约翰·多伊”标记为“客户姓名”),并以所需的格式输出。


6


有商业解决方案可供选择,例如亚马逊的Textract或微软的Form Recognizer。然而,这些选项存在三个主要问题:


1. 成本:例如,亚马逊每1000页收费10美元,如果XYZ每天处理数十万甚至数百万个文件,这将成为负担。


2. 波动性:如果亚马逊提高价格,XYZ可能被迫采取同样的举措,影响其客户群和现有合同。


3. 真实性:作为一家技术公司,人们期望XYZ拥有自己的解决方案,而不仅仅是将第三方系统合并给客户使用。


开源解决方案:不可靠或过于繁重


考虑到上述问题,人们可能会想,如果我们使用开源软件并自己创建之前的解决方案的版本,会怎么样呢?毕竟,存在着开源OCR引擎(如Tesseract),应该能够提取文本。此外,还有能够接收提取出的文本并返回相关实体及其关系的LLMs,例如MPT-7B。


使用Tesseract提取文本肯定是可行的。然而,问题在于后OCR处理:LLMs占用资源较多,对于初创公司来说,存储和运行LLMs的成本可能是禁碍的。


我们发现一种有希望解决这个问题的选择是REBEL,它是基于BART的seq2seq模型,并旨在从文本中提取关系三元组。我们进行的初步测试结果是积极的:例如,当对新闻文章的摘录进行输入时,模型能够正确提取出我们预期的关系。对于如下输入:


input = "Silvia Schenker (born January 17, 1954 in Aarau, 
the capital of the canton of Aargau, Switzerland) is a Swiss 
politician. She joined the National Council of Switzerland 
(the lower house of the federal assembly) in 2003 and served 
until 2019. Schenker was a member of the Commission for Social 
Security and Health (CSSS). She is a member of the Swiss Socialist Party. 
Now a national advisor, she lives in Bâle."


我们会得到以下关系序列。


Relations:
  {'head': 'Silvia Schenker', 'type': 'date of birth', 'tail': 'January 17, 1954'}'head': 'Silvia Schenker', 'type': 'date of birth', 'tail': 'January 17, 1954'}
  {'head': 'Silvia Schenker', 'type': 'place of birth', 'tail': 'Aarau'}
  {'head': 'Silvia Schenker', 'type': 'country of citizenship', 'tail': 'Switzerland'}
  {'head': 'Aarau', 'type': 'country', 'tail': 'Switzerland'}
  {'head': 'canton', 'type': 'country', 'tail': 'Switzerland'}
  {'head': 'Aargau', 'type': 'capital', 'tail': 'Aarau'}
  {'head': 'Aargau', 'type': 'instance of', 'tail': 'canton'}
  {'head': 'Aargau', 'type': 'country', 'tail': 'Switzerland'}
  {'head': 'National Council of Switzerland', 'type': 'country', 'tail': 'Switzerland'}
  {'head': 'Swiss Socialist Party', 'type': 'country', 'tail': 'Switzerland'}
  {'head': 'federal assembly', 'type': 'country', 'tail': 'Switzerland'}


然而,没有结构的文本(如电子邮件、发票或身份证)立即成为一个问题。这是因为REBEL是根据包含上下文的文本进行训练的,这些文本包含完全结构化的句子和对主题的完整解释。而发票和电子邮件很少是那样的,因此模型提供的结果通常没有意义。对于以下的电子邮件条目,如下所示:


input = "Get in touch with below:
Name: Jane
Email: jane@gmail.com
Mobile: 510–712–456"


REBEL会返回一个错误的实体关系序列。


Relations:
  {'head': 'Jane', 'type': 'residence', 'tail': '510-712-4567'}'head': 'Jane', 'type': 'residence', 'tail': '510-712-4567'}
  {'head': 'Jane', 'type': 'work location', 'tail': '510-712-4567'}
  {'head': 'Jane', 'type': 'number of episodes', 'tail': '510-712-4567'}


问题已经被提出:像XYZ这样的公司如何有效地从文档中提取信息?


我们的方法


我们的目标是从驾驶执照中提取信息。为此,我们以欧盟的驾驶执照为起点,尽管设计上有小的变化,但其标准化字段是一致的。我们还使用了一些附加的前提条件:


1. 输入图像将是用户提交的身份证(这意味着各种光照条件)


2. 在预处理之前将对图像进行裁剪(这意味着背景噪声很小)


解决方案1(基于OCR)


鉴于使用OCR读取文件在行业内是标准做法,我们首先探索了这种方法。我们的第一个目标是构建一个解决方案,该解决方案对图像进行预处理,使用OCR从中提取文本,然后使用后OCR流水线对其进行分类。


必须注意的是,当涉及使用基于OCR的方法时,图像预处理对于获得良好结果至关重要。尽管存在多篇文章建议的预处理方法,比如El Harraj&Raissouni [1]和Koistinen等[2],但在大多数情况下都不存在可以应用的标准。相反,相同的处理方法可能会因输入的不同而导致截然不同的结果,这意味着我们必须从头开始定义自己的处理流程。


为此,我们创建了一个小的基础图像集,用于比较不同流水线的结果。该集合由来自不同国家的六个驾驶执照组成,具有不同的分辨率、图像大小和光照条件。接下来,我们探索了以下几个方面:


1. 阈值:分析了四种不同的阈值方法,如下图所示。平均而言,全局阈值和大津二值化的性能非常相似,而自适应方法往往会使图像变得难以辨认,即使对人眼来说也是如此。我们保留了表现最好的两种方法,并在其基础上进一步进行了评估和修改。


7


2. 形态学操作:分别单独和组合地分析了五种不同的转换:模糊、膨胀、腐蚀、开运算和闭运算。对于需要核配置的操作,评估了不同的核大小:2x2、4x4和8x8。较大的核容易导致结果变差,而且总体上,所有形态学转换都导致OCR输出结果变差。


8


3. 调整大小和插值:根据Tesseract官网的建议,对于提取文本来说,32像素是最佳的文本大小。基于此,我们设计了一个简单的调整大小的过程:给定一个输入图像,从中提取的OCR文本计算出文本框的中间高度,并将图像调整大小以达到中等文本框高度为32像素。在这个操作中,我们还测试了五种类型的插值方法,以比较它们对OCR结果的影响。


经过多次迭代,我们得出结论:对于放大的图像,立方插值是最合适的,而基于像素区域的插值对于缩小的图像效果最好。当最初未检测到文本框时,我们还使用了双线性插值,假设OCR的失败是由于图像的最小尺寸(因此需要进行放大)。


最终的图像处理流程和OCR之后:


给定一个输入图像,最终的流程执行了最佳的调整大小操作,应用了Otsu的二值化,并使用Tesseract扫描文本。我们计划的下一步是创建可以接收提取的文本并返回我们需要的实体(例如姓名、出生日期、驾照号码等)的函数。然而,这种方法的问题已经显而易见:


1. 噪音和成本:OCR读取的不仅仅是相关字段,通常会错误读取所有可能的内容,返回一个需要处理的嘈杂文本。为了提取相关信息,需要一个强大的OCR之后的流程,这样的解决方案成本较高。


2. 图像处理效果不佳:如前所述,图像处理没有标准解决方案,这意味着不同条件下的输入图像可能使“最佳”流程对OCR无效。因此,几乎不可能创建一个可以完全保证良好性能的流程。


3. 需要完美的输入图像:我们发现,除非我们有一个完美的输入图像(一个非常清晰和对齐的图像,通常在用户提交的真实世界图像中并不是这样),否则文本经常被错误地读取或忽略。同样的情况也发生在包含不属于英文字母表的字符的驾照上(例如波兰语或立陶宛语)。


解决方案2(无OCR)


为了应对与OCR相关的限制,我们探索了使用深度学习的可能性,重点关注img2seq模型。其中一个引起我们注意的模型是Donut[3],它是一个视觉文档理解模型,能够将图像作为输入并执行与文本相关的任务,如信息提取和视觉问答。为了在不使用OCR的情况下实现这一点,Donut使用了一个视觉编码器(Swin-B Transformer)和一个文本解码(BART)。


具体而言,Swin-B是专为图像处理设计的变换器架构。Swin transformer的一个主要特点是将图像分解为多个非重叠补丁,并对其进行分级处理,从而能够捕捉局部和全局的上下文信息。它的工作方式可以简单地解释如下:


1. 首先,将输入图像分割成多个非重叠的补丁。


2. 然后,补丁通过一个基于窗口平移的多头自注意力模块,帮助模型通过考虑附近补丁的内容来理解图像的不同部分之间的关系。


3. 接下来,一个两层MLP让模型学习每个补丁内的模式,从而更好地理解图像的内容。


4. 最后,补丁令牌通过补丁合并层,使模型能够聚合信息并创建图像的更全面的表示。


5. 这个过程的输出然后传递给解码器,即多语言的BART模型。


9


为了适应从驾驶执照中提取信息的模型,我们创建了一个合成数据集,并使用名为Sparrow的MLOps管道进行了微调。Sparrow允许我们将数据分为测试/训练/验证集,配置微调,使用Wandb跟踪损失,并在HuggingFace上保存每个时期的权重。


我们使用Colab免费(T4 GPU)为Donut进行了7个时期的微调,使用2500张合成图像,共花费了3小时43分钟。经过微调的模型在测试集中达到了98%的准确率,这是我们在一组真实执照上进行测试所证实的最佳性能。以下列执照为例:


10


对于这张图片,Donut得出了以下结果。


{'First Name': 'THOMAS', 'First Name': 'THOMAS', 
'Last Name': 'ARMSTRONG', 
'Date of Birth': '07.10.78IRELAND', 
'Date of Issue': '13.03.17', 
'Date of Expiry': '12.03.27', 
'Issuing Authority': 'ROAD SAFETY AUTHORITY', 
'Driver Number': '001234567', 
'License Number': '020012ABCD'}


用于对比的,这是同一驾照的OCR方法产生的输出。


"CEADUNAS TIOMANA DRIVING LICENCE cil IRELAD 1 ARMSTRONG 2 THOMAS 7 3 OPO Te 
fa 130317 ac ROMP SAFETY AUTHORITY 4b 120327 adeOatesss7 NS 6 oO bpon0 ouB o Oo"


比较分析


为了对比两种方法,我们首先评估了每种方法提取的文本准确性。我们创建了一个由10个欧盟国家(奥地利、爱沙尼亚、德国、立陶宛、荷兰、波兰、罗马尼亚、英国、西班牙和瑞典)的12个真实驾照组成的小数据集。这些图片由多个个体提交,并且没有经过任何处理,除了缩放(OCR方法自动完成,Donut方法手动完成)。


对于每个驾照,我们比较了模型正确识别的字符总数。例如,如果实际文本是“John”,但模型提取出“Joh”或“Lohn”,那么准确率为75% - 只有四个字符中的三个被正确提取。


下面是文本提取准确性的结果。从本质上讲,这个测试回答了一个问题:总体上,我们预期模型提取的文本中有多少是正确的?


11


尽管为每个模型的性能提供了洞察,但这个测试没有回答有关Donut的一个基本问题。模型是没有识别到应该读取的字段吗?还是它识别到了字段,但读取错误?


为了回答这些问题,我们进行了两个额外的测试。首先,我们评估了Donut应该从每个许可证中提取的九个字段中,每个字段被有效提取的时间比例。然后,我们评估了第二个点:在已识别的字段中,提取的信息有多准确?


以下是两个测试的结果:


12


从这个过程中,我们得出了一些见解:


1. 尽管在某些领域的识别方面还有改进的空间,但大多数领域都在满意的时间内被识别出来。


2. 每当一个领域被识别出来时,其文本都能以高精度提取出来。


此外,模型在提取某些领域上遇到最大困难的情况下,这些领域恰恰是根据国家而变化位置的领域:像波兰这样的国家将这些领域堆叠在一起显示,而许多其他国家(以及我们数据集中的许可证)将签发日期和签发机构放在一起,就像到期日期和驾驶员编号一样。这表明,拥有包含这两种设计模式的更全面的数据集将使模型能够更好地泛化并更准确地捕捉这些领域。


至于OCR方法,我们无法衡量提取文本中的信息被正确分类的准确性,但这一点应该谨慎考虑。为了说明挑战,再次考虑前一节中显示的许可证以及其输出:


"CEADUNAS TIOMANA DRIVING LICENCE cil IRELAD 1 ARMSTRONG 2 THOMAS 7 3 OPO Te 
fa 130317 ac ROMP SAFETY AUTHORITY 4b 120327 adeOatesss7 NS 6 oO bpon0 ouB o Oo"


后OCR流水线有两个主要挑战:首先,如何区分信号(输出中的个人数据)和噪声?然后,如何正确分类信号的每个部分(例如,130317是许可证号还是日期?)


在第一种方法中,需要使用多个后OCR函数来实现。然而,不难意识到,考虑到OCR输出本身远未理想,它们的性能将不够优化。另一方面,Donut除了更准确地提取文字外,还立即进行了分类,提供了一个输出,其中“Thomas”已被标记为姓名,“13.03.17”被标记为发行日期。这使得Donut成为一个端到端的解决方案,提供的结果比基于OCR的方法可靠得多。


结论 


在评估了两种不同的从驾驶执照中提取信息的方法之后,我们得出结论,基于Transformer的方法(如Donut)比基于OCR的方法表现更好。基于OCR的选项经常产生不准确和嘈杂的文字,需要后OCR流水线来正确分类实体。另一方面,Donut实现了更高的准确性(在测试数据集中为98%,在真实执照集中为63.9%),并且可以输出已被分类的实体,这使其成为一个端到端的解决方案。



文章来源:https://medium.com/python-in-plain-english/transformers-vs-ocr-who-can-actually-read-better-192e6b044dd3
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
写评论取消
回复取消