中文输入纠错任务整理

说明

最近根据需要整理了一下关于中文输入纠错相关的内容,特此记录一下。

1. 中文输入纠错任务定义

1.1. 任务定义

任务定义:中文拼写任务指的是对于自然语言在使用的过程中出现的问题进行自动的识别和纠正。
中文输入纠错任务主要有两个子任务,分别为错误识别和错误修正。错误识别的任务是指出错误出现的句子位置,错误修正就是在识别的基础上自动更正。

1.2. 同英文纠错任务的区别

中文纠错相比于英文纠错来说,主要困难来源于中文的语言特性:中文的词边界以及中文庞大的字符集

  • 中文的词边界,严格来讲,中文是没有词边界的。由于中文没有词的明确间隔且每个词的长度非常短。因此,在中文输入纠错的过程中,必须考虑上下文的因素,例如一个长短语或者一个句子,不能单纯针对一个词做纠错。一般来讲,拼写错误的出现会导致分词结果的不同。

  • 中文庞大的字符集,根据调查,百分之九十的英文拼写错误和正确的编辑距离为1,编辑距离小于等于2的基本已经包括全部的拼写错误情况。因此,由于英文的字符集只有26个字母,英文拼写错误可以转化为字符级别的错误进行建模。但是中文的常用字符集就达到5000以上。

由于中文的语言特性,两种语言的错误类型也是不同的。英文的修改操作包括插入、删除、替换以及移动(移动指两个字母交换顺序等),而对于中文来说,因为每一个中文汉字都可独立成词,因此插入、删除和移动的错误只是作为语法错误。由于大部分的用户均为母语用户且输入法的存在,语法错误的情况比较少。因此,中文输入纠错主要集中在替换错误上。

2. 中文输入纠错评测

中文输入纠错的评测数据主要包括SIGHAN Bake-off 2013/2014/2015这三个数据集,均是针对繁体字进行的纠错。其中,只有SIGHAN Bake-off 2013是针对母语使用者的,而另外两个是针对非母语使用者。这里主要罗列一下常用的评测指标。在错误识别子任务中,常用的评测指标有:

  • FAR(错误识别率):没有笔误却被识别为有笔误的句子数/没有笔误的句子总数
  • DA(识别精准率):正确识别是否有笔误的句子数(不管有没有笔误)/句子总数
  • DP(识别准确率):识别有笔误的句子中正确的个数/识别有笔误的句子总数
  • DR(识别找回率):识别有笔误的句子中正确的个数/有笔误的句子总数
  • DF1(识别F1值):2 * DP * DR/ (DP + DR)
  • ELA(错误位置精准率):位置识别正确的句子(不管有没有笔误)/句子总数
  • ELP(错误位置准确率):正确识别出笔误所在位置的句子/识别有笔误的句子总数
  • ELR(错误位置召回率):正确识别出笔误所在位置的句子/有笔误的句子总数
  • ELF1(错误位置准确率):2*ELP*ELR / (ELP+ELR)

在错误纠正任务中,常用的评测指标为:

  • LA位置精确率:识别出笔误位置的句子/总的句子
  • CA修改精确率:修改正确的句子/句子总数
  • CP修改准确率:修改正确的句子/修改过的句子

3. 中文输入纠错主要框架

中文输入纠错的文章很多,但是从整体的思路来看,大部分是可以统一在一个框架之下。首先,给中文纠错任务一个形式化的定义:给定一个自然语言句子S,找出其中出错的汉字或词语c,并给出修改意见。中文纠错大致可作为一个两阶段建模:

  • 构造纠正候选实体。这一阶段的主要目的就是利用一种或多种策略(某种规则或者模型)构建对于原句的修改候选,每一个候选均是对可能存在错误的一处或多处汉字进行替换后的结果。这一阶段是整个模型召回率的保证,同时也是一个模型的上限。
  • 候选实体评分函数。这一阶段的主要目的就是在上一阶段的基础上,利用某种评分函数(编辑距离、LM等)或者分类器(LR、SVM等)结合局部乃至全局的特征进行一个排序的工作,最终排序最高的纠正候选作为修改结果。

