NLP 中文拼写检测纠正论文 Automatic-Corpus-Generation

拼写纠正系列

NLP 中文拼写检测实现思路

NLP 中文拼写检测纠正算法整理

NLP 英文拼写算法,如果提升 100W 倍的性能?

NLP 中文拼写检测纠正 Paper

java 实现中英文拼写检查和错误纠正?可我只会写 CRUD 啊!

一个提升英文单词拼写检测性能 1000 倍的算法?

单词拼写纠正-03-leetcode edit-distance 72.力扣编辑距离

NLP 开源项目

nlp-hanzi-similar 汉字相似度

word-checker 中英文拼写检测

pinyin 汉字转拼音

opencc4j 繁简体转换

sensitive-word 敏感词

前言

大家好,我是老马。

下面学习整理一些其他优秀小伙伴的设计、论文和开源实现。

感受

这是 2018 年的论文,基于混淆集的方式。

局限性比较大,但是不失为一种解决方案。

论文+实现

论文地址: https://aclanthology.org/D18-1273.pdf

源码地址:https://github.com/wdimmy/Automatic-Corpus-Generation

摘要

中文拼写检查(CSC)是一项具有挑战性但意义重大的任务,它不仅在许多自然语言处理(NLP)应用中作为预处理步骤,而且在日常生活中帮助阅读和理解文本。

然而,使用数据驱动的方法进行中文拼写检查时,存在一个主要限制,即标注语料库不足,无法充分应用算法和构建模型。本文提出了一种新颖的方法,通过自动生成拼写错误构建CSC语料库,这些错误分别是由视觉或语音相似的字符引起的,分别对应OCR(光学字符识别)和ASR(自动语音识别)方法。

基于构建的语料库,针对三个标准测试集,训练并评估了不同的模型。实验结果证明了该语料库的有效性,从而验证了我们方法的有效性。

1. 引言

拼写检查是检测和纠正文本中拼写错误的关键任务(Yu和Li,2014)。这一任务对于NLP应用(如搜索引擎(Martins和Silva,2004;Gao等,2010)和自动作文评分(Burstein和Chodorow,1999;Lonsdale和Strong-Krause,2003))至关重要,因为拼写错误不仅影响阅读,还可能完全改变文本片段的含义。尤其在中文处理过程中,拼写错误可能会更严重,因为它们可能影响诸如分词(Xue,2003;Song和Xia,2012)和词性标注(Chang等,1993;Jiang等,2008;Sun,2011)等基础任务。在导致拼写错误的所有原因中,一个主要原因是日常文本(如电子邮件和社交媒体帖子)中中文输入法的误用。

表1展示了两个此类中文拼写错误的例子。第一个错误的句子包含了一个误用的字符“己”(ji2),它的形状与其正确字符“已”(yi3)相似。在第二个错误句子中,框选的拼写错误“她”(ta1)与其对应的正确字符“他”(ta1)在语音上是相同的。

  • T1
我们应该认真对待这些 **己** (ji2) 经发生的事 **已** (yi3)  
在我们班上, **她** (ta1) 是一个很聪明的男孩 **他** (ta1)

表1: 两个包含拼写错误的中文句子。拼写错误以红色标记。

第一个句子包含一个视觉上相似的拼写错误,即 (yi3) 被误拼为 (ji2)。第二个句子包含一个语音上相似的拼写错误,即 (ta1) 被误拼为 (ta1)。

由于可用数据集的数量有限,许多先进的监督模型在这一领域很少被采用,这阻碍了CSC的发展。目前,一些主流方法仍然专注于使用无监督方法,即基于语言模型的方法(Chen等,2013;Yu等,2014;Tseng等,2015;Lee等,2016)。

因此,CSC技术的发展受到限制,直到目前,CSC的性能仍然不令人满意(Fung等,2017)。为了提高CSC的性能,最大的挑战是缺乏标注拼写错误的大规模语料库,而这样的语料库对于训练和应用监督模型具有很高的价值。数据缺乏的问题主要是由于拼写错误的标注是一项昂贵且具有挑战性的任务。

为了解决数据不可用的问题,并促进CSC的基于数据驱动的方法,本文提出了一种新颖的方法,通过自动构建带有标注拼写错误的中文语料库。

