刘亮亮,王 石,王东升,汪平仄,曹存根
(1. 中国科学院 计算技术研究所 智能信息处理重点实验室,北京 100190;2. 中国科学院大学,北京 100049)
文本自动校对是自然语言处理的主要应用领域之一,从20世纪60年代开始,国外就开展了对英文文本的自动校对研究[1]。随着80年代统计模型在自然语言处理的广泛应用,英文自动校对也得到了很快的发展,得到了很好的召回率和准确率,也产生了很多优秀的校对系统。
对中文文本自动校对是应用自然语言处理技术自动查出文本中的输入错误,中文文本自动校对研究是从20世纪90年代开始,由于中文的输入不存在拼写错误,无法像英文那样以词典匹配的方式进行错误查找,难以借鉴英文文本校对中一些传统的方法,所以中文的自动校对工作面临很大的困难。但是,这项工作无论对于理论研究还是实际应用,都有深远的意义。对于中文文本自动校对,主要有两方面的工作: 1)自动查错;2)自动纠错。
随着问答系统在移动通讯等领域的应用,用户输入中的错别字问题成为影响系统识别率的一个主要问题。例如某通信文字客服系统中,用户输入“怎样用手机钱包冲值?”,由于“充值”写成“冲值”而导致无法理解或理解出错;又如“如何取消以开通的业务”,由于“已”写成“以”,导致理解出错。因此,研究文本校对技术对提高问答系统的容错性有非常重要的意义,本文通过对问答系统中查询日志的学习获取其中的错别字以及其对应的正确字(简称为错别字对),然后再用于问答系统中的纠错模块,以提高问答系统的理解能力,本文只注重日志中错别字的发现,而不介绍错别字对如何用于问答系统。本文主要是对文本中的替换错误进行自动获取和识别。
本文首先对领域问答系统的用户问题日志语料进行分词,然后对分词后出现的单字进行分析和合并,采用音相似算法和形相似算法对分词中出现的词和合并的单字散串进行聚类,然后对每一组相似词串类中的词串进行上下文特征统计和学习,对相似词串中在上下文语境下的进行正误识别和验证,从而实现自动获取错别字。本文对文本中的替换错误进行自动发现并且获取。
中文文本错误主要分为替换错误、多字错误、缺字错误、标点符号错误等。
替换错误是指文本中的词中的某个字被另外一个字替换,一般替换的字具有某种特征,比如两个字是音相似或形相似等。
例1. 错误句子: 这个月冲值有优惠吗?
正确句子: 这个月充值有优惠吗?
错误原因: 其中的“冲”就是“充”字的音相似替换错误,其中“冲值”不是字典中的词,这种错误会导致和上下文语境邻接不合理。
例2. 错误句子: 我这个月重置了话费。
正确句子: 我这个月充值了话费。
错误原因: 其中“重置”这个词本身没有错误,只是在句子中搭配不合理,属于音似词替换错误。
例3. 错误句子: 请帮我查木月的GPRS流量
正确句子: 请帮我查本月的GPRS流量
错误原因: 其中“木”就是“本”的替换错误,“木”和“本”为形相似。
例4. 错误句子: 请帮我取悄天气预报。
正确句子: 请帮我取消天气预报。
错误原因: 错误句子中的“悄”就是“消”的形相似替换错误。
替换错误根据替换字的错误类型又可以分为音似字替换错误、形似字替换错误等。
(1) 音似字替换错误
某些正确的字和错别字有一个共同点,是错别字和正确字语音相似。一个汉字C是由一个声母和一个韵母组成的,如果两个汉字的声母相似或相同并且韵母也相似或相同,称这两个汉字是音相似字。
例1中的“冲”与“充”,例2中的“重置”与“充值”就属音似字替换错误。
(2) 形似字替换错误
某些正确的字和错别字有另一个共同点,是错别字和正确字的字形相似。字形相似的定义可以通过汉字的结构和笔顺相似来定义,本文在此不对字形相似算法进行介绍,只是利用汉字形相似算法对汉字字形相似进行求解,得到两个汉字之间的字形相似度,通过实验得到阈值来判断两个汉字字形相似。
比如,例3中的“木”与“本”字形相似度为“0.780”,例4中的“悄”与“消”字形相似度为“0.781”,这种错误为形似字替换错误。
多字错误又称为插入错误,主要是在输入过程中某个字重复输入或误输入导致的错误。
例5. 错误句子: 《手机早晚日报》具体如何收费及订阅方法,请回复。
正确句子: 《手机早晚报》具体如何收费及订阅方法,请回复。
错误原因: 其中“早晚日报”中的“日”字是由于误输入而导致多字错误。
缺字错误又称为删除错误,主要是少字或词导致句子不完整。
例6. 错误句子: : 为什么我的卡又无缘无的扣掉几块钱?
正确句子: : 为什么我的卡又无缘无故的扣掉几块钱?
错误原因: 其中“无缘无”后面少了“故”字导致的错误。
这类错误主要是标点符号用法不当,或者缺标点符号、多标点符号等。
例7. 错误句子: 请帮我查询8月份要扣哪些月租.本机号8月份开通了哪些功能.谢谢.
正确句子: 请帮我查询8月份要扣哪些月租?本机号8月份开通了哪些功能。谢谢。
原因分析: 这句子中的标点符号都用错了,应该用中文的“?”和“。”等。
本文主要工作是针对于文本错误中的替换错误进行分析和自动获取。
英文非词错误研究从20世纪70年代开始到80年代,主要方法是采用模式匹配和字符串比较的方法从预先定义好的字典中查找相应的词。Joseph J Pollock(1984)收集了大规模真实文本中拼写出错的英文单词并给出相应的正确拼写,建造了一个无歧义的误拼字典[2]。在进行英文单词拼写检查时, 查找误拼字典, 如果查找成功, 则说明该单词拼写有误, 该词的正确拼写字段为纠错建议。Karen Kukich(1992)通过计算误拼字符串与词典中某个词间的最小编辑距离来确定纠错候选词[1]。E M Riseman(1974)和E D Ward等(1971)提出基于n元文法, 通过对大规模英文文本的统计得到单词与单词间的转移概率矩阵。当检测到某英文单词不在词典中时, 查转移概率矩阵, 取转移概率大于某给定阈值的单词为纠错建议[3-4]。
真词错误又称为上下文相关的错误,随着20世纪80年代自然语言处理模型的发展,很多模型也用于真词错误校对研究。通常大多数真词错误研究都是使用一个预先定义好的混淆集[5]。Golding等(1995)提出了基于Bayesian混合的方法来进行上下文相关拼音校对,采用Bayesian分类器结合上下文词和词语搭配两种特征对预先定义好的混淆集进行统计和判断[5]。Golding等(1999)采用Winnow方法对上下文特征和词语搭配特征进行学习, 利用这些特征对目标词混淆集中的词进行选择[6]。
目前国内在中文文本自动查错方面的方法归类为以下几种:(1)基于规则或语言学知识的方法[7-8];(2)基于统计的方法[9-11];(3)基于机器学习的方法[12-13];(4)混合的方法[14-16]。其中每种方法都采用一种或多种语言特征来进行分析和处理,常采用的特征有:上下文的字、词和词性等局部特征,邻接词接续关系,依存文法以及语法规则、词搭配规则等语言学知识。在中文文本自动纠错方面,目前还没有很好的系统的方法。自动纠错不仅仅要考虑字词的错误规律,还得考虑语法、语义方面的知识,构建纠错知识库,完全靠人工去构建纠错知识库是不可能的,如何让机器自动或半自动来构建纠错知识库这是中文文本自动纠错的挑战和难点。
本文错别字识别系统的基本思想是: 首先对用户问题日志语料进行分词和标注,然后对分词后的句子中出现的单字散串按一定的规则进行合并,对分词结果中的词和合并的串进行音相似和形相似聚类,得到相应的相似词串类,然后通过对各个相似词类进行上下文语境特征提取,进行统计分析,获取错别字对并且进行验证。图1是系统整体框架和各模块设计。
图1 错别字识别系统框架
系统采用中国科学院计算技术研究所的ICTCLAS对用户问句语料进行分词,如果用户问句中的词中包含错别字,则该词在分词的时候会被分成散串,所以需要对分开的散串进行合并来进行相似词聚类和统计分析。比如例4中的“取悄”分词后为“取 悄”,合并以后可以通过4.3中的相似词串聚类和“取消”归为一类,从而进入下一步的分析。一些未登录词等在分词过程也会分为散串,比如例1中的“充值”分词结果为“充 值”,也可以通过散串合并来进行处理。
系统通过以下规则来进行合并:
其中第一种情况,是合并类似于“冲 值”这种错误散串和“充 值”这种正确的散串。后面两种情况合并类似于“已 开通”、“以 开通”的情况。
本文首先通过汉字拼音表得到汉字的拼音和汉字的点阵相似度和笔顺相似度,然后通过文献[17]中的方法对每个汉字求其对应的音相似字和形相似字,得到音相似表和形相似表。
通过音相似和形相似的算法对分词的多字词和合并的词串进行相似聚类。根据音相似的定义,通过相似拼音表和汉字拼音表来判断两个词串是否音相似。对于形相似,根据字的形相似定义以及算法得到的汉字形相似对应表,来判断两个词串的对应位置的字是否相似来判断两个词是否相似。
比如“充值”、“冲值”、“冲直”、“充直”属于音相似,将它们归为一类。“取消”、“取悄”、“取销”形相似,也归为一类。
相似词聚类后,对每一个类别中的每一个候选串在包含该串的句子中求出其上下文语境。对于句子长度为n的句子W0W1…Wi-2Wi-1WiWi+1Wi+2…Wn,Wi为待判断的候选串,其左右语境为W0W1…Wi-2和Wi+1Wi+2…Wn,远距离窗口一般用来发现语义错误,近距离语境常用来解决语法错误,文中的方法主要用来发现文本中的替换错误,所以在本文中取左右窗口宽度为2的上下文语境(上文语境为:Wi-2Wi-1,下文语境为Wi+1Wi-2)和左右窗口宽度为1的上下文语境(上文语境为:Wi-1,下文语境为Wi+1),并按相同的上下文进行聚类,同时记录该候选串在该上下文语境中出现的频次。
例如如下句子:
(1) 请问 我 的 电话 什么 时候 冲 直 有 和 钱 送 呢 。
(2) 16 什么 时候 冲 值 有 钱 送 ?
(3) 什么 时候 充 值 有 钱 送
(4) 你好 !请问 我 的 手机 冲 直 二十四 小时 后 还 不能 上网 。
(5) 我 的 手机 充 值 二十四 小时 啦 怎么 还是 上 不 了 网 啊
对于类别“充值、冲值、冲直”,求出其窗口宽度为2的上下文语境(什么时候,有钱)、(的手机,二十四小时),然后按上下文语境进行归类,将其归为以下两类:
表1 上下文语境分类示例
有一些特征词对于相似词串类中的词串实际上没有帮助,在算法中需要删除这些词。比如表中的“充值”与“ 冲值”的相同的上下文词“的”,对于这两个词串的区分没有意义,故该特征需要删除。本文通过统计得到的词的TF-IDF值来判断该词是否用于该特征是否忽略。
根据窗口宽度为2的上下文语境统计及聚类得到的结果,用Ni表示候选类别(W1,W2…Wn)中Wi(1≤i≤n)的在某个语境中出现的频次。
定义如下公式:
(1)频次最大值:N=Max(N1,N2…Nn)
做如下判断:
1) 如果类别中某一个候选串Wi,其Ni=N,并且N>λ(λ为设定的阈值,经验值为5)则该候选串Wi在语境中是正确的;
2) 如果某一个Wi,其Ni 3) 只有出现正确的时候,才能出现错误的;否则都认为是无法识别; 4) 如果不属于以上两种情况,则认为该词无法识别其正误。 对于无法识别的类别,进行进一步的验证处理,缩小语境进行统计,取左右窗口宽度为1的上下文语境再进行统计其频次,按以下规则进行判断: 1) 如果类别中某一个候选串Wi,其Ni=N,并且N>ζ(ζ为设定的阈值,经验值为7)则该候选串Wi在语境中是正确的; 2) 如果某一个Wi,其Ni 3) 如果在窗口宽度为2的语境中某候选串被判断是正确的,在这次判断后其频率不是最多,则放弃本次判断,认为该类别正误无法判断; 4) 除此之外,则认为该词无法识别其正误。 定义 错别字对结构(Seed Dictionary,SD)可以抽象为以下六元组: SD=(rightword,wrongword,rightphrase, wrongphrase,Left_Context_Set, Right_Context_Set) 其中wrongphrase为错误的串,rightphrase为正确的串,rightword与wrongword为rightphrase与wrongphrase对应位置不同的字(wrongword为rightword的错别字),Left_Context_Set为wrongphrase左边的语境串的集合,Right_Context_Set为wrongphrase右边的语境串的集合。Left_Context_Set和Right_Context_Set的格式为~W1|~W2.....|~Wn,其中“~”表示“不出现Wi时wrongphrase为rightphrase的错误的串”,对于Left_Context_Set,当包含wrongphrase的句子,wrongphrase左边紧相邻的字符出现Left_Context_Set中的任意一个时候,则此时wrongphrase在该句子中不是错误的串,Right_Context_Set类似。如果左边或右边没有语境使得wrongphrase不是错误的串,则用“NULL”表示。 例如: 对于这对错别字对(已,以,已开通,以开通,~可|~可不可,NULL) 下列句子: 1) 取消已开通的彩铃。(正确) 2) 取消以开通的彩铃。(错误) 3) 我可以开通彩铃吗?(正确) 对于句子3),由于“可”与“以”组成词,此时“以开通”不是错别字,也就是说,当“以开通”前面出现“可”或“可不可以”时,“以开通”中的“以”就不是错别字。 通过上例,可以看到,错别字对结构SD的第五列和第六列有效的解决了类似的歧义问题。另外一个优点在于当某些字很难通过算法来判别的时候,可以通过手工整理出那些字的错别字对,比如说某些不常用字,如果在文本中出现就是错误,此时可以将这些字放入到错别字对词典中。人工整理所有的错别字对是不现实的,下面介绍自动抽取错别字对,使错别字对词典逐渐增加。 对上下文语境统计及聚类结果验证后,得到候选错误词对(RightPhrase,WrongPhrase)需要进一步验证才能获取相应的错别字对,通过以下算法自动抽取错别字对: 用iFirContextNum表示RightPhrase被认为正确的上下文的个数;iSecContextNum表示WrongPhrase被认为正确的上下文的个数;iFirNumOfRight表示RightPhrase被认为正确的在所有识别语境中的频率;iFirNumOfWrong表示WrongPhrase被认为错误的在所有识别语境中的频率;iSecNumOfRight表示WrongPhrase被认为正确的在所有识别语境中的频率;iSecNumOfWrong表示RightPhrase被认为正确的在所有识别语境中的频率; 用如下算法对错别字对进行获取和验证: 步骤1,如果RightPhrase为合并的串,而WrongPhrase不是合并的串,则该(RightPhrase,WrongPhrase)不是一对错别字; 步骤2,如果结果词典中不存在(WrongPhrase,RightPhrase),则(RightPhrase,WrongPhrase)为一对错别字; 步骤3,如果词典中存在(WrongPhrase,RightPhase),做如下判断: 1) 如果iFirContextNum>iSecContextNum: ① 并且iFirNumOfRight/iFirNumOfWrong>iSecNumOfRight/iSecNumOfWrong,则认为(RightPhrase,WrongPhrase)为一对错别字; ② 否则:(RightPhrase,WrongPhrase)和(WrongPhrase,RightPhrase)都不是错别字对; 2) 如果iFirContextNum ①并且iFirNumOfRight/iFirNumOfWrong ② 否则,(RightPhrase,WrongPhrase),(WrongPhrase,RightPhrase)都不是错别字对; 获得错别字后,需要获取该对错别字的上下文语境Left_Context_Set和Right_Context_Set。对于语料中某句子的子串W1W2W3,其中WrongWord是W1W2W3的子串,W2是WrongWord的子串,W1,W2,W3为单独的词。则取得子串W1W2W3与WrongWord的不同串: Left_Context=W1W2-WrongWord; Right_Context=W2W3-WrongWord; 分别将“Left_Context”和“Right_Context”作为候选队列中。比如上例中的Left_Context=“可以开通”-“以开通”=“可”。 对获取到得Left_Context和Right_Context做如下消歧: 1)如果RightPhrase与词WrongPhrase不是首字不同,则Left_Context不作为语境; 2)如果RightPhrase与词WrongPhrase不是尾字不同,则Right_Context不作为语境; 3)否则,Lleft_Context和Rright_Context都作为(RightPhrase,WrongPhrase)的语境,分别放入到Left_Context_Set和Right_Context_Set中。 测试集: 本文从通信领域某Q/A系统日志中随机抽取了200万行的用户咨询数据组成本文的测试集,咨询主要是关于通信业务信息咨询,如关于彩铃业务如何开通等,测试集经过人工标注包含替换错误65 400个。 实验采用某限定领域问答系统日志进行实验,系统的评价以召回率、准确率和F-Score作为评价标准。由于系统主要获取替换错误错别字对,所以指标定义如下: 用本文所提出的方法对测试语料进行实验,得到71.32%的召回率,82.6%的准确率,F-Score为76.54%。部分实验结果如表2所示。 表2 部分实验结果 数据稀疏也是本文方法面临的一个问题,一些在测试语料中出现频度比较少的词也会被误认为是出现频度高的相似的词的错误词,例如“找个”会认为是错误的,而相似词“这个”则会被认为其对应的是正确的。除此以外,本文的方法还存在以下问题: 问题类型1: 由字形相似和音相似引起的错误 例如: 拨 出 电话 时 语音 提示 储 值 分析: 将“拨出”是错误的,“发出”是其对应正确的,导致这类错误的原因是“拨”与“发”形相似,从而聚类到一起。 问题类型2: 由多音字引起的错误 例如: 我 给 个 电话 号码 你 分析: 将“给个”认为是错误的,会将“几个”认为是其对应正确的词,这类错误是因为多音字造成的错误,“给”是多音字,所以导致“几个”与“给个”音相似。 将来的工作,除了要考虑音相似特征和形相似特征以外,还应该考虑一些远距离的特征和搭配特征以及大规模的语料来统计字接续关系、词接续关系、词性接续关系等特征来解决类似的问题,同时可以利用本体知识库来解决一部分问题。 通过实验结果,可以看到我们的系统可以有效地获取文本中的大多数替换错误,得到错别字对,用于文本自动校对,有助于提高Q/A的容错性。 本文对领域问答系统用户问题语料进行分析和统计,提出了一种自动获取错别字对的方法,实验结果显示,该算法有效地解决了文本中替换错误的自动发现和自动纠错,召回率达71.32%,准确率达82.6%,实际应用中应用该错别字对词典对问答系统的理解度有很大的提高,同时该方法为中文文本校对提供了纠错知识库的自动获取方法,实验结果表明该方法是有效的。本文的主要不足之处有以下两个方面: 1) 该方法还是只是针对字词级别错误,特别是针对于字词级别的音似词和形似词的替换错误;对于缺字错误和多字错误、以及语法错误等没有涉及; 2) 系统只考虑了上下文语境特征,没有考虑词性和搭配等特征。 [1] Kukich K. Techniques for automatically correcting words in text[J]. ACM Computing Surveys, 1992, 24(4): 377-439. [2] Joseph J Pollock. Automatic Spelling Correction in Scientific and Scholarly Text[J]. Communication of the ACM, 1984, (4): 358-368. [3] E M Riseman. A Contextual Postprocessing System for Error Correction Using Binary N-gram[J]. IEEE Trans. on Computer, 1974, 22(5): 480- 493. [4] E D Ward, D M Riseman. Contextual Word Recognition Using Binary Digrams[J]. IEEE on Computers, 1971, 20(4): 397 -403. [5] Golding A R. A bayesian hybrid method for context-sensitive spelling correction[C]//Proceedings of the Third Workshop on Very Large Corpora,(1995):39-53. [6] Golding A R, Roth D. A winnow-based approach to context-sensitive spelling correction[J]. Machine learning,1999,34(1): 107-130. [7] 易蓉湘,何克抗.计算机汉语文稿校对系统[J]. 计算机研究与发展,1997, 34(5):346-350. [8] Sun Cai. Research on Lexical Error Detection and Correction of Chinese Text:[Master’S Degree Dissertation][D]. Beijing: Tsinghua University Computer Science and Technology Department,1997. [9] 施得胜,王良志,陈志达,等. 基于统计的中文错字侦测法[J].电脑与通讯,1992,8:19-26. [10] Chao-huang Chang. A Pilot Study on Automatic Chinese Spelling Error Correction[J]. Communication of COLIPS,1994,4(2):143-149. [11] 孙才,罗振声. 汉语文本校对字词级查错处理的研究[C]//第四届计算语言学会议论文集(语言工程). 北京:清华大学出版社,1997:319-324. [12] Lei Zhang,Ming Zhou,Changning Huang. Multifeature-based Approach to Automatic Error Detection and Correction of Chinese Text[C]//Microsoft Research China Paper Collection, 2000: 193-197. [13] 张磊,鲁明羽,周明,等. 基于持征与学习的中文文本的自动校对方法[C]//第三届全球智能控制与自动化大会.合肥:2000. [14] 马金山,刘挺,李生. 基于n-gram及依存分析的中文自动查错方法[C]//Advances in Computation of Oriental Languages—Proceedings of the 20th International Conference on Computer Processing of Oriental Languages, 2003. [15] 于勐,姚天顺.一种混合的中文文本校对方法[J]. 中文信息学报, 1998,12(2):31-36. [16] 张仰森,曹元大,俞士汶. 基于规则与统计相结合的中文文本自动查错模型与算法[J]. 中文信息学报, 2006,20(4):1-7. [17] 丰强泽,曹存根.语音查询中的辨音方法:中国,CN1514387[P]. 2004.07.21.4.6 错别字对获取
5 实验结果及分析
6 结论及展望