大部分的模型基本上可以划分为这两部分,也有部分模型将两部分联合起来建模,在逐个构造候选的同时进行评分和筛选,本质上也可以属于这个框架的。

4. 候选生成的主要方法

4.1. 利用困惑集直接替换

首先介绍困惑集(confuse set)。困惑集是在中文输入纠错当中较为关键的数据之一,用于存储每个汉字可能被混淆的错别词的可能。困惑集的数据格式是key-value格式,key为中文中的常用汉字,value为汉字可能的错误形式。

这里的错误形式主要分为两大类,分别是发音混淆或者是形状混淆。应拼音输入和五笔输入带来的错误。发音混淆是最为主要的一种方式,其比例可达70%左右,发音混淆有四种错误类型,分别为相同读音、相同音节不同音调、相似音节相同音调、相似音节不同音调。形状混淆一般来说简单的根据五笔码的编辑距离计算就可以得到。困惑集的质量很大程度上决定了中文纠错的上限。

直接利用困惑集替换主要有两种策略,全部替换和单字替换。

  • 全部替换:假设句子中每一个字都是错误的,利用构造集逐个替换每一个汉字,生成所有可能的组合,利用二元语言模型评估,取概率最大的作为正确答案[1]。这种方式可以遍历大多数的可能,但是缺点在于性能问题和FAR太低。
  • 单字替换:假设句子中的每一个单字都是错误的,即对于分词之后每个单个的字利用困惑集进行替换,再进行选择[2]。这种方式在错误发现任务上取得了很好的召回率,但是其他方面的效率不高(把大量正常句子也当成有笔误的了)

4.2. 利用困惑集有选择替换

上述两种方式,对于单字的替换策略过于简单,虽然可以取得比较好的召回率,但是会将大量的正常句子修改且性能太差。为了解决上述的问题,主要有三种方式,一种是利用规则来减少替换的字数,一种是利用词表模板或语言模型过滤正确的表达,第三种是利用模型生成修正候选。

4.2.1. 利用规则的方法

文献[7]首先利用CRF进行文本分词,随后利用一系列规则进行困惑集的替换。

  1. 如果一个词只包含单个汉字,那么将候选集中的所有可能替换均加入;
  2. 如果一个词包括多个汉字,且词不在词表当中,尝试对每个汉字进行替换,若替换后词出现在词表,那么作为候选加入;
  3. 如果一个词包括多个汉字且在词表中,不做任何处理。

4.2.2. 利用词表或语言模型的方法

这种方法主要有两种思路,一种是过滤掉那些正确的部分,减少替换的次数;还有一种是对于一些常见的错误,构建模板或词表,遇到之后直接替换,避免替换的产生。

文献[9]利用新闻语料数据集TWWaC 训练汉字级别的ngram模型(n为2,3,4),选取出现次数超过10词的作为有效序列。随后通过分词找到单词组成的序列,并检查这些序列是否在词典中或者在ngram出现过,如果没有,那么对该序列的单字进行替换。

文献[3]采用了两种替换方式,一种是利用未登录词识别,找到无意义的单音节词素,利用困惑集进行替换;另一种是利用谷歌1T一元数据构造修正词表,利用纠错词对直接进行拼写纠错。该方法实施的原因是谷歌1T一元数据中包含了很多拼写错误,具体步骤为:

  1. 对1T一元数据中出现频率低的词用困惑集替换其中的汉字,如果新的词频率很高,那么作为纠错词对候选
  2. 计算每一个纠错词对中两个词在另一个大语料上的出现次数,如果原词/修改词的比值小于0.1,那么将纠错词对写入词典。