具体而言,由于中文拼写错误主要来源于视觉和语音相似字符的误用(Chang,1995;Liu等,2011;Yu和Li,2014),我们提出了基于OCR和ASR的方法来生成上述两种类型的误用字符。

值得注意的是,与从错误句子中检测拼写错误不同,我们提出的方法旨在自动生成带有标注拼写错误的文本,类似于表1中的错误。借助OCR和ASR方法,CSC语料库可以生成带有视觉和语音拼写错误的标注文本。

在我们的实验中,定性分析表明,OCR或ASR工具包错误识别的中文字符对人类来说并不容易检测,而有趣的是,人们在日常写作中很容易犯这样的拼写错误。在定量比较中,我们将中文拼写检查视为序列标注问题,并实现了一个监督基准模型——双向LSTM(BiLSTM),以评估在三个标准测试数据集上CSC的性能。

实验结果显示,基于我们生成的语料库训练的BiLSTM模型比在标准测试数据集提供的训练数据集上训练的模型表现更好。为了进一步促进CSC任务的发展,我们通过收集每个字符的所有错误变体及其对应的正确参考构建了混淆集。

在错误纠正任务中,混淆集的有效性得到了验证,表明构建的混淆集在许多现有的中文拼写检查方案中具有重要作用(Chang,1995;Wu等,2010;Dong等,2016)。

  • 图1

F1

图1:通过基于OCR的方法生成V型错误的示例过程。在OCR检测结果中,除了 (yan4),其他三个字符即 (li4)、 (mu4) 和 (ji1),分别被错误识别为 (su4)、 (mo4) 和 (ji2)。这三个错误字符与其对应的正确字符在形状上非常相似。

2 自动数据生成

中文拼写错误主要由视觉或语音上相似的字符误用引起(Chang, 1995; Liu et al., 2011; Yu and Li, 2014)。视觉相似字符的错误(以下简称为V型错误)是由于一些视觉上相似的字符对具有显著性。原因在于,中文作为象形文字,包含超过六万多个字符。它们是由有限的部首和组件构成的。至于由语音相似字符误用引起的错误(以下简称为P型错误),我们注意到,汉字的发音通常由拼音定义,拼音由声母、韵母和声调组成(Yang et al., 2012)。在现代汉语中,只有398个音节可以对应成千上万的汉字。因此,很多汉字的发音相似,这进一步导致了P型错误的显著性。在本节的其余部分,我们分别描述如何在2.1和2.2节中生成这两种类型的错误。

2.1 基于OCR的生成方法

受到光学字符识别(OCR)工具容易误识别视觉相似字符的启发(Tong and Evans, 1996),我们故意模糊具有正确字符的图像,并使用OCR工具在其上进行处理,从而生成V型拼写错误。

具体来说,我们使用Google Tesseract(Smith, 2007)作为OCR工具包,生成过程如图1所示。

给定一个句子,首先,我们从中随机选择1至2个字符作为目标字符,进行Tesseract识别,记为Ctargets。

具体而言,除了汉字,其他字符如标点符号和外文字符会被排除,我们还会根据中文维基百科语料库的统计信息,过滤掉低频汉字。其次,我们将Ctargets从文本转化为100 × 100像素的图像,即每个生成的图像大小相同。

第三,我们随机对生成的图像区域进行高斯模糊(Bradski, 2000),目的是使OCR工具产生错误。

最后,我们使用Google Tesseract对模糊图像进行识别。如果识别结果与原字符不匹配,就会生成V型错误,并用此错误字符替换原字符,生成包含V型拼写错误的句子。通过上述步骤,我们为每个句子生成拼写错误及其正确参考。

用于OCR方法的原始文本主要来自人民日报等新闻网站的文章,这些文章经过严格的编辑过程,假设其内容是正确的。

我们通过句末标点符号(如句号“。”、问号“?”和感叹号“!”)对这些文本进行分句(Chang et al., 1993)。

最终,我们得到50,000个句子,每个句子包含8至85个字符,包括标点符号。

然后,我们使用OCR方法处理这些句子,生成一个标注语料库,其中包含约40,000个标注句子和56,857个拼写错误。值得注意的是,在我们的实验中,即使我们对图像进行部分模糊处理,OCR工具仍然能够正确检测图像中的字符,这也解释了为什么生成的标注句子的数量小于原始句子。我们将这个数据集称为D-ocr,并在表3的D-ocr列中展示其统计信息。

