1. 引言
随着信息技术的发展,人们使用电子文本信息进行数据分析的场合越来越多,对于文本内容的准确性要求越来越高,文本自动校对技术应运而生。该技术已广泛应用于各种领域,如电子法律文书 [1] 、语音识别后的文本 [2] 以及媒体新闻言论 [3] 等内容的纠错。文本自动校对技术逐渐成为自然语言处理领域的重要研究方向之一。
中文文本错误类型主要包含以下六种:1) 发音错误,即同音或近音字错误;2) 形似错误,指字形相似的字;3) 字序颠倒;4) 多字少字;5) 语法错误,如主谓搭配不当等;6) 知识错误,如“四川省省会绵阳”。前四种错误类型可以归属为文本字词级错误,后两种则需要对语句结构进行理解分析。目前文本校对技术大多针对前两种错误类型进行研究。
中文文本校对技术的研究 [4] 始于20世纪90年代,目前已有很多有效的方法被提出,且大多遵循错误检测–错误纠正的模型框架。主流文本自动校对模型共有两种,即传统语言模型 [5] 和深度学习语言模型 [6]。前者提供了一种规则式检错、纠错方法,不需要大量标注数据从而易于实现落地,但模型过于稀疏且泛化能力差。深度学习模型可以实现长距离依赖,从而避免由数据稀疏导致的OOV (out of vocabulary,词典溢出)问题,它使用一个端到端的网络结构依次进行检错和纠错。然而该类模型的可解释性较差,且训练强度依赖于硬件环境和标注数据,训练时间较长。
中文具有较高的复杂性 [7],普通话包含上万个常用字符,不同上下文中汉字读音以及词语使用也会发生变化,因此中文文本自动校对技术的研究是一项复杂的任务。同时在实际应用中,纠错技术常作为文本预处理中的一个环节,则其时效性也极为重要。综上所述,在标注资源、硬件条件受限的情况下,如何提高文本校对的准确率、召回率,缩短模型训练时间,扩展文本校对类型成为了当下急需解决的问题。
2. 技术现状
基于传统语言模型的中文文本自动校对技术的相关研究已有不少,石敏等人 [8] 提出了一种基于决策列表的方法,使用同音词训练语言模型,然后从列表中选取正确的同音词,但该方法只能纠正同音词错误,对于其它类型错误无能为力;Yu等人 [9] 使用双向字符级N-gram语言模型对句子中每个字符进行打分,得分低的视为错误位置;赵海等人 [10] 使用混淆集替换的方式做模糊匹配,并通过求解最短路径进行字词错误的校对。王琼等人 [11] 提出一种基于改进的N-gram模型和专业术语查错知识库的查错算法,增强模型对散串错误的查错率。王浩畅等人 [12] 基于语料库和CRF算法建立了N-Gram模型进行语法错误检测。以上这些基于规则词典、语言模型的校对方法可以很好地满足工程化时效性要求,但是准确率和召回率有待提高,而且纠错类型一般只为错别字、近音字等,并不适用于多字、少字和字序颠倒等错误。
随着深度学习的发展,越来越多的有监督语言模型被应用于文本自动校对技术。郝亚男等人 [6] 提出了一种基于神经网络和注意机制的中文文本校对技术,利用双向门控循环神经网络进行特征提取,可以纠正文本的语义错误;龚永罡 [13] 团队提出了一种基于Seq2Seq和Bi-LSTM结合的深度学习模型,可以有效地处理文本错误以及语义错误。然而RNN提取的是文本的序列化分布式特征,因此在长距离序列中存在信息丢失问题。龚永罡等人 [14] 又提出了Transformer模型,沿用经典的Encoder-Decoder结构,使用Self-Attention机制,提高了校对性能。百度Ernie-CSC文本纠错模型 [15] 改进了Transformer框架,提出了MLM-phonetics算法,使用海量标注数据(约10 TB)进行预训练,又在超十万级的数据上进行迁移学习,可以很好地纠正广域文本字词级错误。基于深度学习的方法虽然在学术上取得了很大进展,但是受时间和资源的限制,很难应用落地。除此之外,端到端的模型无法在训练后进行人工干预,导致不能对错纠、误纠等结果进行反馈与修正。
针对以上问题,本文从工程应用角度出发,提出了引入反馈机制的中文文本校对技术。实验结果表明该方法提高了文本纠正准确率与精确率,兼容多种文本错误类型,大大缩短了模型训练时间,这充分证明了该方法的有效性。下面将详细介绍本文提出的技术方法。
3. 中文文本校对技术
完整的文本自动校对技术流程见图1,首先对输入文本进行错误检测,使用交叉位置融合算法定位错词索引,然后将错误位置信息输入到基于多通道候选词构建策略以及反馈机制的文本错误纠正模型中,便得到了纠正后的输出文本。本文提出的方法加入了迭代思想,即对输入文本进行循环检错与纠错,并用纠正文本作为下一次的输入,直到纠正文本与输入文本相同,或循环次数大于5则停止。