文献[6]通过语料统计的方式构造一部分高可信度模板,利用模版过滤一部分正确的序列,只对剩余的部分进行替换工作。主要维护三类数据,模板、长词词表、常用错误词表。具体操作如下:

  1. 构建一个长度超过两个字(包括两个)的词表,并给出对应的拼音,形成词汇拼音对;
  2. 对于每一个词汇拼音对,在一份具有拼音标注的语料中统计拼音到词汇的概率,具有高可信度的词汇作为高可信度词汇拼音模板;
  3. 对于输入的句子,如果检测到模板中的拼音,对比模版中的词汇同原句词汇的差异,重叠部分的汉字(这里汉字就行,即只要有一个汉字重合也算)被标记为正确,之后不再考虑这里有错误的可能;
  4. 维护一个长词的词典,收集超过4个字的词,例如成语谚语等,如果准确匹配,那么标记为正确;
  5. 构建一个常见错误的词表,例如“一旦”写成“一但”,如果匹配到,给出正确意见。

在排除之后,再进行连续单字的处理工作,通过替换连续单字序列中的每个单字,如果生成的序列在词表或者在Google Web 1T语料统计得到的ngram超过一定频率,那么作为候选生成。

文献[5]对困惑集做了扩充,并对每一个拼写错误构建倒排索引,拼写错误为索引词,潜在正确结果为检索内容,对于每个潜在正确内容,利用汉字出现的频率进行排名。预测同时,在监测阶段维护一个错词修正表,每次替换之后不在词表的词均加入错词表,最终找到正确结果的词加入正确词表,每次结束之后构建错词修正表。如果下次预测到的时候直接利用错词修正表进行调整。(这篇文章的效果很不错,但是论文比较短,写的很笼统,而且后续也没什么改进研究,一直没有特别读懂)

4.2.3. 利用模型生成的方法

模型生成的好处在于模型生成的过程中基本考虑了每种可能,利用其评分函数可以在生成候选实体的过程中进行预先筛选。
目前效果比较好的方式主要有HMM和基于图理论的方法。利用SMT进行生成的方式效果没有上两种好。
虽然模型比较多,但是我认为其总体思路还是一个信道噪声模型,假设有错的句子为S,纠错的句子为C,那么基本表达式为

Ĉ =argmaxp(S|C)p(C)p(S)=argmaxP(S|C)P(C)

从公式中可以看出,决定一个候选是否是正确修正的本质上是两个模型,一个是候选C的语言模型,还有一个是条件概率模型,论文中常常称为错误模型(error model)。错误模型的计算是不同论文主要的区别,因为只考虑替换错误,这里可以理解为一个对齐之后的字符错误模型。

文献[4]利用HMM的思想进行纠错候选生成。其认为传统的HMM在拼写任务上有如下两个问题:首先是一阶马尔科夫无法建模长距离的依赖关系;另一个是太多的候选实体会降低模型的性能且给后续的模型带来干扰。

本文的错误模型利用编辑距离估计,语言模型利用LM计算。在具体操作中,首先去除原句中不属于中文的部分,随后将原来的句子根据标点符号进行分割形成子句,子句是本文处理的主要单位。构造一个优先队列,将子句表示为单字的形式,从第一个字开始替换,替换后的句子作为候选,根据信道噪声模型计算评分并加入优先队列,如果优先队列满了,那么去掉其中评分最低的,如此往复。具体流程如图1。

《中文输入纠错任务整理》

具体的计算公式为:

priority=αlog(P(C))+βedit_dist

本工作还有一个亮点是利用之前的数据集构造困惑集的字对和词对用于候选生成。在编辑距离当中,这里统计主要是替换字的来源,例如发音相似、形状相似或者是来自于词表,不同的来源会有不同的权重。利用这样的方式完成纠错候选实体的生成。

文献[11]利用图模型来进行纠错候选的生成。利用困惑集替换目前的每一个字(替换之后的长度必须在人工制定的一个区间内,换句话说,替换之后必须成一个词),得到拓展后的节点集合。边的权重由替换概率(原始汉字同困惑集汉字的相似程度)和这个词的条件概率(由语言模型计算)。

