A Hybrid Approach to Automatic Corpus Generation for Chinese Spelling Check

一种用于中文拼写检查的自动生成语料库的混合方法

Abstract

中文拼写检查(CSC)是一项具有挑战性但又有意义的任务,它不仅可以作为许多自然语言处理(NLP)应用程序中的预处理,而且可以促进人们在日常生活中阅读和理解正在运行的文本。但是,为了将数据驱动的方法用于CSC,存在一个主要限制,即注释语料库在应用算法和构建模型方面不够。在本文中,我们提出了一种构造具有自动生成的拼写错误的CSC语料库的新方法,该拼写错误在视觉上或语音上都类似于字符,分别对应于基于OCR和ASR的方法。根据构建的语料库,针对三个标准测试集,针对CSC训练和评估了不同的模型。实验结果证明了语料库的有效性,因此证实了我们方法的有效性。

Introduction

拼写检查是检测和纠正正在运行的文本中的人为拼写错误的一项关键任务。这项任务对于NLP应用至关重要,例如搜索引擎和自动文章评分,原因是拼写错误不仅影响阅读,而且有时会完全改变文本片段中传递的含义。特别是在中文语言处理中,拼写错误可能会更加严重,因为它们可能会影响基本任务,例如分词和词性标注等。导致拼写错误的所有原因中,主要的一个原因是在日常文本中误用了中文输入法。

table 1

例如上表,第一个不正确的句子包含一个误用的字符己(ji2)1,其形状与其相应的正确字符相似,即已(yi3)。在第二个不正确的句子中,装箱的拼写错误她(ta1)在语音上与其对应的正确单词他(ta1)相同。