Figure 1. Automatic text proofreading process
图1. 文本自动校对过程
下面将详细介绍技术流程中的文本错误检测、文本错误纠正两个算法步骤,以及隐含的校对错误反馈机制和中文知识库构建方法。
3.1. 文本错误检测
错误检测模型首先对输入文本进行归一化操作,即全角转半角,英文标点转为中文标点等,然后将归一化后的文本分别输入到知识库和语言模型两种检错算法中,最后将两种算法得到的错词索引位置进行交叉融合。
3.1.1. 错误索引定位
基于知识库的检错:对输入文本进行分词操作,得到分词集,对于集合中每一个长度大于1的中文分词,若它不是停用词,也不在常用词库中,则视其为疑似错词,记录该词的起止位置。
基于语言模型的检错:本文对原始Berkeley语言模型进行了优化:计算得到输入文本的2-gram和3-gram得分向量,分别记为
和
,向量长度都为N (表示输入文本的总字符数),进而由式(1)得到整个句子的得分向量
。经实验发现,3-gram得分较2-gram对句子错误检测具有更重要的作用,因此本文在融合N-gram得分时,为3-gram添加了权重。
(1)
通过平均绝对离差法(MAD)从
中计算出疑似错字的位置:如式(2)所示,可得到绝对离差向量
,其中
表示
的中位数,进而可以得到
的中位数
。若
为0,则表示没有检测到错误,否则继续计算
。计算过程如式(3)所示,其中RATIO为可调节参数,本文根据实验值取ratio = 0.6745。
(2)
(3)
通过计算出的
与另一个可调节参数THRESHOLD进行对比,判断出错误位置,判断方法如式(4)所示,其中THESHOLD实验取值为2.4。最后将检测出错误的文本索引位置
记录下来,过滤掉非中文字符以及常用词典检错中已经记录过的位置,便得到了基于语言模型的检错结果。
(4)
3.1.2. 交叉位置融合
将基于知识库和模型分别得到的检错信息进行融合,由知识库得到的错误信息是错词的起止位置,而由模型得到的是错字位置,将索引位置连续的错词、错字连接起来,然后对连接结果进行分词操作,便得到了疑似错词候选集。
最后,使用专用词典和用户自定义错词库(知识库信息见3.4节)对候选集进行过滤:若疑似错词及其上下文文本构成了专用词,或者在不满足不转换规则的情况下构成了自定义错误词,则移除该疑似错词,最后得到的便是需要进行后续文本纠错处理的一系列疑似错词。
3.2. 文本错误纠正
错误纠正模型将对上阶段得到的所有疑似错词进行逐一纠正,纠正过程分为两步,第一步是使用多通道候选词构建策略得到候选词集,第二步是通过得分修正算法计算最优候选词。
3.2.1. 多通道候选词构建策略
针对四种错误类型,本文设计了不同候选词构建策略,如图2所示。