但是,这种方式对于连续两个字以上都是错误的情况是无法解决的,为了解决这一情况,在第一步的集合基础上添加所有两个字组成的词的替换(根据性能和统计的结果,2个以上连续错误的比较少)。通过上述的步骤,就将纠错问题转化为一个最短路径问题。在语句前后添加开头结尾标记,计算从开头到结尾的最短路径,选择最优的前几条作为最优纠错候选。

文献[7]考虑利用SMT进行纠错工作,因为中文纠错不需要调序,因此这里不需要考虑对齐模型,只需要计算翻译模型和翻译后的语言模型。由于需要的训练预料较多,本文通过对训练的700个句子进行随机替换构造了2百万个句子对,利用IBM4模型进行训练。

5. 候选排序的主要方法

5.1. 利用语言模型进行排序

文献[11]提出了两种候选评分的方式,一种是利用句子的困惑度进行评分(更关注整体),另一种是利用MI进行过滤(更关注局部是
否符合)。

ΔMI=max(MI(ci1,ci)MI(ci1,ci),MI(ci,ci+1)MI(ci,ci+1))

通过实验验证,两种过滤方式的效果基本一致。

文献[9]则是利用翻译模型的推断部分进行评分。翻译模型分为两部分,一部分是翻译模型还有一部分是语言模型。对于翻译模型,错误序列到正确序列的翻译概率公式为

tp=log(freq(trans)freq(trans)freq(candi))γ

其中,trans代表候选修正,candi代表错误的序列,这里取的是两个序列在语料中出现的频率。γ代表更正汉字的来源(两种,音似或者形似)。

文献[7]利用前向算法加字符级别的语言模型进行最优的选择,语言模型的阶数为5。
文献[1, 2, 3, 5, 6]只是单纯的利用全句的语言模型进行排序。

5.2. 利用LR/SVM进行排序

文献[7]利用SVM的置信度评分进行排序,这里将原任务转化为一个二分类问题。对于每个位置的汉字,如果候选和原句不同,那么从输出候选和原句中抽取出相应位置的这些汉字组成汉字列表。由SVM对每个汉字进行评分.
主要的特征

  • 基本上下文字符级别特征:去上下文为3的窗口,分别构建一元、二元特征
  • PMI特征:计算待识别汉字同上下文为2的窗口内每个字符的PMI特征
  • 词典/语言模型特征:识别字序列是否在字典中或者ngram列表中

文献[4]同文献[7]不同之处在于文献[4]是以一个句子为单位进行评分,一个句子中可能有多处修改。为了加快效率,设置了两轮排序算法:第一轮算法使用LR模型,采用简单易获取的特征进行预测,选取最优的前20个进入第二轮;第二轮使用SVM模型,采用全部的特征,最终选出前5个候选。
第一阶段的特征包括:

  • LM特征:
    • 候选句的LM概率
    • 原句的LM概率
  • 字典特征:
    • 短语数
    • 成语个数
    • 短语比例
    • 成语比例
    • 短语或成语的长度
  • 编辑距离特征:
    • 同音词替换个数
    • 近音词替换个数
    • 近形词替换个数
    • 替换总个数
  • 分词特征:
    • 单个汉字成词个数
    • 利用最大正向匹配的分词数
    • 利用CKIP算法的分词个数
      在第二阶段的特征会添加一下需要耗时的特征,具体包括:
  • 搜索引擎特征:
    • 修正部分在标题中出现的个数
    • 修正部分在正文中出现的个数
  • 翻译特征(利用微软Web N-Gram服务计算LM概率)
    • 候选句翻译成英文后的LM概率
    • 原句翻译成英文后的LM概率

将属于同一个句子的子句的Top5汇总,组成一个完成句子的候选集合。之后主要有三步:首先,对每个子句进行过滤,如果原始子句跟得分最高的子句的语言模型概率非常接近,那么保留原始子句;随后,剩余的候选实体按照在排序第二阶段得分和替换类型权重(困惑字对、同音、形近等)的线性组合进行排序,选择得分最高的作为最终修正;最后,利用全局特征进行筛选,如果一个子句错误超过2个,子句丢弃,一个长句有超过三个子句出错,那么长句不作修改。

