赞
踩
最近根据需要整理了一下关于中文输入纠错相关的内容,特此记录一下。
任务定义:中文拼写任务指的是对于自然语言在使用的过程中出现的问题进行自动的识别和纠正。
中文输入纠错任务主要有两个子任务,分别为错误识别和错误修正。错误识别的任务是指出错误出现的句子位置,错误修正就是在识别的基础上自动更正。
中文纠错相比于英文纠错来说,主要困难来源于中文的语言特性:中文的词边界以及中文庞大的字符集。
中文的词边界,严格来讲,中文是没有词边界的。由于中文没有词的明确间隔且每个词的长度非常短。因此,在中文输入纠错的过程中,必须考虑上下文的因素,例如一个长短语或者一个句子,不能单纯针对一个词做纠错。一般来讲,拼写错误的出现会导致分词结果的不同。
中文庞大的字符集,根据调查,百分之九十的英文拼写错误和正确的编辑距离为1,编辑距离小于等于2的基本已经包括全部的拼写错误情况。因此,由于英文的字符集只有26个字母,英文拼写错误可以转化为字符级别的错误进行建模。但是中文的常用字符集就达到5000以上。
由于中文的语言特性,两种语言的错误类型也是不同的。英文的修改操作包括插入、删除、替换以及移动(移动指两个字母交换顺序等),而对于中文来说,因为每一个中文汉字都可独立成词,因此插入、删除和移动的错误只是作为语法错误。由于大部分的用户均为母语用户且输入法的存在,语法错误的情况比较少。因此,中文输入纠错主要集中在替换错误上。
中文输入纠错的评测数据主要包括SIGHAN Bake-off 2013/2014/2015这三个数据集,均是针对繁体字进行的纠错。其中,只有SIGHAN Bake-off 2013是针对母语使用者的,而另外两个是针对非母语使用者。这里主要罗列一下常用的评测指标。在错误识别子任务中,常用的评测指标有:
在错误纠正任务中,常用的评测指标为:
中文输入纠错的文章很多,但是从整体的思路来看,大部分是可以统一在一个框架之下。首先,给中文纠错任务一个形式化的定义:给定一个自然语言句子S,找出其中出错的汉字或词语c,并给出修改意见。中文纠错大致可作为一个两阶段建模:
大部分的模型基本上可以划分为这两部分,也有部分模型将两部分联合起来建模,在逐个构造候选的同时进行评分和筛选,本质上也可以属于这个框架的。
首先介绍困惑集(confuse set)。困惑集是在中文输入纠错当中较为关键的数据之一,用于存储每个汉字可能被混淆的错别词的可能。困惑集的数据格式是key-value格式,key为中文中的常用汉字,value为汉字可能的错误形式。
这里的错误形式主要分为两大类,分别是发音混淆或者是形状混淆。应拼音输入和五笔输入带来的错误。发音混淆是最为主要的一种方式,其比例可达70%左右,发音混淆有四种错误类型,分别为相同读音、相同音节不同音调、相似音节相同音调、相似音节不同音调。形状混淆一般来说简单的根据五笔码的编辑距离计算就可以得到。困惑集的质量很大程度上决定了中文纠错的上限。
直接利用困惑集替换主要有两种策略,全部替换和单字替换。
上述两种方式,对于单字的替换策略过于简单,虽然可以取得比较好的召回率,但是会将大量的正常句子修改且性能太差。为了解决上述的问题,主要有三种方式,一种是利用规则来减少替换的字数,一种是利用词表模板或语言模型过滤正确的表达,第三种是利用模型生成修正候选。
文献[7]首先利用CRF进行文本分词,随后利用一系列规则进行困惑集的替换。
这种方法主要有两种思路,一种是过滤掉那些正确的部分,减少替换的次数;还有一种是对于一些常见的错误,构建模板或词表,遇到之后直接替换,避免替换的产生。
文献[9]利用新闻语料数据集TWWaC 训练汉字级别的ngram模型(n为2,3,4),选取出现次数超过10词的作为有效序列。随后通过分词找到单词组成的序列,并检查这些序列是否在词典中或者在ngram出现过,如果没有,那么对该序列的单字进行替换。
文献[3]采用了两种替换方式,一种是利用未登录词识别,找到无意义的单音节词素,利用困惑集进行替换;另一种是利用谷歌1T一元数据构造修正词表,利用纠错词对直接进行拼写纠错。该方法实施的原因是谷歌1T一元数据中包含了很多拼写错误,具体步骤为:
文献[6]通过语料统计的方式构造一部分高可信度模板,利用模版过滤一部分正确的序列,只对剩余的部分进行替换工作。主要维护三类数据,模板、长词词表、常用错误词表。具体操作如下:
在排除之后,再进行连续单字的处理工作,通过替换连续单字序列中的每个单字,如果生成的序列在词表或者在Google Web 1T语料统计得到的ngram超过一定频率,那么作为候选生成。
文献[5]对困惑集做了扩充,并对每一个拼写错误构建倒排索引,拼写错误为索引词,潜在正确结果为检索内容,对于每个潜在正确内容,利用汉字出现的频率进行排名。预测同时,在监测阶段维护一个错词修正表,每次替换之后不在词表的词均加入错词表,最终找到正确结果的词加入正确词表,每次结束之后构建错词修正表。如果下次预测到的时候直接利用错词修正表进行调整。(这篇文章的效果很不错,但是论文比较短,写的很笼统,而且后续也没什么改进研究,一直没有特别读懂)
模型生成的好处在于模型生成的过程中基本考虑了每种可能,利用其评分函数可以在生成候选实体的过程中进行预先筛选。
目前效果比较好的方式主要有HMM和基于图理论的方法。利用SMT进行生成的方式效果没有上两种好。
虽然模型比较多,但是我认为其总体思路还是一个信道噪声模型,假设有错的句子为S,纠错的句子为C,那么基本表达式为
文献[4]利用HMM的思想进行纠错候选生成。其认为传统的HMM在拼写任务上有如下两个问题:首先是一阶马尔科夫无法建模长距离的依赖关系;另一个是太多的候选实体会降低模型的性能且给后续的模型带来干扰。
本文的错误模型利用编辑距离估计,语言模型利用LM计算。在具体操作中,首先去除原句中不属于中文的部分,随后将原来的句子根据标点符号进行分割形成子句,子句是本文处理的主要单位。构造一个优先队列,将子句表示为单字的形式,从第一个字开始替换,替换后的句子作为候选,根据信道噪声模型计算评分并加入优先队列,如果优先队列满了,那么去掉其中评分最低的,如此往复。具体流程如图1。
具体的计算公式为:
本工作还有一个亮点是利用之前的数据集构造困惑集的字对和词对用于候选生成。在编辑距离当中,这里统计主要是替换字的来源,例如发音相似、形状相似或者是来自于词表,不同的来源会有不同的权重。利用这样的方式完成纠错候选实体的生成。
文献[11]利用图模型来进行纠错候选的生成。利用困惑集替换目前的每一个字(替换之后的长度必须在人工制定的一个区间内,换句话说,替换之后必须成一个词),得到拓展后的节点集合。边的权重由替换概率(原始汉字同困惑集汉字的相似程度)和这个词的条件概率(由语言模型计算)。
但是,这种方式对于连续两个字以上都是错误的情况是无法解决的,为了解决这一情况,在第一步的集合基础上添加所有两个字组成的词的替换(根据性能和统计的结果,2个以上连续错误的比较少)。通过上述的步骤,就将纠错问题转化为一个最短路径问题。在语句前后添加开头结尾标记,计算从开头到结尾的最短路径,选择最优的前几条作为最优纠错候选。
文献[7]考虑利用SMT进行纠错工作,因为中文纠错不需要调序,因此这里不需要考虑对齐模型,只需要计算翻译模型和翻译后的语言模型。由于需要的训练预料较多,本文通过对训练的700个句子进行随机替换构造了2百万个句子对,利用IBM4模型进行训练。
文献[11]提出了两种候选评分的方式,一种是利用句子的困惑度进行评分(更关注整体),另一种是利用MI进行过滤(更关注局部是
否符合)。
通过实验验证,两种过滤方式的效果基本一致。
文献[9]则是利用翻译模型的推断部分进行评分。翻译模型分为两部分,一部分是翻译模型还有一部分是语言模型。对于翻译模型,错误序列到正确序列的翻译概率公式为
其中,trans代表候选修正,candi代表错误的序列,这里取的是两个序列在语料中出现的频率。γ代表更正汉字的来源(两种,音似或者形似)。
文献[7]利用前向算法加字符级别的语言模型进行最优的选择,语言模型的阶数为5。
文献[1, 2, 3, 5, 6]只是单纯的利用全句的语言模型进行排序。
文献[7]利用SVM的置信度评分进行排序,这里将原任务转化为一个二分类问题。对于每个位置的汉字,如果候选和原句不同,那么从输出候选和原句中抽取出相应位置的这些汉字组成汉字列表。由SVM对每个汉字进行评分.
主要的特征
文献[4]同文献[7]不同之处在于文献[4]是以一个句子为单位进行评分,一个句子中可能有多处修改。为了加快效率,设置了两轮排序算法:第一轮算法使用LR模型,采用简单易获取的特征进行预测,选取最优的前20个进入第二轮;第二轮使用SVM模型,采用全部的特征,最终选出前5个候选。
第一阶段的特征包括:
将属于同一个句子的子句的Top5汇总,组成一个完成句子的候选集合。之后主要有三步:首先,对每个子句进行过滤,如果原始子句跟得分最高的子句的语言模型概率非常接近,那么保留原始子句;随后,剩余的候选实体按照在排序第二阶段得分和替换类型权重(困惑字对、同音、形近等)的线性组合进行排序,选择得分最高的作为最终修正;最后,利用全局特征进行筛选,如果一个子句错误超过2个,子句丢弃,一个长句有超过三个子句出错,那么长句不作修改。
文献[8]利用计算词向量CBOW中的假设,将CBOW应用到错误识别子任务当中。首先训练一个字符级别的词向量,对于一个待纠错的句子,对每一个字符进行判定,看给定上下文该词的条件概率是否超过一定阈值,如果没有超过,那么判定有错。其主要的缺点在于CBOW对于在语料中出现较少的字符判断准确度不高且只测试了一个句子只有一个错误的情况。
文献[10]利用最大熵分类进行错误的识别,但是不能进行改进。
文献[12]构建一个词网格解码模型用于纠错任务,该模型将纠错和分词两个任务联合进行,同时提出一种从语料中自动构建训练样例的方法。文献[12]的纠错任务主要分为两部分,一部分是词图生成,还有一部分是词图解码。
前一部分为错误模型,后一部分为语言模型,L(S)代表所有可能的路径。语言模型的计算比较简单,错误模型的计算则可以转化为计算每个字符的条件概率,字符条件概率为
perr为一个可调超参数,代表任意字符被误写的概率。两个频率通过拼写错误语料产生。在解码的过程中,采用前向算法和后向算法共同计算的方式,每个节点的评分由其前向后向算法之和计算得到。取每个位置得分最高的N个节点。
本文另一个亮点在于从语料中自动构建训练样例的方法,这里利用的语料为Google Web 1T语料,统计词级别ngram(n为1到5)的频率。算法主要基于两个假设。
利用生成的候选对,本文做了两件事情。首先根据错误概率的公式计算每个字符被写错的概率分布;另一件是构造一个常用错误词表,作为纠错系统的最后一个处理流程进行补充。
首先来分析在SIGHAN2013数据集上几个比较好的论文的各项评分(最好的两项标黑)。这里需要说明,文献[4]没有在2013数据集的数据,但是根据在2014数据集的数据对比,文献[4]的总体效果应该略好于文献[11],也是可以考虑的方式。
上表所示为错误识别率的相关情况,FAR为错误识别率即将正确的句子错误修改的概率,可以看到图模型和SMT的效果比较好。DF1为错误识别的F1值,可见图模型和用多种错误识别可以更好的识别出错误的句子。
上表展示的是对于具体错误位置识别的准确率。从F1值可以看出,图模型和SMT的效果显著高于其他模型效果。
上表展示对于错误修正的情况,维护错误词表的方式效果比较好。(注:文献5感觉没有看的太明白,大家有兴趣可以看看)。我个人认为,文献[11]针对数据集做了大量人为的优化,因此它指标高并不能说明问题 。文献[5]应该也是进行了一定的人工规则制定。文献[9]和文献[12]也取得不错的效果,其中没有人工规则的添加。
综上所述,影响纠错效果的主要有如下几点:
[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.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。