Figure 2. Multi-channel candidate construction strategy
图2. 多通道候选词构建策略
字序颠倒:只针对疑似错词长度大于1的情况。
多字:只考虑多一个字的情况,若错词长度为1,则候选词仅为空字符串。
少字:只考虑少一个字的情况,对于错词中的每一个字,查找常用词典中包含该字的二字常用词,然后用这些词替换这个字。图中例子即为使用常用词
和
替换原本的
。
错别字:包含拼音错误候选词集和字形错误候选词集。对于疑似错词中的每一个字,先获取它的所有相同及相似读音,然后得到这些读音的所有字的集合,便是该字的拼音字集。设
的拼音字集为
,
的拼音字集是
,则该错词的拼音错误候选词集为
。字形错误候选词集构建方法与之类似,使用形近字进行替换组合即可。需要注意的是,若组合后的词与原错词的编辑距离大于1,则该组合词必须在常用词典中才能加入候选词序列。这不仅可以降低误纠率,还能大大减少候选词的数量,提高纠正效率。
通过以上构建策略,取字序颠倒、多字、少字、错别字候选集的并集便得到了一个疑似错词的全部候选词集。
3.2.2. 计算最优候选词
本文通过使用语言模型计算句子困惑度来评价句子合理性。困惑度(PPL)计算过程如式(5)所示,其中S表示Sentence,N是句子长度,
第i个词的概率。PPL越小,
越大,则该Sentence出现的概率就越大,句子越具合理性。
(5)
使用语言模型计算原句评分记为OriginS,然后用每一个候选词替换疑似错词并同样地计算句子得分,得分越小句子越合理。如果是少字错误,则需要对得分进行修正,即将计算出的句子得分乘以修正系数,本文设为6。设
是所有与疑似错词编辑距离为1,且得分最低(记为
)的候选词,
是编辑距离大于1的得分最低(记为
)的候选词。式(6)得到的SourceS是与候选词进行评分比较的对象,其中MODIFY是可调节参数,它控制候选词优于疑似错词的程度,值越小则候选词对句子困惑度降低的程度就需越大,本文对该参数进行调参实验的结果见第三章第三节。最优候选词的选择如式(7)所示,若两个最低候选词得分都比SourceS大,则视疑似错词无错,不予纠正。
(6)
(7)
对检错阶段给出的一系列疑似错词进行逐一纠正,然后使用最优候选词替换原错词,便得到了模型纠正文本。在经过模型校对之后还需要使用知识库进行纠正,在不满足所有的不转换规则条件下,将自定义错词修改为自定义正确词,便得到了输入文本的最终纠正文本。
3.3. 校对错误反馈机制
文本校对的结果存在三种错误情况,即误纠(正确词被纠错)、错纠(错误词被纠错)以及少纠(错误词未被纠出),针对以上错误,本文设计了专用词典和自定义错词库两种表结构,可提供给用户自行维护,进行校对结果错误反馈。基于知识库的反馈机制如图3所示。自定义错词库的不转换规则指的是,这个错词在某些特定上下文关系中,不需要进行纠正。

Figure 3. Feedback mechanism of proofreading errors based on knowledge base
图3. 基于知识库的校对错误反馈机制
3.4. 知识库构建
本文构建的知识库由8个文本校对相关词典组成,分别是常用词典(超34万个词)、停用词典(近1400个词)、字音词典(8500个汉字及其读音)、同音字词典(400个拼音及其同音字)、近音字词典(256组相似读音)、形似字词典(370组相似字)、专用词典和用户自定义错词库。专用词典和用户自定义错词库初始化时不包含任何数据,是用户使用该文本校对方法过程中自行添加的。
4. 实验
4.1. 数据集
本文使用了全网新闻数据(SogouCA)、搜狐新闻数据(SogouCS)和人民日报2014语料库等共计9GB的开源文本作为语言模型的训练数据。本文改进的语言模型为无监督学习模型,在CPU环境下完成训练耗费近5个小时,这远远低于同数据量下的ErnieCSC训练时间,CPU耗时20天,GPU耗时2天。
错别字校对评估使用的数据集是SIGHAN7CSC [16],它是一个中文文本纠错竞赛提供的官方数据集,含有错误例句1000条,平均每句包含70个字,每句字词级错误率为2%。
此外,由于之前鲜有多字、少字和字序颠倒这三种文本错误的研究,缺乏公开数据集,所以为了验证本文模型在这三种错误上的纠正准确率,依据搜狐新闻自构建了专项测试集,测试集详情见表1。