6. 其他方法

文献[8]利用计算词向量CBOW中的假设,将CBOW应用到错误识别子任务当中。首先训练一个字符级别的词向量,对于一个待纠错的句子,对每一个字符进行判定,看给定上下文该词的条件概率是否超过一定阈值,如果没有超过,那么判定有错。其主要的缺点在于CBOW对于在语料中出现较少的字符判断准确度不高且只测试了一个句子只有一个错误的情况。

文献[10]利用最大熵分类进行错误的识别,但是不能进行改进。

文献[12]构建一个词网格解码模型用于纠错任务,该模型将纠错和分词两个任务联合进行,同时提出一种从语料中自动构建训练样例的方法。文献[12]的纠错任务主要分为两部分,一部分是词图生成,还有一部分是词图解码。

  • 词图生成:词图是由字符组成,一个字符一个节点,为每个字符找到替换候选;根据词典,将可以合并的字符进行合并;除了多音节词汇,部分单音节词汇也会加入到词图,为了降低复杂度,只添加高频的单音节词汇。
  • 词图解码:词图解码是为了找一条最优的路径,这里的最优指的是分词结果和转化概率的联合最优,最优的评分函数为
    Ŵ =argmaxWL(S)P(S|W)λP(W)1λ

前一部分为错误模型,后一部分为语言模型,L(S)代表所有可能的路径。语言模型的计算比较简单,错误模型的计算则可以转化为计算每个字符的条件概率,字符条件概率为
《中文输入纠错任务整理》

perr为一个可调超参数,代表任意字符被误写的概率。两个频率通过拼写错误语料产生。在解码的过程中,采用前向算法和后向算法共同计算的方式,每个节点的评分由其前向后向算法之和计算得到。取每个位置得分最高的N个节点。

本文另一个亮点在于从语料中自动构建训练样例的方法,这里利用的语料为Google Web 1T语料,统计词级别ngram(n为1到5)的频率。算法主要基于两个假设。

  • 假设一是如果一个ngram不在词典中,那么有可能是拼写错误。利用假设一可以找到大量的错误正确候选对。
  • 假设二是如果词的上下文相近,那么词具有相似的含义。计算错误正确候选对中两个词的上下文词向量,保留相似度高的作为高可信度修正对。

利用生成的候选对,本文做了两件事情。首先根据错误概率的公式计算每个字符被写错的概率分布;另一件是构造一个常用错误词表,作为纠错系统的最后一个处理流程进行补充。

7. 影响中文纠错效果的因素

首先来分析在SIGHAN2013数据集上几个比较好的论文的各项评分(最好的两项标黑)。这里需要说明,文献[4]没有在2013数据集的数据,但是根据在2014数据集的数据对比,文献[4]的总体效果应该略好于文献[11],也是可以考虑的方式。
《中文输入纠错任务整理》

上表所示为错误识别率的相关情况,FAR为错误识别率即将正确的句子错误修改的概率,可以看到图模型和SMT的效果比较好。DF1为错误识别的F1值,可见图模型和用多种错误识别可以更好的识别出错误的句子。

《中文输入纠错任务整理》

上表展示的是对于具体错误位置识别的准确率。从F1值可以看出,图模型和SMT的效果显著高于其他模型效果。

《中文输入纠错任务整理》

