from:https://www.zhihu.com/question/24675366?sort=created
中文:主要是從拼音角度,比如輸入“雷縫”(雷鋒),使用編輯距離會改變要查詢的語義,所以我們從同音詞入手,使用噪聲信道模型,先確定出一些常見的相關詞,再確定概率。
英文:主要是單詞拼寫,可以使用編輯距離。
之前自己實習的時候,根據同事的講解,自己的理解,總結過一篇文章,這里copy過來,剛好回答這個問題。
總結一下問題:
理論模型:Noisy Channel Model(噪聲信道模型)
總結一下問題:
根據用戶輸入的query,以及其它信息,判斷用戶是否輸入錯誤,如果輸入錯誤,猜測用戶原本想輸入的query並提示。
再舉幾個栗子:
- case1:當用戶在搜索引擎中輸入query時,本來想輸入,“中國好聲音”,但是因為不小心,輸入了“中國好sengyin”,這時需要搜索引擎能發現用戶輸入了錯誤的查詢語句,提示原本用戶想輸入的query,“中國好聲音”,
- case2:用戶本想輸入,“肯德基”,但是因為記不清這幾個字的字形,只記得字的發音,錯誤地輸入了,“肯得雞”,這里,搜索引擎需要發現用戶原本想輸入的query,“肯德基”
理論模型:Noisy Channel Model(噪聲信道模型)
噪聲信道試圖通過帶噪聲的輸出信號恢復輸入信號,形式化定義為:
應用到這個問題:把用戶輸入的query記為input_query,用戶原來想輸入的query記為correct_query,那么correct_query對應於噪聲信道模型的Input,input_query對應於那個模型的Output
我對所有可對的correct_query,我們要分別計算P(input_query | correct_query) * P(correct_query ),
- P(correct_query) 可以使用unigram語言模型統計得出
- 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出現的總次數成正比例關系。
糾錯總體分這么幾個方面:
- 同音糾錯,
- 形似字糾錯(五筆和手寫輸入,會帶來形似字錯誤),
- “多字、少字、順序錯誤”,
- 模糊音糾錯,
舉個栗子:
- 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,先切段,再對每個片段進行糾錯
############################################################################





