百分点认知智能实验室:智能校对的技术原理和实践
编者按 :大数据时代下各种文本信息爆炸,传统的文本分析处理工作逐渐被计算机取代。文本数据量越大,其中所包含的错误的总数也越多,通过校对工作来纠正文本中的错误显得尤其重要。传统的校对主要依赖人工,通过人来发现和纠正文本中的错误,人工校对效率低、强度大、周期长,显然已经不能满足目前文本快速增长的需求,智能校对系统在这个背景下应运而生。伴随着机器学习和自然语言处理技术的发展,使用算法模型解决文本校对问题成为可能。智能校对系统的研发,极大地减轻了审校人员的工作负担,让从前繁重的工作模式变得简单、轻松和高效。本文将从校对中遇到的技术问题出发,带领各位读者了解业界校对的技术方法,以及百分点认知智能实验室在校对算法方面的技术原理和实践经验。
本文作者:易显维 苏海波
一、校对系统的意义及难点
1. 校对系统意义
文本校对系统的研发成功有着重要的现实意义:
(1)文本自动校对能大大降低人工校对的成本,提高校对效率和质量。
(2)文本校对使得信息检索变得准确高效,只有正确的文本输入才能有效提高信息检索能力。
(3)具有广泛的应用领域和重要应用价值,可以用于文字编辑审稿、智能写作、智能搜索、智能问答系统等领域。
(4)文本校对是很多自然语言处理任务的基础,例如文本来源于 OCR 或者语音系统识别之后的结果,就需要先通过校对算法将其转化为正确的输入文本,才能进行后续的自然语言处理分析。
2. 校对系统的难点
文本自动校对是自然语言处理的主要应用领域之一,也是自然语言处理领域的研究难题。难点主要体现在:
(1)真实错误样本分布未知。该问题和其他自然语言处理问题或者模式识别问题有很大差异。其他自然语言处理任务都有客观存在的对应关系,即模型是靠识别固定的模式得到答案。但是在文本校对中,是从错误的句子或者词语出发找到正确的句子和词语,并不存在客观的对应关系,只能说不同的校对工作者会得出不同的答案,该答案的最终判定和校对工作者的文化水平和知识结构相关。由于是“错”找“对”,所以一个正确的字可能由于用户输入习惯不同产生不同的错误字,线上真实生产环境中的错误样本数据集中,错字到对字的分布规律随时都会发生变化,这让基于独立分布假设的机器学习在这个问题上遇到了挑战。
(2)领域范围广。由于公司业务服务于各行各业,所以校对中遇到的输入文本含有各个领域的专有名词,需要大量的专业知识词典用于纠正来自不同行业的输入用户的输入错误。另外在不同的专业领域内,语料的字符分布差异很大,训练模型时较难找到输入训练语料的分布平衡性,即不同来源的语料应该分别输入多少到模型中进行训练。
(3)性能要求高。具体体现在召回率、准确率、模型推理速度。召回率是校对系统性能的主要评测依据,用于描述在真实发生的错误中有多少错误能够通过算法找出来。准确率是良好客户体验的重要保证,试想一个准确率低通篇都是误报的系统必将极大地影响用户使用时的感受和降低用户使用的效率。模型推理速度快是系统服务客户的重要要求,如果校对模型的速度慢,对于在线使用校对服务的用户,体验就会特别差。
3. 校对系统解决的问题
上文描述了文本校对算法的难点,接下来我们将校对算法要解决的问题可以简单地分为以下几个方面:
(1)错别字:这个月冲值有优惠吗?我这个月重置了话费?请帮我查木月的流量;
(2)字词插入错误:《手机早晚日报》具体如何订阅和收费;
(3)字词删除错误:为什么我的卡又无缘无故的扣掉几块钱;
(4)词性搭配错误:他很兴致的回答了问题->他很有兴致的回答了问题(副词不能接名词);
(5)关联词搭配错误:只有提高经济实力,我们就能富国强民(“只有”只能搭配“才”, 不能搭配“就”);
(6)句型错误:通过这次学雷锋活动,使我们受到了很大的教育(缺主语);
(7)语义搭配错误:漫天飞雪,他戴着帽子和皮靴出门了(皮靴不能戴);
(8)标点符号错误。
由于汉字是象形文字,要将汉字这种字符集非常大的文字录入到计算机,需要人为设计的编码来表示,具体表现为各种输入法。常用的输入法主要是汉语拼音输入法和五笔输入法。
例如在汉语拼音输入法中,一个拼音对应多个同音或者近音字,输入过程中会因为粗心导致输入错误,这就成了汉语错字的主要来源。另外汉字中还有很多汉字形状相近或者写法相似,这表现为在五笔输入法中可能相近的汉字表示为同一编码,这造成了另外一个错字主要来源,即形近错别字。还有意义相近的汉字或汉语词语,被误用的成语习语也是校对任务中的高频错误。
二、业界主流解决方案
虽然国内关于中文文本校对的研究起步较晚,但目前不少的大学、科研机构和公司都已经开始投入资源来研究中文文本校对的相关技术和解决方案。他们大多采用的是字、词级别上的统计方法,也有一些语义级层面的探讨。
1. 解决思路
1.1 规则的思路
将中文文本校对分为两个步骤来解决:错误检测和错误改正。
错误检测:通过分词工具对中文进行分词,由于句子中含有错别字,所以分词的过程中会有切分错误的情况,通过散串来完成错误检测,形成错误位置候选。
错误改正:遍历所有疑似错误的位置,使用音近、形近词典来替换原词,通过语言模型计算新句子的困惑度,通过排序得到最优纠正词。
1.2 深度模型的思路
为了减少规则方法中的人工知识库构建成本,采用端到端的深度模型来完成错误句子到正确句子的改正是一个看似不错的解决方案。常用的模型有 BERT 的 MLM 任务,Seq2Seq 的翻译任务。他们的本质都是利用深度模型的强拟合能力,对文本进行向量表征,使得在特定上下文语境中,相对正确的字或词的排序尽量靠前。
2. 学术界方案介绍
2.1 HANSpeller++
HANSpeller 框架分为检测和纠错两部分,主要包含两个工作:对输入句子生成候选集和对候选集进行排序。框架流程图如下所示。
图 1. HANSpeller 框架图
在数据处理阶段,通过将长句子根据标点切分为短句,并且去掉非汉字内容,基于 SIGHAN-2013、SIGHAN-2014 数据集构建混淆集。在候选生成阶段,利用混淆集生成相应的候选集。根据同音、近音、形近等特征筛选候选集,保留权重较高的候选。权重计算方法如下,其中 P(c)表示在 c 这个字符可能出错的概率,edit_dist 表示编辑距离:
在候选结果排序阶段,通过初筛、精筛和排序三个步骤完成。初筛时用到的特征有 n-gram 特征、词典统计特征、编辑距离特征以及分词特征,利用这些特征进行逻辑回归分类预测。精筛时,用外部依赖数据、搜索引擎的搜索结果和英文翻译结果进行筛选。两次筛选后,保留最有可能的 top5 候选结果。最后采用 ngram 语言模型进行最终排序。
2.2 FASPell
传统的中文拼写纠错主要存在两个问题,纠错平行语料不足和混淆集不够充分。
FASPell 提出了一种解决中文拼写错误的新范式,抛弃了传统的混淆集转而训练了一个以 BERT 为基础的深度降噪编码器 DAE(denoising autoencoder)和以置信度-字音字形相似度为基础的解码器 CSD(confidence-similaritydecoder),可以有效缓解以上两点不足。模型架构及用例展示如下图:
图 2. FASPell 框架图
具体来说,利用预训练模型使用 DAE 来对 BERT 进行预训练,mask 句子中每个位置的字符获取候选集,通过上下文置信度信息,和字符相似度构建了一个解码器 CSD 去对句子中的每一个字符的候选集进行筛选。
对 BERT 的预训练策略与原始的 BERT 预训练方法一致,对句子按 15%的概率进行掩码。在微调阶段,对存在错误的句子采用两种方式进行 FINE-TUNE:①给定句子,将其中的错误字全部使用这个字本身进行掩码,并将预测目标设置为正确字。②对部分正确的字也使用字本身进行掩码,并将预测目标设为字本身。
FASPell 通过上下文的 confidence score 和字音的 similarity score 联合打分进行过滤。在 SIGHAN13、14、15 数据集上的实验,纠错均达到 SOTA 的效果。
2.3 MacBERT:MLM as correction BERT
MacBERT 对 BERT 的改进工作分为三个方面:①使用全词掩蔽和 N-Gram 掩蔽策略来选择候选 tokens 进行掩蔽,从单字符到 4 字符的掩蔽百分比为 40%、30%、20%、10%。②使用意思相近的单词来替换[MASK] token 掩蔽的单词,从而缓解预训练任务与下游微调任务不一致情况。③使用 ALBERT 提出的句子顺序预测(SOP)任务替换 BERT 原始的 NSP 任务,通过切换两个连续句子的原顺序创建负样本。
Macbert 在多项中文任务中的良好表现显示了特定预训练策略的重要性,而且该模型在校对任务中也有不错的效果。
2.4 SpellGCN
基于深度学习的预训练模型往往是建立在字词级别的语言建模上,而中文文本校对需要考虑字音字形等特征,而不仅仅是语义层面特征。为了充分利用错别字中的拼音相似和字形相似的特征,前文所述的 FASPell 的做法是在后处理阶段利用这些特征信息作为排序依据。而 SpellGCN 的做法是在预训练阶段将字音字形特征进行融合,使得大规模的无监督预训练过程和中文的校对任务特征能有效结合。模型架构图如下。
SpellGCN 的突出特点在于通过构建图神经网络的方式,构建了拼音相似图和字形相似图。通过卷积操作和注意力机制来实现字音字形的特征动态提取。在经过图卷积和注意力合并的操作后,SpellGCN 能够捕获字符相似性的知识。
图 3. SpellGCN 模型框架
2.5 PLOME
中文纠错主要有近音错误和形近错误两个类型错误。PLOME 为腾讯在 ACL 会议上提出的建模汉字在发音和字形上的相似性预训练模型。该预训练模型模型架构如下:
图 4. PLOME 框架图
为了建模汉字在发音和字形上的相似性,模型中引入了两个 GRU 子网络分别计算汉字的拼音向量和笔画向量,下图展示了这两个子网络的计算过程。模型的编码层和 BERT base 结构完全相同。
图 5. PLOME 中的 GRU 建模字音和字形
三、检错-纠错技术方案
我们的校对技术方案不同于许多“端到端”的校对方法,为了保证校对的高准确率,整体主要分为两步,即检错步和纠错步。检错步,目的是检测出文章所存在的错误位置,纠错步,旨在将检错步的检错结果予以矫正,其中检错步过程尤为重要,决定着系统整体召回和准确的上限。
基础字词错主要可以划分为两种,一种是真词错误,即词与词之间的错误,例如“截止”->“截至”,“可以”->“刻意”,其次是非词错误,即由字错误从而导致词错误,例如“要求”->“邀求”,“秸秆”->“秸杆”。通过我们对真实错误分析后发现,单字真词错误和非词错误几乎占据大部分错误样本,其中同音,近音,形近错误占据大多数。
1. 基于有监督学习的混淆集构建方法
由于真实的错误样本十分匮乏,在检错模型的训练设计中,我们主要采用人造错误样本来训练。然而,现有模型的学习能力都是有限的,错误空间不可无序扩张。由上述内容可知,人造错误样本的设计必须尽可能拟合真实的错误情况,错误类型应尽量满足同音,近音,形近的要求,针对此要求,我们设计了一种基于机器学习的人造混淆方法。
步骤一:收集真实错误
收集错别字-建议混淆对,并统计其频率,筛选高频错误混淆对(语料中错误频率大于 50 为高频错误)并人工校对得到真实错误分布的混淆集。例子如下:
表 1. 混淆集真实错误分布
步骤二:构造汉字混淆对特征
此步骤的任务定义为,选取汉字集合 C,有任意的汉字 Ca 和汉字 Cb,且 CaC,CbC,构建 GetFeature 函数,使得 GetFeature(Ca,Cb)的返回结果为 Ca 和 Cb 的混淆特征。
对每个汉字混淆对构建如下特征:
表 2. 汉字混淆对的特征集合
特征描述和其构造方法如下:
最长拼音字符子串占比:此特征主要描述两个字在拼音拼写上的相似的程度。
声母是否相同:此特征主要衡量两个字声母是否相同。
韵母是否相同:此特征主要衡量两个字韵母是否相同。
字体结构是否相同:中文汉字属于象形文字,每个字都其字体结构。此特征主要描述两个字在字形上是否相似。
最长笔画字符子串占比:此特征主要描述两个字在字形上是否相似。
混淆对“白-百”示例特征如下:
表 3. 示例的特征取值
步骤三:用混淆对特征构造混淆集
依靠步骤一中获得的真实用户错误分布数据集,和步骤二中的特征。利用机器学习对特征和错误分布之间的关系进行建模,其中真实用户错误的混淆对为正例,其它则为负例。机器学习模型训练完成后,对穷举的每个汉字混淆对特征进行预测。预测结果为正例的则加入混淆集合中。具体流程如下:
图 6. 混淆集构建流程图
2. 检错和纠错技术方案
由于校对问题是从“错误”的文本去找到“正确”的文本,所以存在训练的样本是是不充分的。举例说明,训练样本中存在“住”到“主”的错误对,但是真实错误中可能出现“柱”到“主”的情况,为了能够找到“主”字潜在的混淆集,所以采用了从已有混淆集挖掘潜在相似字的机器学习方法。
基于上述构建的混淆集产生的样本,我们构建如下模型训练方案。
检错步训练:利用人造错误样本,将 bert 预训练模型用于 sequence classification 的二分类任务。其中负例为无错,正例为有错。
纠错步训练:利用人造错误样本,将 bert 预训练模型用于 LM 任务,其中只对检错有效的地方计算 loss。不用 MLM 任务的原因是,原字虽为错字,但是对正确字的预测过程具有启发信息,所以不用 MASK token 来替代原字。
图 7. 检错-纠错训练整体流程图
整体系统推理过程如下:
第一步:利用上述检错步训练后的 bert 对文章进行检错。
第二步:基于第一步检错结果,利用上述纠错步训练的 bert 对错误位置进行纠错。
图 8. 检错-纠错推理过程示意图
3. 生成对抗方法在预训练模型中的应用
经过研究,我们可以将业界的算法基本分为以下两种技术路线:
(1)端到端的机器翻译方法;
(2)检错、召回和排序方法。
端到端的机器翻译方法存在的问题是需要大量的样本来训练模型,并且模型解释性差、不可以定向优化,所以我们采用了第二种方式。但是第二种方式同样存在着一些弊端:
(1)模型之间互相独立,pipeline 传递误差。
(2)召回策略不充分,各种人工召回策略并不足以召回正确的字。
(3)检错效果存在性能天花板,影响到后续模型的表现。
(4)排序效果不佳,正确的字不一定能够通过预训练模型排到错误的字的前面。
为了解决以上的问题,我们提出了一种基于生成对抗网络预训练模型的校对算法。
构建模型如下:
图 9. 对抗训练的原理示意图
取生成对抗网络的 Discriminator 负责检错任务,Generator 负责 LM 任务,其中 Generator 由于和 Discriminator 共享 Embedding,我们只需要取得 Generator 底层若干 transformer 即可,最大程度复用并节省模型参数。此方法将检错模型和召回模型合为一体,由于生成对抗预训练的方法使得模型在预训练阶段就具有了判别输入语句错误的位置的能力,所以只需要提供大量未标记语料和少量标记语料即可完成训练。
4. 实验效果
根据构建的测试集,我们评测了本技术方案的效果,准确率在 70%以上,召回率在 75%以上,千字平均耗时在 2s 左右。
总结
本文介绍了文本校对技术所解决的问题和存在的难点,还讲解了业界的算法模型,并分析了当前各种方法可能存在的一些问题。为了解决这些问题,我们提出了两点改进:
(1)通过建模少量真实混淆集,对所有汉字进行相似度排序的方法预测真实生产环境中可能存在的混淆集,使得标记数据的成本大为降低。
(2)使用生成对抗网络的训练方法训练预训练模型,使得检错和召回模型能够共享权值和同步训练,让模型在预训练阶段具有一定的检错和召回能力。
上述两点改进提升了校对算法的准确率和召回率,在实际使用中取得了不错的效果,提升了用户使用文本校对系统的体验。
参考资料
[1] Xiong J , Qiao Z , Zhang S , et al. HANSpeller: A UnifiedFramework for Chinese Spelling Correction[C]// 台湾计算语言学学会。台湾计算语言学学会, 2015:1-21.
[2] Hong Y , Yu X , He N , et al. FASPell: A Fast, Adaptable,Simple, Powerful Chinese Spell Checker Based On DAE-Decoder Paradigm[C]//Proceedings of the 5th Workshop on Noisy User-generated Text (W-NUT 2019).2019.
[3] Cui Y , Che W , Liu T , et al. Revisiting Pre-Trained Modelsfor Chinese Natural Language Processing[J]. 2020.
[4] Shulin Liu, Tao Yang, Tianchi Yue, FengZhang, Di Wang PLOME: Pre-training with Misspelled Knowledge for ChineseSpelling Correction.2021
[5] Xingyi Cheng∗ Weidi Xu∗ Kunlong ChenShaohua Jiang Feng Wang Taifeng Wang Wei Chu Yuan Qi .SpellGCN: IncorporatingPhonological and Visual Similarities into Language Models for Chinese SpellingCheck.2020
[6] 刘亮亮.江苏人民出版社.《汉语文本自动校对研究》
评论