文本纠错:提升OCR任务准确率的方法理解
文本纠错:提升OCR任务准确率的方法理解
摘要:错字率是OCR任务中的重要指标,文本纠错需要机器具备人类水平相当的语言理解能力。随着人工智能应用的成熟,越来越多的纠错方法被提出。
近年来深度学习在OCR领域取得了巨大的成功,但OCR应用中识别错误时有出现。错误的识别结果不仅难以阅读和理解,同时也降低文本的信息价值。在某些领域,如医疗行业,识别错误可能带来巨大的损失。因此如何降低OCR任务的错字率受到学术界和工业界的广泛关注。合合信息通过本文来讲解文本纠错技术帮助更多人解决业务问题。通常文本纠错的流程可以分为错误文本识别、候选词生成和候选词排序三个步骤。文本纠错方法可包括基于CTC解码和使用模型两种方式,下面分别对这两种纠错方式进行介绍。
1.Beam Search
该方法是针对CTC解码时的一种优化方法,这是由于当使用贪心算法进行CTC解码时忽略了一个输出可能对应多种对齐结果,导致在实际应用中错字率会颇高,并且无法与语言模型结合。因而通过Beam Search的方法我们能够得到top最优的路径,后续也可以利用其他信息来进一步优化搜索结果。
1
1.1 prefix Beam Search1
由于有许多不同的路径在many-to-one map的过程中是相同的,当使用Beam Search时只会选择Top N个路径,这就导致了很多有用的信息被舍弃了,如图1所示,生成“a”路径的概率为0.2·0.4+0.2·0.6+0.8·0.4=0.52,而生成blank的路径概率为0.8·0.6=0.48,当使用最佳路径的搜索方式会倾向于选择blank的路径,而不是整体概率更大的a路径。所以就有了Prefix Beam Search,其基本思想是,在每个t时刻,计算所有当前可能输出的规整字符串(即去除连续重复和blank的字符串)的概率。然后用Beam Search的方法,在每个时刻选取最好的N个路径,从而将每个时间点t上的搜索空间变为常数。在计算最优路径概率时,以t=3时刻,规整字符串为“a”为例,如图2所示。对于t+1时刻的可能情况有6种,可以看出在Prefix Beam Search中将规整后的字符串分为了以blank和非blank结尾的两种情况来计算t+1时刻的概率。通过Prefix Beam Search方法,解决了在many-to-one map过程所导致的结果相同而路径可能不同的问题,搜索结果是针对具有相同结果路径的排序,而不是单一路径的排序。
2
1.2 Vanilla Beam Search2
对于输出是一个大小为 T × (C + 1) 的矩阵,进行解码时在每个时间步t,每个beam-labeling都会被t+1时刻的所有可能的字符扩展,同时未被扩展前的beam-labeling也会被保留下来,这一搜索过程可以表示为如图 3 所示的树状结构。为避免搜索路径的指数增长,在每个时间步仅保留N个最佳的beam-labeling。如果在t时刻两个beam-labeling相等,则会把二者的概率进行求和,然后删除其中一个来合并二者的路径。在这一过程中可以使用character-level LM的先验信息对beam-labeling可能的扩展进行打分。也可以引入一个词典,当出现词汇表外的单词(OOV)时,就可以删除相关的beam,来保证解码后始终能够得到有意义的结果。
3
1.3 Word Beam Search3
VBS工作在字符级别,不会从语义级别去判断解码的内容是否符合规则,而WBS方法可以综合前后几个字符的信息来获得当前字符的准确信息,在能够将解码后的单词限制在词典里的同时,还允许单词之间拥有任意数量的非单词字符,并且在解码中还可以使用word-level LM的先验信息,来提升对CTC解码的准确性。
在进行解码时,当beam-labeling被标记为单词状态时,使用根据词典预先构成的prefix-tree,如图4所示,来约束解码的结果始终在词典中,当beam-labeling转换为非单词状态时,则不必受prefix-tree的约束进而能够实现非单词字符的解码,beam-labeling状态的转换受将要扩展字符的影响,如果字符为词典字符(对英文来说词典字符可以定义为英文字母)则其状态为单词状态,字符为非词典字符则为非词典状态。通过WBS方法可以进一步降低解码时的错字率。
4
2.基于深度模型的文本纠错
针对文本纠错,除了在解码时引入Beam Search和LM先验知识来降低错字率外,还可以通过深度学习的方法,使用经过训练的纠错模型来识别和纠正文本中出现的错误。
2.1 基于Seq2Seq 模型的纠错
在Confusionset-guided Pointer Networks for Chinese Spelling Check4文中,提出了使用混淆集和门控机制相结合的中文纠错模型,如图5所示。纠错模型使用的时Encoder-Decoder模式,编码器使用的是BiLSTM,对中文文本按字符级别进行编码,解码器使用的是LSTM,在解码器进行解码时,不仅接收上一个token的embedding的特征向量,还接受通过注意力机制将编码器的文本特征聚合成一个包含上下文信息的特征向量,从而达到基于语义信息的文本纠错。在解码器的每个时间t所生成的特征向量,一方面通过线性变换投影到vocabulary的向量空间用于生成候选字符,另一方面也会通过一个Softmax层构成的门控机制,用于决定当前时刻解码器的输出结果是否直接复制原始的文本字符。此外当门控机制不选择直接复制时,并且当要预测的字符出现在预先设定好的混淆集中的时候,解码器则会在混淆集中选择候选的字符,而不是在整个词典向量空间中选择。
5
2.2 FASPell5
虽然通过加入注意力机制Seq2Seq模型也能实现基于上下文信息的文本纠错,但是基于混淆集进行候选词的构造,很容易在少量数据上过拟合,而且只利用混淆集的方法也不够灵活,由于这一阈值是固定的导致字符之间的相似性没有被充分利用。
6
因而FASPell模型提出了基于预训练模型作为候选词生成器,并使用了置信度和相似度相结合的解码器实现不依赖混淆集的中文纠错,模型结构如图6所示。首先是在Bert模型上进行训练(也就是文中说的自降噪编码器DAE),训练时将错误的token用mask代替,为了防止过拟合也会随机对正确的token使用mask。通过训练编码器生成的候选词后经过一个Confidence-Similarity Decoder,简单来说就是利用字符的字形和拼音相似度,再结合训练集上给出的置信度分布找出基于二者之间正确和错误字符的分界线。在测试时不再仅仅根据Bert模型所给出的置信度来挑选候选词,而是加上候选字符与原始字符的相似度信息共同决定最终的结果。
FASPell虽然说该方法比RNN结构的纠错网络能够更快、更好的适用性、更加简单和更强大,少了混淆集但同时引入了字形相似度和拼音相似度,并且在解码时,决策边界的选择也需要根据训练集进行调整,当训练集分布与实际使用时数据的分布不同时决策边界有可能也需要调整,才能取得较为理想的结果。
2.3 基于注意力机制的Seq2Seq纠错模型
针对英文的纠错在Denoising Sequence-to-Sequence Modeling for Removing Spelling Mistakes6一文中使用Bert 的注意力机制代替了RNN结构,模型结构如图7所示。其中编码器使用了6层多头注意力结构,解码器与编码器结构相同,与Seq2Seq解码方式一样,按时间顺序生成纠错后的文本,为了实现这一过程,在解码时使用了mask机制,使得解码器在t时刻的只能看到t时刻之前的信息。
相比RNN结构的降噪模型,模型性能有所提升,由于没有使用预训练模型需要较大的训练集进行训练,而且在文中并没有提及具体的实验细节,编码器的特征是怎样送入解码器中的,文中也没有具体提及。
7
2.4 Soft-Masked BERT7
文中指出由于Bert是基于mask进行训练的一种无监督模型,导致其只能拟合被mask部分的token分布,并不能识别文本中的错误,因而在纠错算法中一般需要额外的模块指出文本中的错误,再将错误的文本mask掉再送入Bert模型进而得到正确的文本。而本文提出了一种soft-masked机制,送入Bert的文本不再被强制mask掉而是文本token的embedding和MASK token特征的加权和,如图8所示。具体做法是,使用一个BiLSTM模型用来判别文本中字符错误的概率,记为p,在将文本送入Bert中时会对没给token的特征表示e i与MASK token的特征e mask 按照概率p进行加权,公式如下:
e i’ = p · e mask + (1 − p) · e i
8
在训练时将文本错误检测模块和纠错模块放在一起训练,并通过超参数λ来平衡两个任务的损失,通过实验验证,λ=0.8时整个文本纠错模型达到最优,说明文本错误检测任务比纠正任务要容易。使用soft-masked机制,通过错误概率p控制文本token进入纠错模型中的信息量的方式,避免了文本错误检测时阈值的设计,缺点是该方法没有使用生成式的方案不太容易处理字符缺失的问题。
2.5 Chunk-Based8
鉴于大多数中文纠错模型都是针对具有相似字符形状或发音的文本纠错,对于没有字形相似和语音相似的错别字更正效果则一般,另一方面大部分纠错模型都是以pipeline的形式来实现的导致模型难以优化。针对以上缺点在Chunk-based Chinese Spelling Check with Global Optimization文中对纠错任务提出了改进,纠错流程如图9所示。
本文主要的贡献是扩展了混淆集,以前的混淆集主要是字形或发音相似的字符组成,而本中使用的混淆集中也包含了语义相近的词组。另一方面是关于模型的优化方法,是基于句子级别的优化,以往模型只是针对个别字符输出结果的优化,很少考虑整个语义上的最优结果。模型中的候选词是根据字形、语音和语义相似度生成的,其中语义相似度是由 FASPell模型得到。具体做法是将文中定义的编辑距离、字形相似度、语音相似度、语义级别错字率等特征通过加权求和的方式来生成候选词的top K。在选择候选词时,结合Beam Search方法考虑了句子级别整体最优解的情况。在进行模型优化时使用了Minimum Error Rate Training (MERT)9方法,从而实现了文中所说的针对多特征组合排序的联合优化。
9
Chunk-based方法虽然能提升纠错模型的表现,但似乎看起来又回到了基于规则进行文本纠错的方向(添加了人为定义的编辑距离,使用语义相近的词组对混淆集进行了扩展),只不过以往基于规则的纠错方法都不可微,各个特征之间的权重设计往往需要根据经验设计,本文则通过一个线性层将这些特征进行了加权,而不需要人为设计最佳的权重参数。
小结
本文针对OCR的文本纠错任务进行了简单介绍,分为对针对CTC解码时的纠错和使用纠错模型两种方式。前者一般是使用Beam Search来搜索最优的解码路径,并在搜索过程中引入LM,使用相关语言的先验信息来进一步降低解码时的错字率,这样做的好处是相比于使用纠错模型的方法,不必引入额外的训练参数,实现起来较为简单,只是受OCR模型的限制,存在着性能提升的上限。后者则是针对解码后的文本进行纠错,经历了从基于Seq2Seq模型使用生成方式进行文本纠错,到使用预训练模型进行文本纠错的转变,纠错能力也有了很大的提升,显示了出巨大的发展潜力。
方案选择
对于文本纠错,合合信息的理解是:严格来说Beam Search只是对CTC解码的优化,存在着优化上限(Beam长度为文本长度,找到全局最优解),只有当与基于统计LM(n-gram)相结合时才有着一定的纠错能力,但往往是基于统计信息针对字词的纠错,对于语法和语义的纠错则能力有限。然而Beam Search作为一种优化算法,在OCR模型部署时并不会引入额外的参数,计算也不复杂,可以说是针对CTC解码优化的必备算法。针对中文和英文的不同特点,中文任务选择VBS而英文任务选择WBS较好。至于要不要引入LM的先验信息,可以视具体OCR任务决定。
当有必要使用纠错模型对OCR任务进行优化时,最为简单实现方式是Soft-Masked BERT,不需要额外定义例如字形相似度、语音相似度等参数,并且对中英文都适用。但和Chunk-Based模型、FASPell模型一样模型主体使用的预训练模型(Bert),纠错方式并不是生成式,模型一个输入token对应着一个输出token,因此难以处理文本缺字和多字的问题。如果OCR结果缺字或多字的问题比较严重,优化方案可以将Bert模型改成与翻译模型类似的,基于注意力机制的Seq2Seq纠错模型。如果想进一步提升模型的纠错能力,Chunk-Based模型是种不错的选择,混淆集的使用可以避免大部分常见的字形相似、拼音相似的错误,只是混淆集需要人工制作,编辑距离也需要人为定义,算是一种基于规则和深度学习相结合的纠错方式。
参考文献:
1 Hannun A Y , Maas A L , Jurafsky D , et al. First-Pass Large Vocabulary Continuous Speech Recognition using Bi-Directional Recurrent DNNsJ. computer science, 2014.
2 Hwang K , Sung W . Character-Level Incremental Speech Recognition with Recurrent Neural NetworksC// IEEE. IEEE, 2016.
3 Scheidl H , Fiel S , Sablatnig R . Word Beam Search: A Connectionist Temporal Classification Decoding AlgorithmC// 2018 16th International Conference on Frontiers in Handwriting Recognition (ICFHR). 2018.
4 Wang D , Yi T , Zhong L . Confusionset-guided Pointer Networks for Chinese Spelling CheckC// Proceedings of the 57th Annual Meeting of the Association for Computational Linguistics. 2019.
5 Hong Y , Yu X , He N , et al. FASPell: A Fast, Adaptable, Simple, Powerful Chinese Spell Checker Based On DAE-Decoder ParadigmC// Proceedings of the 5th Workshop on Noisy User-generated Text (W-NUT 2019). 2019.
6 Roy S . Denoising Sequence-to-Sequence Modeling for Removing Spelling MistakesC// 2019 1st International Conference on Advances in Science, Engineering and Robotics Technology (ICASERT). 2019.
7 Zhang S , Huang H , Liu J , et al. Spelling Error Correction with Soft-Masked BERTJ. 2020.
8 Bao Z , Li C , Wang R . Chunk-based Chinese Spelling Check with Global OptimizationC// Findings of the Association for Computational Linguistics: EMNLP 2020. 2020.
9 Franz Josef Och. Minimum error rate training in statistical machine translation. In Proceedings of the 41st Annual Meeting of the Association for Computational Linguistics, pages 160–167, Sapporo, Japan. Association for Computational Linguistics.2003.
文本纠错:提升OCR任务准确率的方法理解的更多相关文章
- UiPath文本操作Get OCR Text的介绍和使用
一.Get OCR Text操作的介绍 使用OCR屏幕抓取方法从指示的UI元素或图像中提取字符串及其信息.执行屏幕抓取操作时,还可以自动生成此活动以及容器.默认情况下,使用Google OCR引擎. ...
- 第七篇T语言实例开发,文本与程序的几种打开方法(版5.3)
文本与程序的几种打开方法 文本文件的打开方法 函数名: cmd 命令 函数描述: 执行CMD命令 函数原型: cmd(cmdstr) 命令(cmd命令) 函数参数: cmdstr:cmd命令,此处执行 ...
- (三)在js(jquery)中获得文本框焦点和失去焦点的方法
在js(jquery)中获得文本框焦点和失去焦点的方法 文章介绍两个方法和种是利用javascript onFocus onBlur来判断焦点和失去焦点,加一种是利用jquery $(" ...
- 从编辑距离、BK树到文本纠错
搜索引擎里有一个很重要的话题,就是文本纠错,主要有两种做法,一是从词典纠错,一是分析用户搜索日志,今天我们探讨使用基于词典的方式纠错,核心思想就是基于编辑距离,使用BK树.下面我们来逐一探讨: 编辑距 ...
- AngularJS进阶(三)HTML:让表单、文本框只读,不可编辑的方法
HTML:让表单.文本框只读,不可编辑的方法 有时候,我们希望表单中的文本框是只读的,让用户不能修改其中的信息,如使<input type="text" name=" ...
- PHP HTML混写,PHP中把大块HTML文本直接赋值给字符串变量的方法
PHP HTML混写,PHP中把大块HTML文本直接赋值给字符串变量的方法 使用HEREDOC/NOWDOCHEREDOC和NOWDOC是PHP5.3开始支持的一种新特性,它允许在程序中使用一种自定义 ...
- jQuery监控文本框事件并作相应处理的方法
本文实例讲述了jQuery监控文本框事件并作相应处理的方法.分享给大家供大家参考.具体如下: //事情委托 $(document) .on('input propertychange', '#que ...
- js中对arry数组的各种操作小结 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据 web前端url传递值 js加密解密 HTML中让表单input等文本框为只读不可编辑的方法 js监听用户的键盘敲击事件,兼容各大主流浏览器 HTML特殊字符
js中对arry数组的各种操作小结 最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以说啊 ...
- 调用百度API进行文本纠错
毕设做的是文本纠错方面,然后今天进组见研究生导师 .老师对我做的东西蛮感兴趣.然后介绍自己现在做的一些项目,其中有个模块需要有用到文本纠错功能. 要求1:有多人同时在线编辑文档,然后文档功能有类似Wo ...
- Android 自定义 view(四)—— onMeasure 方法理解
前言: 前面我们已经学过<Android 自定义 view(三)-- onDraw 方法理解>,那么接下我们还需要继续去理解自定义view里面的onMeasure 方法 推荐文章: htt ...
随机推荐
- EntityUtils MapStruct BeanCopier 数据实体类转换工具 DO BO VO DTO 附视频
一.序言 在实际项目开发过程中,总有数据实体类互相转换的需求,DO.BO.VO.DTO等数据模型转换经常发生.今天推荐几个好用的实体类转换工具,分别是EntityUtils MapStruct Bea ...
- 关于 python 的内存机制
先看一段代码 L = [1,2,3] dic_ = {} L2 = [] for i in L: dic_['sn'] = i L2.append(dic_) print(L2) 输出 [{'sn': ...
- Vue2基本组件间通信
Vue2组件通信的基础方式 自己的理解:组件化通信,无非就是数据你传我,我传你,两个组件的相互交流,方法很多,下方有图示(此篇建议小白阅读,大神的话也不会看,哈哈哈哈!仅供参考,有不同的意见可以一起交 ...
- Map的遍历方式,常用的key-value遍历方式
在开发过程中经常会遇到 map 的遍历,本文将会介绍四种常用的 key-value 遍历方式 说明: 增强 for 循环遍历 先取出 map 的 keySet,进行遍历,再取出对应 key 的 val ...
- 微服务开发平台 Spring Cloud Blade 部署实践
本文介绍使用 Rainbond 快速部署 Spring Cloud Blade 微服务平台.Spring Cloud Blade 是一个由商业级项目升级优化而来的微服务架构,采用Spring Boot ...
- MongoDB - 数据模型的设计模式
简介 官方文章的地址是 Building with Patterns: A Summary,其中汇总了 12 种设计模式及使用场景. 上述的图表列举了 12 种设计模式及应用场景,主要是以下这些: 近 ...
- 侦察工具——Httrack
前言 web渗透学习笔记,实验环境为Metasploitable靶机上的DVWA.此随笔介绍Web渗透侦察工具Httrack Httrack 简介 Httrack能够克隆拷贝目标网站上的所有可访问.可 ...
- 7、解决swagger测试接口报错:TypeError: Failed to execute ‘fetch‘ on ‘Window‘: Request with GET/HEAD method cannot have body
一.Swagger报错: 1.报错类型: TypeError: Failed to execute 'fetch' on 'Window': Request with GET/HEAD method ...
- 前菜--Numpy
import numpy as np NumPy : numberial python NumPy的核心:数据结构 ndarray 1.1 数组方法 np.array 创建数组 基本语法:np.arr ...
- 高并发解决方案orleans实践
开具一张图,展开来聊天.有从单个服务.consul集群和orleans来展开高并发测试一个小小数据库并发实例. 首先介绍下场景,创建一个order,同时去product表里面减掉一个库存.很简单的业务 ...