[转载]搜索服务中的拼写检查
转载声明:http://backend.blog.163.com/blog/static/202294126201282403252173/
介绍
在搜索应用中,拼写检查(Spell Check)通常是指,在用户输入拼写错误的查询关键词后,搜索系统能有效进行判别,并给出修正建议的关键词。
典型的例子:比如当用户输入“中华人民共合国”后,搜索系统会给出修正建议:您是否要查询“中华人民共和国”?
拼写检查往往能够引导用户修正自己的查询关键词,让用户获得真正想要的结果,从而提高点击率、以及用户体验、满意度等等。
所以通常的搜索系统都会支持这一功能,并且进行不断地改进,来提高拼写建议的准确性和有效性。
拼写检查和建议的实现有很多种方法,从简单直接到复杂的组合;本文会对一些常用实现方案进行一些介绍和分析。
索引
1. 介绍
2. 分析
3. 方案
3.1 基于查找表
3.2 基于修正规则
3.3 查询词相似度
3.4 查询日志
4. 方案的改进和评估
5. 开源方案
分析
拼写检查和建议实际上会包含以下几个方面:
* 拼写错误判定:综合考虑多个因素,来判定用户输入是否为拼写错误
* 拼写建议查找:通过不同的方案,获得针对查询词的拼写纠正项
* 拼写建议选择:结合考虑多个权重,对候选纠错建议进行打分的排序
* 拼写建议评估:评估拼写建议最终是否有效
方案
常用的拼写检查和建议的方案有:
1. 基于查找表
2. 基于修正规则
3. 查询词相似度
4. 查询日志
查找表
最简单直接的拼写纠错方案,即是维护一份常见的拼写错误列表,并给出正确拼写的选项。(比如:画象 -> 画像)
处理用户查询输入时,直接查找列表,找到符合的项,即给出拼写修正建议。
初始的拼写纠错数据可以来源的一些公开的常用出错列表,也可以部分来源于用户查询日志分析;
后续的维护和更新往往需要人工介入。
这种方案的好处是简单直接,没有什么技术门槛。
效果的好坏取决于拼写纠错数据的质量。
坏处是数据难以积累,维护成本高;难以识别新词;不会考虑查询上下文,智能程度较低。
规则
另一种方案是基于规则,即维护一批拼写纠错规则,匹配查询模式,并给出修正模式。(比如:的<动词> -> 地<动词>)
处理用户输入时,尝试匹配拼写检查规则,匹配到某一规则后,给出修正后的建议。
规则的定义要靠对常见拼写错误情况的总结,后续可以根据新的拼写错误案例添加新的规则。
这种方案相比于查找表,好处是覆盖率会高,一条有效的规则能处理大量的案例。
坏处是新规则的总结分析比较难;且很大拼写错误还是无法用规则来覆盖到,通常还是要去查找表相结果使用。
相似度
一种比较自动的拼写纠错方案,是比较输入查询词和现有词典中存在的词的相似度。
这种方案在拼写错误判定时,往往结合搜索返回结果的数量;当搜索结果数低于某一预期值时,会认为查询词是可疑的拼写错误。
拼写建议,会通过查找现有词典中与查询词相近似的词来作为候选;可以通过N-Gram来查找到一些候选词,然后通过Edit Distance来计算相似度(会更适合英语单词纠错,因为中文词通常更短,相似度计算往往不够准确)。
最终是否给出拼写建议,会综合考虑查询词和候选纠错词之间流行度和查询返回结果等因素的比较来决定。
这种方案相较于之前方案的好处是纠错建议生成比较自动,覆盖率高,不需要人工维护。
缺点是智能程度不够,准确率较低,且在中文应用上有局限。
查询日志
另一种比较智能的方案,是基于查询日志的分析。
基于一种假设:当一个用户在同一访问会话中,后继输入的查询词很可能是前面查询词的修正。
通过统计大量的用户访问查询日志,往往可以得到很多类似的修正行为,从而自动生成一份拼写修正表。
这种方案的优点是:智能化程度高,覆盖率高;自动生成,维护成本低;基于用户行为统计,不受限于语义纠错。
缺点是依赖于大规模的用户查询日志,数据获得门槛较高,只有少数大用户量的互联网产品适用。
方案的改进与评估
现实中的拼写检查纠错系统,并不局限于只使用一种方案,且往往综合使用几种方案的组合,互相补充。
然后结合来自各个方案生成的拼写建议,通过权衡不同的因素和规则,不断调试改进,来确定是否进行拼写纠错,选择哪个拼写建议。
所以复杂的组合拼写检查系统的改进,有时可以归结为一个分类系统的训练和评估。
可能的训练方案:
目标分类:纠错 vs. 不纠错
输入属性:搜索返回结果数,查询词流行度,查询词+上下文的流行度,查询词长度,等等
训练数据:可来自于人工标注数据,或是第三方数据
方法:可以通过一些常用的分类训练算法(比如决策树),来生成和改进一个分类模型
结果:生成一个分类模型,基于一些输入属性,给出一个纠错结论。
评估标准:
* 正确率:给出纠错建议中,正确修正了拼写错误的比例
* 覆盖率:拼写错误输入中,给出了拼写建议的比例
评估方法:
* 人工评估:对测试集结果少量采样,进行人工评估,并统计结果
* 第三方数据评估:通过第三方纠错系统数据,来对采样结果进行自动估计(比如:使用Google Spellcheck API, Bing Spellcheck API)
* 线上数据评估:通过用户对纠错结果的点击统计,来评估纠错的效果与准确性
开源方案
一些开源方案,不过大都是针对英文的,实现方案大都是结合了些一些规则和查询词相似度分析:
* Lucene Spellcheck: http://wiki.apache.org/jakarta-lucene/SpellChecker
* Solr Spellcheck: http://wiki.apache.org/solr/SpellCheckComponent
* AtD (After the Deadline): http://open.afterthedeadline.com/
* Ispell: http://www.gnu.org/software/ispell/ispell.html
* Aspell: http://aspell.net/