不良情况及解决方案

尽管基于OCR的方法运行顺利,但仍有一些值得进一步研究的情况。通过分析该方法生成的拼写错误,我们发现,在形状上,OCR工具有时会错误识别一些与正确字符相差甚远的字符。

例如,在包含字符(ling3)的模糊图像中,Tesseract错误地识别为(shi4),这在形状上与(ling3)完全不同。因此,这些情况应该被排除,因为人类不太可能犯这样的错误。

为了解决这个问题,我们提出了一种新方法,通过计算汉字笔画的编辑距离来判断两个字符是否在形状上相似。与由字母构成的英语单词类似,汉字可以分解为不同的笔画。为此,我们从在线字典获取汉字的笔画信息。

根据经验,给定两个汉字c1和c2,我们设定0.25 × (len(c1) + len(c2))为阈值η,其中len(c)表示汉字c的笔画数。如果两个字符的编辑距离超过阈值η,我们认为它们在形状上不相似。为了更清楚地说明这一点,图2展示了一个不良案例和一个良好案例。

  • F2

F2

  • F3

F2

2.2 基于ASR的生成方法

与OCR工具类似,自动语音识别(ASR)工具也可能将一些字符误识别为发音相似的其他字符(Hartley and Reich, 2005)。

为了构建包含P型错误的标注语料库,我们采用与V型错误和OCR工具类似的思路,采用了图3所示的流程。然而,鉴于现有各种语音识别数据集的可用性,我们采用了一种更简化的方法。我们利用一个公开的普通话语音语料库AIShell(Bu et al., 2017),该语料库包含约14万个句子和对应的语音数据。

我们使用Kaldi(Povey et al., 2011)语音识别工具包将这些语音转录为识别后的句子。

最后,通过将识别后的句子与原句进行对比,我们可以识别识别结果是否正确。如果不正确,这些结果将作为识别错误的结果,并用于构建包含P型拼写错误的语料库。

不良情况及解决方案

对于生成的P型错误,我们同样识别出一些可能引入大量噪声的不良情况。为提高生成语料库的质量,因此需要采取解决方案来删除这些不良情况。表2给出了三种不良情况和一种良好情况。我们将逐一描述解决这些问题的方法。

  1. 情况1:长度不同的错误识别结果
    首先,我们丢弃所有识别结果与对应的参考句子长度不匹配的错误结果。这些错误结果与目标句子的长度明显不同,因此它们不符合我们的预期。

  2. 情况2:发音完全不同的错误识别字符
    第二类错误是识别出的字符与参考句中的字符在发音上完全不同。这些错误不符合我们生成P型错误的需求。为了处理这种情况,我们通过拼音获取汉字的发音,拼音信息来自在线中文词典。然后,我们可以很容易地识别识别错误的字符是否与原句中的字符具有相似或相同的发音。具体而言,按照拼音规则,如果两个字符具有相同的声母和韵母,但声调不同(如:da2 和 da1),则认为它们具有相似发音。

  3. 情况3:错误字符超过两个
    根据Chen et al.(2011)的研究,每个学生的文章平均存在两个错误,这反映了每个句子中平均不会包含超过两个拼写错误。因此,我们移除那些识别错误字符数量超过两个的识别结果,如表2中情况3所示。

通过以上步骤,我们生成了一个包含超过7千个P型拼写错误的语料库。

我们将其称为D-asr,并在表3的D-asr列中展示了其统计信息。

  • T3+T4+T5

F2

相关工作

在拼写错误检测与纠正的研究领域,大多数之前的研究主要集中在设计不同的模型以提高中文拼写检查(CSC)的性能(Chang,1995;Huang等,2007,2008;Chang等,2013)。

与这些研究不同,本工作贡献于训练数据集的生成,这是一个重要的资源,可以用来改善许多现有的CSC模型。

目前,有限的训练数据集为许多数据驱动方法设置了很高的门槛(Wang等,2013;Wang和Liao,2015;Zheng等,2016)。

根据我们的了解,至今为止,尚未有大量的常用标注数据集可供CSC使用。

