转自:http://blog.csdn.net/oanqoanq/article/details/7004530
1. 背景介绍
搜索引擎的输入查询中,有相当一部分是带输入错误的查询。而提交有错误的查询给搜索引擎,通常得不到好的搜索结果,返回结果数很少并且和用户的期待相差很远,会严重影响了用户的使用体验。 如:
“火箭队对振勇士直拨”
直接用这样的查询,显然不可能给用户找到正确的网页。 但是,如果能自动地对查询进行纠错,修改成符合用户原本意图的查询“火箭队对阵勇士直播”,就可以返回适当的网页,增加用户对搜索引擎的良好体验。
据统计,在英文查询串中,有Spelling Error的查询串占到了总查询串的10%~15% (Cucerzan & Brill 2004),而中文有输入错误的查询串保守估计也要占到所有查询串的5%~10%左右。所以,查询纠错(Query Correction)就成为网页搜索引擎研发过程中的一项非常重要的技术, 其主要任务是通过修正用户的有错误查询,以期望得到符合用户需求的查询结果,从而保证搜索引擎查询结果的正确率和召回率。
需要说明的是,由于中文汉字是笔画构字,不同与英文单词的字母构字,所以在输入上,不存在输入字库中没有的汉字,所以中文查询没有传统意义上的“错字”,而只有“别字”,这点和英文查询不同。从输入错误所占的比例来看,所有中文查询中,输入有误的查询所占比例也要小于英文的相应比例。
2. 相关工作
有关查询纠错的研究工作由来已久,但是中文查询纠错的的研究论文相对较少,大量的工作集中在英文的查询纠错上,但是基本原理是相通的。所以这里以英文的查询纠错为背景,介绍一下在英文查询纠错方面已有的一些进展。
查询纠错的任务始终集中在原有的任务设定上,即只纠正具有明显错误的查询。基于这样的任务设定,英文查询纠错有两条主要的研究路线,分别针对不同的纠错对象:
(1) 拼写错误的词纠错 (Non-word error spelling correction)
有拼写错误的词是指那些不存在于词表中的“词”,查询中出现这样的词,其修正的目标就是用词表中正确的对应词替代它。拼写错误查询纠错的工作重点在于为查询中每一个不存在于词表的词生成一个候选词表,并为每一个候选词表按排序。传统上,侯选词的排序主要基于人工设定的分数:给不同的编辑操作(edit operation)赋予不同的得分;同时结合侯选词的频率,候选词本身在语料库中出现的频率较高的,排序可能靠前 (Damerau, 1964; Levenshtein, 1966)。这可以看成是一种基于规则的处理方法。
近些年来, 统计模型被广泛应用于自然语言处理的各个任务,包括查询串纠错。在 (Kernighan et al, 1990) 的工作基础上,(Brill & Moore, 2000) 提出一种改进的基于噪声信道模型的纠错方法,允许一般性的串到串的编辑操作,这种方法有助于对一些重要的认知错误,如"le"和"al"的混淆,进行建模。而(Toutanova & Moore 2002) 通过对英文单词“发音”信息的显式建模, 进一步改进了基于噪声信道模型的纠错。这两个基于噪声信道模型的方法都需要有一个错误拼写词/正确拼写词的对照表用于训练,而后者还需要一个词的发音词典。近年来,(Ahmad & Kondrak, 2005)发现还可以从用户查询日志来学习这样的模型,体现了用户查询日志的重要作用。与此类似的工作还有(Martin, 2004),但是是从一个非常大的未预处理的生文本中学习的。 基本上,所有针对拼写错误的查询纠错,重点都在当前词本身,而很少考虑上下文信息。
(2) 真实词纠错 (Real-word spelling correction)
真实词纠错也可以称作上下文敏感的词纠错。它试图检测当前特定上下文环境下,一个词表中存在词的不恰当的使用。也就是说待纠错的词本身是存在的,但是在当前上下文中不适用。针对这个任务的常规做法是使用一个预先定义好的混淆集(Confusion Set),如 (Golding & Roth, 1996) 和 (Mangu & Brill, 1997)的工作。和拼写错误纠错不同的是,对于真实词不适用的判断,需要更多的上下文信息。
近年来英文查询纠错已经不太区分词本身是有错误还是不适用,都可以在统一的机器学习的框架下来解决,(Li et al, 2006)就对比了噪声信道模型和最大熵模型。另外,把查询纠错和其他查询优化任务结合起来,统一处理,(Guo et al, 2008) 也做了一些尝试。
3. 中文查询纠错的解决方案
中文的查询纠错,本质上可以借鉴英文真实词的纠错方法(因为查询中不可能存在“错字”,只可能是“别字”),这里提供了一个中文纠错的解决方案:基本上可以分为三个重要的步骤来实现:
(1) 首先,从带标记的错误查询/正确查询的对齐语料和特定的语言资源中挖掘查询中可以用于替换的<错误片段, 正确片段>,包括汉字字符形式的和拼音形式的, 这是基本的纠错资源。
(2) 其次,在查询中出现了疑似错误片段时,尝试把疑似错误片段替换为相应的正确片段,遍历所有可能性之后,会形成多个可能的查询候选(包括原来的查询)。
(3) 最后,假如包括原有查询在内有N个候选查询,这N个候选查询会统一按一定策略进行打分排序,得分最高的候选查询不是原有查询的话,那就是原有查询的修正。
3.1 纠错对获取
从以往对齐的“错误查询/正确查询”数据中自动挖掘曾经被用作替换的<错误片断, 正确片断>,比如之前的纠错片断<直拨, 直播>, 可能是在“视频直拨”/“视频直播”中出现过的,那么抛开对齐语料的特定上下文,<直拨,直播>就被抽取出来。在另外没有见过的上下文中,如“火箭队比赛直拨”,替换后,“火箭队比赛直播”就是原来查询“火箭队比赛直拨”的候选修改查询。这是所谓的“汉字字符纠错对”。
字符纠错对通常覆盖面比较窄,比如还有“指拨”到“直播”的纠错可能,但显然,这样的字符错误层出不穷,所以中文查询纠错还需要引入拼音纠错对,如<zhi'bo' , 直播>。这样只要查询中出现了和“zhi'bo' ”同音的片段, 就可以尝试替换成“直播”。基于拼音的替换大大增加了纠错的可能,纠错覆盖度提高不少。
拼音纠错对可以从中高频常用词词表生成,以满足一般性的词语替换。也可以从搜索引擎的查询日志中挖掘高频、较新的查询词,按照拼音转化成拼音纠错对,以满足未登陆词,OOV(Out of Vocabulary),的词语替换。这样兼顾了一般性和特殊性的拼音纠错。
3.2 候选查询串生成
在经历了纠错对的替换后,每一次替换,会增加若干候选查询。 需要说明的是,存在一个错误片段,对应着多个可能正确片段的情况。 如“升至”,在以往的纠错历史上对应多个正确替换目标:“升值”、“圣旨”、“升职”等,就会形成多个查询候选。比如一个较复杂的例子:
“QQ农场荒钻在那里领化肥”
其中 “荒钻”可以替换成“黄钻”, “那里”可以替换成“哪里”, “话费”可以替换成“花费”。其示意图如下图所示,其中每个节点是一个词切分单元。
图. 候选查询生成示意图
从“开始”到“结束”总共有八条路径,分别对应八个候选查询(包括原串)
(1) “QQ农场荒钻在那里领化肥” (原串)
(2) “QQ农场荒钻在那里领花费”
(3) “QQ农场荒钻在哪里领化肥”
(4) “QQ农场荒钻在哪里领花费”
(5) “QQ农场黄钻在那里领化肥”
(6) “QQ农场黄钻在那里领花费”
(7) “QQ农场黄钻在哪里领化肥”
(8) “QQ农场黄钻在哪里领花费”
从一般性的常识来看,(7)才是最优的查询。 后续的工作就是要从这些查询候选串中找到这个最优的查询串。
3.3 寻找最优的查询串
从多个候选中找到最优的结果,其本质上都是一个排序的过程。而排序的依据,则根据任务的不同,会有不同的算法。在中文查询纠错的任务中,可用于给候选查询打分的信息是多样性的,比如候选查询本身的质量如何,就可以用历史上这个查询被提交给搜索引擎后用户的行为来刻画。也可以用这个候选查询在多大程度上符合人的“语言习惯”来刻画它的质量。其他的判断依据还包括拼音是否一致(主要针对字符纠错而言),所用到替换在历史上是否是一个好的替换等。这些信息可以单独用于候选串的排序,也可以组合起来,相互平衡,共同决定所有候选查询的相对质量高低。
3.3.1 用户点击信息 (Click-Through Info.)
在用户的查询历史上,一个候选查询可能是用户多次提交过的,那么可以根据用户的历史点击记录来判断这个候选查询的质量。一个简单的思路就是考虑一个候选查询被不同用户提交的次数越多,那么这个候选查询的热门程度和无错误的可能性就越高,同时,如果这个候选查询被提交后,用户紧接着有点击搜索引擎返回结果的行为,且比例较高,则也可能说明这个候选查询的质量较高。 这两个因素都是和查询串质量成正比的,所以可以表示成:
其中Quality(Query) 表示候选查询Query的质量,T(Query)表示候选查询Query被提交的次数,δ(Query)表示Query提交给搜索引擎后,用户点击了返回结果的比例。按这个公式的计算, Quality(Query)实质上是Query提交后用户点击了搜索引擎返回结果的次数。从直观上来看,这个数值越大,说明这个候选查询的质量越高。当然还可以有其他的利用用户点击信息的方式和算法来评估查询的质量, 这里不一一赘述。
3.3.2 语言模型(Language Model)
在自然语言处理(Natural Language Processing, NLP)中,语言模型常用来刻画一个语言片段的合理性。就中文查询纠错,对一个候选查询()合理性的评估应用语言模型,实际上是评价这个候选查询在多大程度上符合汉语的语言事实。用这个串各个词之间的联合概率来表示:
这个联合概率的计算,理想的语言模型计算过程应该是:
但通常由于数据稀疏,高阶单元,比如这里的P(w4|w3,w2,w1)很难在训练数据中观察到足够的次数,所以往往引入Markov假设,按Markov链的特性进行简化:
其中k 是模型中设定的历史词个数,也是模型的阶数,也就是说wi只和它前面的k个词相关。由于目前能获得语言资源有限,所以k一般只取到2以内。对大部分自然语言处理任务而言,基本上也够用了。为了书写方便, 这里举一个简单的例子来说明语言模型的应用。如“大喊民国”这个查询,在局部修改之后,对应如下的候选查询:
(1) 大瀚民国
(2) 打鼾民国
(3) 大韩民国
(4) 大汉民国
(5) 大喊民国
当取k=1时(二元语言模型),每个候选查询的合理性评估就是:
可以预见,一个估计合理的语言模型,可以计算得到
在实际应用中还需要知道各个概率单元的值。在数据量较为充足的情况下,通常使用最大似然估计(MLE)来获得每个概率单元的值。
其中#(wi)表示在观察语料中,wi出现的次数。“”表示任意词,#(·)就表示所有词出现的次数,基本上是语料库的大小了。
如果取k=1,
其中#(wi-1wi)表示在观察语料中,wi-1,wi邻接出现的次数。“”表示任意词,#(wi-1·)就表示wi-1在前,所有邻接词对的个数,基本等同于#(wi-1)。用到的观察语料需要“用语习惯”比较符合任务要求,在查询纠错中可以使用已有的正确的查询日志来计算这些概率单元。
尽管不符合语言学家的口味,语言模型在很多任务中证明是有效的。可能遇到的主要问题就是数据稀疏,也就是用的语料规模有限,最大似然估计不能准确的逼近实际概率。另外有些情况下概率会为0。比如wi在语料中没有出现过。常常得进一步修正概率估计的方式,可以有两个方案:
(1) 平滑策略;
(2) 上位概念策略;
对语言模型的平滑策略有很多种,具体可以参考相关论文(Chen and Goodman, 1998)。有一种比较通用的做法就是,在任务专用语料不足的情况下,可以用通用语料估计一个概率值,和专用语料进行线性平滑:
其他的概率单元计算类似。
另外,上位概念也可以解决部分数据稀疏问题,因为具体一个词出现的次数可能较少或者没有,但是它的上位概念出现的次数就可能足够多。在语义上可以用上位概念代替这个词。识别“超人归来”是个电影名,就可以计算相关的候选串概率:
显然语料中<电影>出现的次数会多很多。直观上看可以得到:
3.3.3 其他可用于排序的信息
除了用户点击信息和语言模型外,还可以采用其他可用于比较两个候选查询质量相对高低的信息。
(1) 词切分个数。一般情况下有错误的查询串,分词后词个数相对较多,因为错误的输入往往不能和前后字构成词,会单字成词,形成“碎片”的概率很高。 比如“QQ农场荒钻在哪里领化肥”,“荒钻”会被切分成两个单字词,“荒”和“钻”;而“QQ农场黄钻在哪里领化肥”中的“黄钻”是一个词。这就使得“QQ农场荒钻在哪里领化肥”整体的切词个数多于“QQ农场黄钻在哪里领化肥”的切词个数。分词个数能在一定程度上反映两个候选查询的相对质量高低,但从统计意义上来看,是一个比较弱的特征,应该和其他特征一起使用。
(2) 片段替换是否是一个好的替换。 一个替换,如<下栽, 下载> ,在纠错历史上经常出现这样的替换,则说明这是一个好的替换,反之则是一个不好的替换。 这里的“经常”需要统计替换次数后,用一个阈值来刻画。大于等于阈值的,是好的替换;否则是一个不好的替换。当然也可以用其他的策略来判断一个替换的好坏。
3.4 利用分类机制实现排序
评价两个候选查询之间的相对质量好坏,可以用一个训练好的分类器综合所有特征信息来排序,比如支持向量机(SVM)。使用支持向量机,需要定义一个两个候选查询对比的输入空间(Input Space) X。在这个输入空间上,对应的向量是两个候选查询的对比向量。就前面的讨论,可以定义一个5维的向量空间表示查询串q1和q2的差异,其中各个空间纬度代表的含义如下:
F1: 表示q1的用户点击信息相对于q2的用户点击信息的倍数;
F2: 表示 q1的一元语言模型得分相对于q2的一元语言模型得分的倍数;
F3: 表示q1的二元语言模型得分相对于q2的二元语言模型得分的倍数;
F4: 表示q1的词切分个数少于q2的词切分个数;
F5: 表示q2到q1的片段替换是否是一个好的替换,1是好的替换,否则为0;
有了输入空间的定义, 人工标记一部分训练数据(q1, q2, y)。 其中y=1表示q1的质量好于q2。y =-1,表示q1的质量差于q2。 按照定义的输入空间,生成特征向量,然后可以用Traditional SVM训练分割对比向量为两个类别(一个类别代表质量相对较高,一个类类别代表质量相对较低),得到广义的最优分类超平面。在实际应用中,如果一个新的(Q, Q')对应的对比特征向量到这个超平面的距离是d,则:
有了候选查询的两两相对排序,就可以给所有的候选查询排序。排序最高的候选查询,如果不是原始查询的话,那么就是原始查询的一个最优修改。
4. 总结
本文概述了查询纠错的研究背景和用于中文查询纠错的一个解决方案。重点阐述了这个解决方案的重要组成部分。 由于只是概述,所以很多内容仅仅介绍了基本思想,没有做进一步的探讨。如生成候选查询串的时候,不是所有的候选查询串都需要保留下来,可以先粗筛选,用1-2个判别特征就可以筛除掉大部分质量肯定不高的候选查询,最优查询的挑选空间就会小很多。减轻后续步骤的压力。另外从常用词表生成拼音纠错对也需要一定的策略,不然生成的候选查询集合将过于庞大。本文中文查询纠错的解决方案主要是基于统计的策略,所以不可能做到百分之百准确, 还需要从更多的角度来深入挖掘、设计适合查询纠错的特征、模型和算法。 更多有关查询纠错的研究工作,可关注WWW, SIGIR, ACL, EMNLP等国际知名会议的相关论文。
参考文献
1. Cucerzan S. and Brill E. Spelling correction as an iterative process that exploits the collective knowledge of web users. Proceedings of EMNLP'04, pages 293-300, 2004.
2. Damerau F. A technique for computer detection and correction of spelling errors. Communication of the ACM 7(3):659-664, 1964.
3. Levenshtein V. Binary codes capable of correcting deletions, insertions and reversals. Soviet Physice–Doklady 10: 707-710, 1966.
4. Kernighan M. D., Church K. W. and Gale W. A. A spelling correction program based on a noisy channel model. Proceedings of COLING 1990, pages 205-210, 1990.
5. Brill E. and Moore R. C. An improved error model for noisy channel spelling correction. Proceedings of 38th annual meeting of the ACL, pages 286-293, 2000.
6. Toutanova K. and Moore R. Pronunciation modeling for improved spelling correction. Proceedings of the 40th annual meeting of ACL, pages 144-151, 2002.
7. Ahmad F. and Grzegorz Kondrak G. Learning a spelling error model from search query logs. Proceedings of EMNLP 2005, pages 955-962, 2005.
8. Golding A. R. and Roth D. Applying winnow to context-sensitive spelling correction. Proceedings of ICML 1996, pages 182-190, 1996.
9. Mangu L. and Eric Brill E. Automatic rule acquisition for spelling correction. Proceedings of ICML 1997, pages 734-741, 1997.
10. Li M., Zhu M. H., Zhang Y. and Zhou M. Exploring distributional similarity based models for query spelling correction. Proceedings of COLING-ACL 2006, pages 1025-1032, 2006.
11. Guo J., Xu G., Li H., Cheng X., A Unified and Discriminative Model for Query Refinement, Proceeding of SIGIR 2008, 379-386. 2008.
12. Chen, S. F. and Goodman, J.: An Empirical Study of Smoothing Techniques for Language Modeling. Technical Report: TR-10-98, Harvard University. 1998.