搜索引擎纠错技术

from:https://www.zhihu.com/question/24675366?sort=created
 
中文:主要是从拼音角度,好比输入“雷缝”(雷锋),使用编辑距离会改变要查询的语义,因此咱们从同音词入手,使用噪声信道模型,先肯定出一些常见的相关词,再肯定几率。
 
英文:主要是单词拼写,能够使用编辑距离。
 
 
 
 
 
以前本身实习的时候,根据同事的讲解,本身的理解,总结过一篇文章,这里copy过来,恰好回答这个问题。

总结一下问题:

根据用户输入的query,以及其它信息,判断用户是否输入错误,若是输入错误,猜想用户本来想输入的query并提示。session


再举几个栗子:搜索引擎

    • case1:当用户在搜索引擎中输入query时,原本想输入,“中国好声音”,可是由于不当心,输入了“中国好sengyin”,这时须要搜索引擎能发现用户输入了错误的查询语句,提示本来用户想输入的query,“中国好声音”,
    • case2:用户本想输入,“肯德基”,可是由于记不清这几个字的字形,只记得字的发音,错误地输入了,“肯得鸡”,这里,搜索引擎须要发现用户本来想输入的query,“肯德基”

理论模型:Noisy Channel Model(噪声信道模型)
<img src="https://pic3.zhimg.com/50/v2-c696fddac63c684d7af1327c2d756db6_hd.jpg" data-rawwidth="541" data-rawheight="89" class="origin_image zh-lightbox-thumb" width="541" data-original="https://pic3.zhimg.com/v2-c696fddac63c684d7af1327c2d756db6_r.jpg">

噪声信道试图经过带噪声的输出信号恢复输入信号,形式化定义为:3d

<img src="https://pic1.zhimg.com/50/v2-8c49e008e13b1d5a4d50e25f34cd504c_hd.jpg" data-rawwidth="658" data-rawheight="66" class="origin_image zh-lightbox-thumb" width="658" data-original="https://pic1.zhimg.com/v2-8c49e008e13b1d5a4d50e25f34cd504c_r.jpg">

应用到这个问题:把用户输入的query记为input_query,用户原来想输入的query记为correct_query,那么correct_query对应于噪声信道模型的Input,input_query对应于那个模型的Outputblog

我对全部可对的correct_query,咱们要分别计算P(input_query | correct_query) * P(correct_query ),索引

  1. P(correct_query) 能够使用unigram语言模型统计得出
  2. P(input_query | correct_query) 能够使用input_query和correct之间的编辑距离和拼音编辑距离、能够从模糊音、形似字字典的数据给出input_query和correct_query之间的距离信息,能够从用户session中挖掘可能能够用到的数据,由于有些用户会,主动对本身输错的query进行修改直到正确为止,P(input_query | correct_query)和用户将input_query改写成correct_query的次数 / input_query出现的总次数成正比例关系。

纠错整体分这么几个方面:input

  1. 同音纠错,
  2. 形似字纠错(五笔和手写输入,会带来形似字错误),
  3. “多字、少字、顺序错误”,
  4. 模糊音纠错,

举个栗子:io

  • case1: 好比用户输入,“kendeji”,那么,从同音纠错的角度,可能的correct_query能够是“肯德基”,“肯得鸡”,从形似字纠错方面看没有什么可能的correct_query,“多字、少字、顺序错误”角度,能够是“肯德基店”,咱们先获取这些可能的correct_query的集合,称之为候选集,而后对于集合中的每一个correct_query计算P(input_query | correct_query) * P(correct_query ),值最大为最后的提示的correct_query
  • case2:好比用户输入,“汗丽轩”,从同音纠错的角度,可能的correct_query能够是“汉丽轩”,“韩丽轩”,从形似字纠错方面看correct_query多是“汗雨轩”,模糊音纠错角度看,多是,“汉腻轩”,咱们先获取这些可能的correct_query的集合,称之为候选集,而后对于集合中的每一个correct_query计算P(input_query | correct_query) * P(correct_query ),值最大为最后的提示的correct_query

ps:纠错时会采用一个策略,叫片断纠错策略,会把长度比较大的query,先切段,再对每一个片断进行纠错class

 

 

############################################################################搜索