一些先前的研究(Liu等,2009;Chang等,2013)指出,视觉上和语音上相似的字符是中文文本中拼写错误的主要原因,其中语音相似的拼写错误数量约是视觉相似错误的两倍。因此,我们的研究方法采用了视觉和语音相关技术。

作为从图像中提取文本信息的技术,光学字符识别(OCR)通过识别形状并分配字符来处理图像中的文本。根据Nagy(1988);McBride-Chang等(2003)的研究,识别错误的结果主要是由于某些不同中文字符的视觉相似性。

另一方面,自动语音识别(ASR)是一种基于声学的识别过程,用于处理音频流,在这个过程中,语音相似的字符通常会混淆(Kaki等,1998;Voll等,2008;Braho等,2014)。

结论与未来工作

本文提出了一种混合方法,用于自动生成带有标注拼写错误的中文语料库以供拼写检查使用。

具体来说,我们采用了基于OCR和ASR的方法,通过替换视觉上和语音上相似的字符来生成标注的拼写错误。

人类评估确认了我们提出的方法能够生成常见的错误,这些错误通常是人类会犯的,并且这些错误可以作为有效的标注拼写错误用于CSC。

在实验中,我们在生成的语料库上训练了一个神经标注模型,并在基准数据集上测试了结果,确认了语料库的质量,进一步证明了我们提出的语料库生成方法对于CSC的有效性。

通过我们提出的方法生成的大规模标注数据集,能够为改进数据驱动模型的性能提供有用的资源,因为大规模标注数据的可用性是应用任何算法或模型之前的首要步骤。在

本文中,我们没有在CSC模型设计方面投入过多的精力,这将作为未来的潜在工作。

为了促进相关研究并为其他研究者提供帮助,我们将本文的代码和数据公开,地址为:https://github.com/wdimmy/Automatic-Corpus-Generation。

致谢

作者特别感谢Xixin Wu在ASR实验中的建议和帮助。

此外,作者还感谢Li Zhong、Shuming Shi、Garbriel Fung、Kam-Fai Wong以及三位匿名审稿人对本研究的各个方面所提供的帮助和宝贵意见。

参考资料

https://github.com/wdimmy/Automatic-Corpus-Generation/blob/master/README.md

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/65524.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

区块链安全常见的攻击合约和简单复现,附带详细分析——不安全调用漏洞 (Unsafe Call Vulnerability)【6】

区块链安全常见的攻击分析——不安全调用漏洞 Unsafe Call Vulnerability 区块链安全常见的攻击合约和简单复现,附带详细分析——不安全调用漏洞 (Unsafe Call Vulnerability)【6】1.1 漏洞合约1.2 漏洞分析1.3 攻击步骤分析1.4 攻击合约 区块链安全常见的攻击合约和…

生成excel文件(有备注和表头的情况)

要使用 Java 导出 Excel 文件,并且通过 ExcelProperty 注解进行列的映射,可以利用 EasyExcel 库。EasyExcel 是阿里巴巴开源的一款高性能 Excel 读写工具,它支持通过注解将类与 Excel 的列进行映射,简化了 Excel 操作的复杂性。 …

Excel 面试 01 “Highlight in red the 10 lowest orders”

要在 Excel 中完成“Highlight in red the 10 lowest orders”的任务,可以使用条件格式(Conditional Formatting)。以下是详细步骤: 步骤 1:选择数据范围 打开包含订单数据的工作表。选中包含订单金额或数量的单元格范…

留学生交流互动系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…

Junit如何禁用指定测试类,及使用场景

在JUnit中禁用指定测试类可以通过多种方式实现,具体取决于使用的JUnit版本(JUnit 4 或 JUnit 5)。以下是针对两个版本的详细说明以及它们可能的使用场景: JUnit 4 禁用整个测试类 可以使用Ignore注解来忽略整个测试类。这将导致…

算法基础一:冒泡排序

一、冒泡排序 1、定义 冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。 …

Spark大数据开发与应用案例(视频教学版)(一)

作者:余辉 简介:余辉,硕士毕业于中科院,从事IT行业12年。专注于大数据和机器学习。在数据团队担任过的角色:研发、架构师、负责人、讲师。数据知识产权:出版大数据书籍【1】本,论文【2】篇&…

跨域请求问题

