认知智能实验室 百分点科技稿

编者按: 大数据时代下各种文本信息爆炸,传统的文本分析处理工作逐渐被计算机取代。文本数据量越大,其中所包含的错误的总数也越多,通过校对工作来纠正文本中的错误显得尤其重要。传统的校对主要依赖人工,通过人来发现和纠正文本中的错误,人工校对效率低、强度大、周期长,显然已经不能满足目前文本快速增长的需求,智能校对系统在这个背景下应运而生。

伴随着机器学习和自然语言处理技术的发展,使用算法模型解决文本校对问题成为可能。智能校对系统的研发,极大地减轻了审校人员的工作负担,让从前繁重的工作模式变得简单、轻松和高效。本文将从校对中遇到的技术问题出发,带领各位读者了解业界校对的技术方法,以及百分点认知智能实验室在校对算法方面的技术原理和实践经验。

本文作者:易显维 苏海波

一 校对系统的意义及难点

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),可以有效缓解以上两点不足。模型架构及用例展示如下图:

具体来说,利用预训练模型使用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结构完全相同。

检错-纠错****技术方案

我们的校对技术方案不同于许多“端到端”的校对方法,为了保证校对的高准确率,整体主要分为两步,即检错步和纠错步。检错步,目的是检测出文章所存在的错误位置,纠错步,旨在将检错步的检错结果予以矫正,其中检错步过程尤为重要,决定着系统整体召回和准确的上限。

基础字词错主要可以划分为两种,一种是真词错误,即词与词之间的错误,例如“截止”->“截至”,“可以”->“刻意”,其次是非词错误,即由字错误从而导致词错误,例如“要求”->“邀求”,“秸秆”->“秸杆”。通过我们对真实错误分析后发现,单字真词错误和非词错误几乎占据大部分错误样本,其中同音,近音,形近错误占据大多数。

****1. 基于有监督学习的混淆集构建方法 ****

由于真实的错误样本十分匮乏,在检错模型的训练设计中,我们主要采用人造错误样本来训练。然而,现有模型的学习能力都是有限的,错误空间不可无序扩张。由上述内容可知,人造错误样本的设计必须尽可能拟合真实的错误情况,错误类型应尽量满足同音,近音,形近的要求,针对此要求,我们设计了一种基于机器学习的人造混淆方法。

步骤一:收集真实错误

收集错别字-建议混淆对,并统计其频率,筛选高频错误混淆对(语料中错误频率大于50为高频错误)并人工校对得到真实错误分布的混淆集。例子如下:

表1. 混淆集真实错误分布

错别字纠错建议错误频率合和37678住主572257型性51935只支13716白百7189

步骤二:构造汉字混淆对特征

此步骤的任务定义为,选取汉字集合C,有任意的汉字Ca和汉字Cb,且CaC,CbC,构建GetFeature函数,使得GetFeature(Ca,Cb)的返回结果为Ca和Cb的混淆特征。

对每个汉字混淆对构建如下特征:

表2. 汉字混淆对的特征集合

特征特征类型最长拼音字符子串占比数值型声母是否相同布尔型韵母是否相同布尔型字体结构是否相同布尔型最长笔画字符子串占比数值型

特征描述和其构造方法如下:

最长拼音字符子串占比:此特征主要描述两个字在拼音拼写上的相似的程度。

声母是否相同:此特征主要衡量两个字声母是否相同。

韵母是否相同:此特征主要衡量两个字韵母是否相同。

字体结构是否相同:中文汉字属于象形文字,每个字都其字体结构。此特征主要描述两个字在字形上是否相似。

最长笔画字符子串占比:此特征主要描述两个字在字形上是否相似。

混淆对“白-百”示例特征如下:

表3. 示例的特征取值

特征特征值最长拼音字符子串占比1.0声母是否相同1韵母是否相同1字体结构是否相同1最长笔画字符子串占比0.83

步骤三:用混淆对特征****构造混淆集

依靠步骤一中获得的真实用户错误分布数据集,和步骤二中的特征。利用机器学习对特征和错误分布之间的关系进行建模,其中真实用户错误的混淆对为正例,其它则为负例。机器学习模型训练完成后,对穷举的每个汉字混淆对特征进行预测。预测结果为正例的则加入混淆集合中。具体流程如下:

图6. 混淆集构建流程图

****2. 检错和纠错技术方案 ****

由于校对问题是从“错误”的文本去找到“正确”的文本,所以存在训练的样本是是不充分的。举例说明,训练样本中存在“住”到“主”的错误对,但是真实错误中可能出现“柱”到“主”的情况,为了能够找到“主”字潜在的混淆集,所以采用了从已有混淆集挖掘潜在相似字的机器学习方法。

基于上述构建的混淆集产生的样本,我们构建如下模型训练方案。

检错步训练:利用人造错误样本,将bert预训练模型用于sequence classification的二分类任务。其中负例为无错,正例为有错。

纠错步训练:利用人造错误样本,将bert预训练模型用于LM任务,其中只对检错有效的地方计算loss