Table 1. Three special test data sets
表1. 三种专项测试数据集
4.2. 评估指标
评估指标LA (位置准确度)、CA (纠正准确度)以及CP (纠正精度)的计算方法见公式(8)、(9)、(10)。其中T表示包含错误的句子总数,P表示模型给出了纠正意见的句子总数。检错正确指的是检测出的错误位置必须与实际错误位置完全一致,少一处或多一处都不算检错正确。纠错正确指的是不包含任何错纠、少纠、误纠结果。
LA = 检错正确的句子数/T (8)
CA = 纠错正确的句子数/T (9)
CP = 纠错正确的句子数/P(10)
4.3. 实验结果与分析
4.3.1. 模型调参实验结果
前文介绍了文本纠错过程中有一个可调节参数MODIFY,它控制候选词优于疑似错词的程度。对其进行调整,在SIGHAN7CSC数据集上得到的实验结果如图4所示。可以明显看出,MODIFY值与纠正精度,即CP值呈负相关。这是因为该值是模型修改句子的阈值,所以它越小则模型对检错位置进行修改的概率就越小,这会导致最终进行纠正的句子总数变少,则纠正精度会增大,但由于纠错正确的句子数也在减少,因此LA和CA大大降低。平衡三种评估指标可以得到MODIFY的最佳值为0.35。其它的可调节参数,如THRESHOLD等,由于篇幅原因不进行实验结果的展示,只给出最佳实验值。

Figure 4. Model MODIFY parameter adjustment result diagram
图4. 模型MODIFY调参结果图
4.3.2. 与其它模型结果对比
SIGHAN7CSC上的实验结果如表2所示,包含了传统语言模型、深度学习模型以及官方参赛队伍的结果。可以明显看出,本文提出的模型在LA、CA以及CP评估指标中均取得了最优的实验测试结果,分别提升了6.67%、6.39%以及5.17%,这充分证明了本文提出方法的优越性。在实际应用过程中,通过校对错误反馈机制,准确率和精确度还会继续上升。

Table 2. Comparison with other models
表2. 与其它模型对比结果
4.3.3. 专项测试实验结果
本文提出的中文文本校对方法不仅适用于上述字形字音错误,还可以纠正字序颠倒、多字以及少字的情况。针对自构建的三种专项测试集,实验结果及分析如下。
表3给出了针对多字错误的专项测试结果,可以明显看出LA与CA是一致的,也就是说错词位置检测正确的句子全部都被正确纠正了,但是存在一些未被检测出的错误。此外CP值,即纠正精度很高,剩下不足7%的未被正确纠正的句子多为人名误报。

Table 3. Experimental results of multi-word test
表3. 多字测试实验结果
表4给出了针对少字错误的专项测试结果。由于同一个字在常用词库中可能包含多个意义相似的词,如算法把“反腐败争”修改为了“反腐败斗争”,然而正确答案是“反腐败争斗”。这会导致被正确检错的位置无法被正确纠正,即CA会低于LA,同时纠正精度CP也会降低。

Table 4. Experimental results of missing-word test
表4. 少字测试实验结果
表5给出了针对字序颠倒的专项测试结果,LA和CA都达到了80%以上,CP达到了97%,这充分说明了文本提出的字序颠倒错误纠正策略的有效性与准确性。

Table 5. Test results of word order reversal
表5. 字序颠倒测试实验结果
5. 结束语
本文提出的引入反馈机制的中文文本自动校对技术在公共数据集和自构建数据集上均取得了最优的实验结果,这充分说明了该方法的可用价值与研究意义。除此之外,本文在实际应用基础上设计实现了校对结果错误反馈机制,使得自动校对方法流程更具容错性和交互性,使得文本自动校对技术作为数据预处理的一环更具有工程应用能力与价值。
本文的研究成果对于有相关需求的人员是一个完整而详细的参考,后续还有很多可以继续研究和优化的方向,例如降低人名、地名误报,提高错误位置检测准确率,以及词与词的颠倒问题纠正等。