跨域请求简介 跨域请求:通过一个域的JavaScript脚本和另外一个域的内容进行交互 域的信息:协议、域名、端口号 同域:当两个域的协议、域名、端口号均相同 如下所示: 同源【域】策略:在浏览器中存在一种安全策略就是…

探索开源项目 kernel:技术的基石与无限可能

在开源的广袤世界中,有一颗璀璨的明星——kernel(https://gitee.com/openeuler/kernel),它宛如一座技术的宝藏,蕴含着无数的智慧与创新,为众多开发者所瞩目和敬仰。 一、初窥 kernel 项目 当我第一次接触…

Spring Boot Actuator、Spring Boot Actuator使用、Spring Boot Actuator 监控、Spring程序监控

SpringBoot四大核心之actuator——程序监控器 1. 添加 Spring Boot Actuator 依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> 2. 配置 …

C++“STL之String”

​ &#x1f339;个人主页&#x1f339;&#xff1a;喜欢草莓熊的bear &#x1f339;专栏&#x1f339;&#xff1a;C入门 目录 ​编辑 前言 一、STL简介 1.1 STL是什么&#xff1f; 1.2 STL的版本&#xff08;这个不是很重要了解即可&#xff09; 1.3 STL的六大组件 二…

语言模型评价指标

1. BLEU&#xff08;Bilingual Evaluation Understudy&#xff09; 目标&#xff1a;衡量生成文本和参考文本之间的词汇相似性。 计算步骤&#xff1a; N-gram 匹配&#xff1a; 将生成文本和参考文本分解成 1-gram、2-gram、…、N-gram&#xff08;通常取到 4-gram&#xff…

2-199基于Matlab-GUI的混合粒子群算法求解TSP问题

基于Matlab-GUI的混合粒子群算法求解TSP问题&#xff0c;多种路径可选&#xff0c;可设置微粒数目、迭代次数&#xff0c;动态展示路径规划过程及迭代曲线&#xff0c;得到叫佳的路径&#xff0c;输出最优路径序列及最终距离。程序已调通&#xff0c;可直接运行。 2-199基于Ma…

【ArcGIS Pro】完整的nc文件整理表格模型构建流程及工具练习数据分享

学术科研啥的要用到很多数据&#xff0c;nc文件融合了时间空间数据是科研重要文件。之前分享过怎样将nc文件处理成栅格后整理成表格。小编的读者还是有跑不通整个流程的&#xff0c;再来做一篇总结篇&#xff0c;也分享下练习数据跟工具&#xff0c;如果还是弄不了的&#xff0…

2412d,d语言中写汇编

原文 嗨,我只是想共享该要点,它展示了如何在ASM中用D编写你好. D中写汇编非常方便!这是我写的: extern(C) int main() {auto hip "hello D\n".ptr;size_t len 8;//write(1,消息,长度)asm {mov RDX, len;//缓冲长度mov RSI, hip;//消息缓冲mov EDI, 1;//Stdout文描…

VM虚拟机配置ubuntu网络

目录 桥接模式 NAT模式 桥接模式 特点&#xff1a;ubuntu的IP地址与主机IP的ip地址不同 第一部分&#xff1a;VM虚拟机给ubuntu的网络适配器&#xff0c;调为桥接模式 第二部分&#xff1a;保证所桥接的网络可以上网 第三部分&#xff1a;ubuntu使用DHCP&#xff08;默认&…

C++软件设计模式之观察者模式

观察者模式的动机意图 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了对象之间的一种一对多的依赖关系&#xff0c;使得当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都能够自动收到通知并进行相应的更新。 动机…

评分模型在路网通勤习惯分析中的应用——启发式搜索(2)

接上文《评分模型在路网通勤习惯分析中的应用——提出问题&#xff08;1&#xff09;》&#xff0c;本文内容主要针对上文提出的问题解决思路&#xff0c;详细讨论每一步骤中的具体处理措施。 4、问题的详细解决过程 4.1、对地图数据进行结构化 地图的本质是一种有向加权图结…

Mysql(MGR)和ProxySQL搭建部署-Kubernetes版本

一、Mysql(MGR) 1.1 statefulSet.yaml apiVersion: apps/v1 kind: StatefulSet metadata:labels:app: mysqlname: mysqlnamespace: yihuazt spec:replicas: 3serviceName: mysql-headlessselector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:affinity:p…