上表展示对于错误修正的情况,维护错误词表的方式效果比较好。(注:文献5感觉没有看的太明白,大家有兴趣可以看看)。我个人认为,文献[11]针对数据集做了大量人为的优化,因此它指标高并不能说明问题 。文献[5]应该也是进行了一定的人工规则制定。文献[9]和文献[12]也取得不错的效果,其中没有人工规则的添加。
综上所述,影响纠错效果的主要有如下几点:

  • 纠错集:纠错集主要影响召回率,纠错首先需要的就是构建一个好的困惑集,使其尽可能小但是包涵绝大多数情况。
  • 语言模型:在纠错任务中,常常使用两种语言模型,一种是基于字符级别的,主要用于错误的发现,一般字符级别的阶数在1到5之间。还有一种是词级别的,主要用于排序阶段。
  • 词表:词表主要用于判断替换字符之后是否可以成词,词表最好是比较大的常用词表加上需要应用的领域词表。
  • 语料:根据文献[12]提供的方式,确实可以利用大规模的互联网语料估计错误拼写,而且语料也应用于语言模型的生成。
  • 从模型选择上,SMT更适合用于评分阶段,图模型是一个比较好的分词同纠错一起完成的模型(其思想类似于文献[4]的候选生成过程),SVM也是评分阶段的常用手段。

参考文献

[1] Yu He and Guohong Fu. 2013. Description of HLJU Chinese spelling checker for SIGHAN Bakeoff 2013. In Proceedings of the 7th SIGHAN Workshop on Chinese Language Processing. 84–87.
[2] Chuanjie Lin and Weicheng Chu. 2013. NTOU Chinese spelling check system in SIGHAN Bake-off 2013. In Proceedings of the 7th SIGHAN Workshop on Chinese Language Processing. 102–107.
[3] Yuming Hsieh, Minghong Bai, and Kehjiann Chen. 2013. Introduction to CKIP Chinese spelling check system for SIGHAN Bakeoff 2013 evaluation. In Proceedings of the 7th SIGHAN Workshop on Chinese Language Processing. 59–63.
[4] Zhang, S., Xiong, J., Hou, J., Zhang, Q., & Cheng, X. 2015. HANSpeller++: A Unified Framework for Chinese Spelling Correction. ACL-IJCNLP 2015, 38.
[5] Jui-Feng Yeh, Sheng-Feng Li, Mei-Rong Wu, Wen-Yi Chen, and Mao-Chuan Su. 2013. Chinese word spelling correction based on N-gram ranked inverted index list. In Proceedings of the 7th SIGHAN Workshop on Chinese Language Processing. 43–48.
[6] Tinghao Yang, Yulun Hsieh, Yuhsuan Chen, Michael Tsang, Chengwei Shih, and Wenlian Hsu. 2013. Sinica- IASL Chinese spelling check system at SIGHAN-7. In Proceedings of the 7th SIGHAN Workshop on Chinese Language Processing. 93–96.
[7] Liu, X., Cheng, F., Duh, K. and Matsumoto, Y., 2015. A Hybrid Ranking Approach to Chinese Spelling Check. ACM Transactions on Asian and Low-Resource Language Information Processing, 14(4), p.16.
[8] Guo, Z., Chen, X., Jin, P. and Jing, S.Y., 2015, December. Chinese Spelling Errors Detection Based on CSLM. In Web Intelligence and Intelligent Agent Technology (WI-IAT), 2015 IEEE/WIC/ACM International Conference on (Vol. 3, pp. 173-176).
[9] Hsunwen Chiu, Jiancheng Wu, and Jason S. Chang. 2013. Chinese spelling checker based on statistical machine translation. In Proceedings of the 7th SIGHAN Workshop on Chinese Language Processing.49–53.
[10] Dongxu Han and Baobao Chang. 2013. A maximum entropy approach to Chinese spelling check. In Proceedings of the 7th SIGHAN Workshop on Chinese Language Processing. 74–78.
[11] Zhao, H., Cai, D., Xin, Y., Wang, Y. and Jia, Z., 2017. A Hybrid Model for Chinese Spelling Check. ACM Transactions on Asian and Low-Resource Language Information Processing (TALLIP), 16(3), p.21.
[12] Hsieh, Y.M., Bai, M.H., Huang, S.L. and Chen, K.J., 2015. Correcting Chinese spelling errors with word lattice decoding. ACM Transactions on Asian and Low-Resource Language Information Processing, 14(4), p.18.

    原文作者:hqc888688
    原文地址: https://blog.csdn.net/hqc888688/article/details/74858126
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