由于可用数据集的数量有限,因此在该领域很少采用许多最新的监督模型,这阻碍了CSC的发展。目前,一些主流方法仍集中在使用无监督方法上,即基于语言模型的方法。结果,CSC技术的发展受到限制,因此到目前为止CSC的性能还不能令人满意(。为了提高CSC的性能,最大的挑战是无法使用带有标记的拼写错误的大型语料库,这对于训练和应用监督模型具有很高的价值。缺少数据的问题主要是由于注释拼写错误是一项昂贵且具有挑战性的任务。

为了利用数据驱动的方法促进CSC,本文提出了一种新颖的方法,该方法可自动构建带有标记拼写错误的中文语料库。具体来说,鉴于中文拼写错误主要是由于视觉和语音上相似字符的滥用,我们建议使用基于OCR和ASR的方法来产生上述两种类型的误用字符。请注意,不同于检测错误句子中的拼写错误,我们提出的方法旨在自动生成带有注释的拼写错误的文本,如表1所示。借助基于OCR和ASR的方法,CSC语料库使用带注释的视觉和语音拼写构造错误。

在我们的实验中,定性分析表明,OCR或ASR工具包错误识别的汉字对于人类来说并非微不足道,而有趣的是,人类很可能在日常书写中犯此类拼写错误。在定量比较中,我们将中文拼写检查放入序列标签问题中,并实施监督的基准模型(即双向LSTM(BiLSTM)),以评估CSC在三个标准测试数据集上的性能。实验结果表明,在我们的生成语料库上训练的BiLSTM模型比在标准测试数据集中提供的训练数据集上训练的BiLSTM模型具有更好的性能。为了进一步简化CSC任务,我们通过收集每个字符的所有错误变体及其对应的正确引用来构造混淆集。纠错集的有效性在纠错任务中得到了证实,表明所构造的混淆集在许多现有的中文拼写检查方案中非常有用。

自动数据生成

中文拼写错误主要是由于视觉或语音上相似字符的误用引起的(、。视觉上相似的字符的错误(此后称为V型错误)是由于在视觉上相似的字符对的突出。原因是,中文作为一种象形文字,由六万多个字符组成。它们由数量有限的基团和成分构成。至于由于误读音素相似的字符而引起的错误(此后称为P样式错误),我们注意到汉字的发音通常由拼音定义,拼音包括首字母,结尾和音调4。现代汉语中只有398个音节,成千上万个字符。结果,许多汉字共享相似的发音,这进一步导致了P样式错误的突出。在本节的其余部分,我们将分别在2.1和2.2节中描述如何生成这两种类型的错误

基于OCR的生成方法

受到光学字符识别(OCR)工具可能会误识别那些与视觉上相似的字符的观察的启发,如下图所示我们有意模糊具有正确字符的图像,并在其上应用OCR工具以产生V型拼写错误。

figure 1

我们从中随机选择1到2个字符作为目标特征,以供Tesseract检测,称为Ctargets。具体而言,除了中文字符外,其他字符(如标点符号和外来字母)均被排除在外,并且我们还会根据中文维基百科语料库的统计数据过滤那些低频的汉字。其次,我们将Ctarget从文本传输到100×100像素的图像,即每个生成的图像具有相同的大小。第三,我们使用高斯模糊对产生的图像中的一个区域进行随机模糊处理,目的是引导OCR工具包犯错误。最后,我们使用Google Tesseract识别模糊的图像。一旦识别出的结果与原始结果不匹配,就会生成V型错误,该错误将用于替换句子中的原始字符,从而导致句子中出现V型拼写错误。经过上述步骤,我们获得了每个句子的拼写错误以及正确的参考。

用于基于OCR的方法的原始文本主要来自报纸文章,这些文章是从官方报纸网站《人民日报》 上抓取的,据报道其中的文章均经过严格的编辑过程,并被认为是正确的。我们使用句点结尾的标点将这些文本分成句子,例如句点(。),问号(?)和感叹号(!)。我们总共获得50,000个句子,每个句子包含8到85个字符,包括标点符号。然后,这些句子将按照我们之前所述的基于OCR的方法进行处理,从而产生一个带注释的语料库,其中包含约40,000个带注释的句子,其中包含56,857个拼写错误。请注意,在我们的实验中,我们发现即使对部分图像进行模糊处理,OCR工具箱仍可以正确检测生成的图像中的字符。

尽管基于OCR的方法工作顺利,但仍有一些案例值得进一步研究。通过使用这种方法分析生成的拼写错误,我们发现在形状方面,OCR工具包存在一些错误识别的字符,这些字符与它们的相应正确字符有很大差异。例如,对于包含字符领(ling3)的模糊图像,Tesseract错误地将其识别为铈(shi4),其形状与领(ling3)完全不同。因此,应将这些情况排除在外,因为人类不太可能犯此类错误。为了解决这个问题,我们提出了一种新颖的方法,通过基于汉字笔划计算编辑距离来判断两个字符在视觉上是否相似。类似于由字母组成的英文单词,中文字符可以分为不同的笔画。为此,我们从在线词典中获得汉字笔画。根据经验,给定两个汉字c1和c2,我们将0.25 *(len(c1)+ len(c2))设置为阈值η,其中len(c)表示汉字c的笔画数。如果两个字符的编辑距离大于阈值η,则我们认为它们的形状不相似。为了更好地说明这一点,图2显示了一个坏的情况和一个好的情况。

figure

基于ASR的生成方法

与OCR工具类似,自动语音识别(ASR)工具也可能会将字符误认为发音相似的其他字符。为了构建带注释的P型错误语料库,我们遵循与V型错误和OCR工具相似的灵感,并采用了如图3所示的管道。但是,鉴于各种语音识别数据集的可用性,我们采用一种更简单的方法。我们利用一个公开可用的普通话语料库),其中包含约14万个带有语音的句子。我们使用语音识别工具包将话语转录为可识别的句子。最后,通过将识别出的句子与原始句子进行比较,我们可以识别出识别结果是否正确。如果不是这样,它们可能会被误认为是错误结果,并被用于构建带有P样式拼写错误的语料库。

figure3

对于生成的Pstyle错误,我们还确定了一些不良情况,这可能会带来很多噪音。为了提高生成的语料库的质量,因此需要一种解决方案以将其删除。表2给出了三种情况,其中一种情况良好。我们描述解决这些问题的方法如下。

table 2

首先,我们丢弃所有与情况1类似的错误识别结果,与相应的参考句子相比,长度不同。情况2在原句中具有完全不同的发音及其相应的字符。这种情况不能满足我们生成P型错误的要求。为此,我们从在线汉语词典中通过拼音获得汉字的发音。

然后,很容易识别出错误识别的字符与原句子中的相应字符是否具有相似或相同的发音。具体而言,就拼音而言,当两个字符具有相同的首字母和结尾但有不同的音调时,即da2和da1,它们的发音相似。第三,每篇学生论文平均可能有两个错误,这反映了一个事实,即每个句子平均不会包含两个以上的拼写错误。因此,我们删除了那些错误识别的结果,其中包含两个以上不正确字符的错误识别,如情况3所示。经过上述步骤,我们生成的语料库总共包含超过7K个P样式的拼写错误。我们将其表示为D-asr,并在表3的D-asr列中显示其统计信息。

Evaluation

Benchmark Data

image-20200907154046686

Qualitative Analysis

为了评估生成的语料库是否包含人为容易犯的错误,我们从中随机选择300个句子进行人工评估,其中D-ocr包含150个句子,D-asr包含150个句子。邀请三位讲中文的大学生为学生,阅读和注释这些句子中的错误。然后,我们从句子水平和错误水平两个层次分析了三名大学生的注释结果。在句子级别,仅当识别出句子中的所有错误时,我们才认为该句子具有正确的注释。在错误级别,我们计算出正确注释的错误数占错误总数的百分比。

下表显示了300个句子的信息及其注释结果。表中的平均召回率表明,三名学生对D-asr的错误的识别率高于D-ocr,这在一定程度上表明P型错误比V型错误更容易被发现。 。此外,我们观察到三名志愿者平均未能识别出约36.9%的错误,这可能表明我们生成的句子包含一些可能由人为错误的具有挑战性的错误。这样的错误对于CSC来说很有价值,因为它们是人们书写或打字时潜在的真实案例。

image-20200907154230060

为了定性分析为什么人类无法检测到某些拼写错误,我们对一个示例句子进行了案例研究,其中包含三个学生没有发现的某些拼写错误。该句子是政企部分是一种痼疾(翻译:政治和行业部分是一种慢性疾病),其中第三个字符部(bu4)是拼写错误,应更正为不(bu4)。

Quantitative Comparison

Chinese Spelling Error Detection

在本节中,我们通过中文拼写检测来评估生成的语料库的质量。我们首先探讨不同比例的Pstyle和V型错误如何影响语料库的质量。然后,我们将生成的语料库与三个共享任务中提供的训练数据集的检测性能进行比较。

我们将中文拼写错误检测转换为字符序列标记问题,其中正确和不正确的字符分别标记为1和0。然后,我们实施一个监督序列标签模型,即双向LSTM(BiLSTM),作为评估不同语料库质量的基准。 BiLSTM的隐藏大小设置为150,其他超参数在包含10%从训练数据中随机选择的句子的展开集上进行调整。我们使用RMSprop作为优化器,最小化模型的分类交叉熵损失。

在不同比例的D-ocr和D-asr上训练的BiLSTM的性能旨在探索受P型和V型拼写错误的分布影响的生成语料库的质量。下图显示,当训练数据集的大小固定(= 40k)时,不同比例的P型和V型错误会获得不同的F1分数,这表明P型和V型拼写错误的比例会影响质量生成的语料库。具体而言,观察到与其他比例比率相比,D-ocr和Dasr的比率为4:6在三个测试数据集上实现了最佳性能。另外,对于两个特殊比例(0%和100%),可以看到在相同语料库大小的情况下,在D-asr上训练的BiLSTM模型比在D-ocr上训练的BiLSTM模型具有更好的性能,这表明P-样式拼写错误对语料库的质量有更大的贡献。该实验结果符合先前的结论(Liu等,2009,2011),即大多数拼写错误与发音有关。

image-20200907154714235

训练数据集的大小对于模型训练很重要。对于Tst13,D-10k的F1得分要高于Trn13。一个主要原因可能是Trn13(= 350,请参阅表3)的大小,它比测试数据集小得多。在这种情况下,该模型无法学习到足够的信息,从而导致无法检测到看不见的拼写错误。此外,我们看到随着生成的语料库的大小不断扩大,检测性能显示出稳定的提高。因此,对于数据驱动的方法,使用足够多的具有不同拼写错误的实例来训练我们的模型非常重要。

如果训练数据集包含太多“嘈杂”的拼写错误,则准确性可能会受到损害。从下表中可以看出,尽管总体性能(F1分数)随着生成的语料库的大小而不断提高,但准确性和召回率却呈现出不同的变化趋势。可以观察到,随着训练数据集大小的增加,该模型在召回方面实现了更好的性能。一个可能的原因是,随着包含训练数据集中包含更多拼写错误的更多实例,测试数据集中看不见的拼写错误的数量减少了,从而有助于模型检测更多的拼写错误。但是,精度的提高并不像召回那样明显。具体来说,在Tst14和Tst15中,D-50k的精度不比D-40k高。一个可能的解释是,对于包含更多拼写错误实例的较大训练数据集,这可能导致模型误识别一些更正确的字符,从而导致精度降低。

与人工人工标注的有限训练数据集相比,我们生成的大型语料库可以实现更好的性能。从下表中,我们可以看到,在生成的语料库达到一定大小的情况下,它可以训练出一种模型,该模型具有比人为标注的更好的检测性能。相应共享任务中提供的手动注释的数据集。在某种程度上,这证明了我们生成的语料库的有效性,从而证实了我们方法的有效性。

image-20200907154854549

Chinese Spelling Error Correction

一旦检测到中文拼写错误,我们将对其进行更正。根据先前的研究,我们采用混淆集和语言模型来处理中文的taks拼写错误更正。特别是,通过收集每个正确字符的所有错误变体,我们为所有涉及的正确字符构建了一个混淆集,表示为Ours。另外,为了说明其有效性,我们将其与两个公开可用的混淆集进行比较,即Con1和Con2。

我们对两种类型的错误案例(即误报案例和误报案例)进行错误分析,这两种错误案例分别影响CSC的准确性和召回率。对于误报的情况,我们发现一个普遍的问题是,对于某些固定用法(例如成语,短语和诗歌),我们的模型通常会给出错误的结果。例如,在中国诗句的一句风雨送春归(译文:风雨护送春天的离开)中,送被错误地识别为无关紧要的字符。通过检查所提出的方法生成的带注释的语料库,我们观察到在大多数情况下,迎春是更常见的匹配项,并且在生成的语料库中与“春天”同时出现时,发送被注释为拼写错误。为了提高准确性,处理此类情况的一种可能方法是利用一些外部知识,例如构建一些特殊的中文用法。对于虚假否定案例,以“想想健康,你就会知道应该要吸烟了”(翻译为:考虑到自己的健康,您将意识到应该戒烟)为例,其中应将禁令更正为戒烟。但是,由于戒和禁在视觉上和语音上均不相似,因此提出的语料库生成方法无法构造此类拼写错误,因此可以理解,训练后的模型无法检测到此类拼写错误。另外,在词级上,吸烟(翻译:禁止吸烟)和戒烟(翻译:戒烟)是两个相关的常见中文单词;它需要合并更多上下文以提高召回性能。与我们对基于字符的语料库生成的研究相似,一种潜在的解决方案是构造一个单词级带注释的语料库,以便更好地检测此类拼写错误。

Conclusion

通过所提出的方法生成的大规模注释数据集可以潜在地用作帮助改善CSC数据驱动模型性能的有用资源,因为在应用任何算法或模型之前,大规模注释数据的可用性是至关重要的第一步。在本文中,我们没有为CSC的模型设计投入太多的精力,这是我们未来的工作。为了促进社区中的相关研究并使其他研究人员受益,我们在以下工作中公开提供了此工作中的代码和数据:https://github.com/wdimmy/Automatic-Corpus-Generation。

想法

作者在生成错误数据时,没有采用传统的随机替换同音、谐音、形近字的方法,而是汉字的输入方法入手,直接在OCR和ASR上生成。从一定程度上,这模拟了现实生活中OCR和ASR上错别字的产生,但是否能准确反应输入法打字产生的错误呢?