搜索引擎糾錯技術

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

 

 

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

相關文章
相關標籤/搜索