糾錯是搜索引擎中一個非常有特色的模塊,對用戶輸入的內容進行改寫從而讓用戶得到正確的結果,有的時候也會帶有一些驚喜度,所以糾錯技術是一個搜索體驗的加分項,近期突然對這塊有興趣,所以就了解了一下。
糾錯技術的背景
人非圣賢,孰能無過,別說是搜索的時候,哪怕是我們打字、寫作文的時候,都會出現錯字,一般的錯別字不會對最終目標帶來很大影響,且出現頻率很低,不拘小節的我們常常會忽略這樣的小問題,但是,在搜索場景下,錯別字意味著可能就搜不到內容了,對于用戶而言,就是需求無法滿足,造成了很差的體驗,因此在搜索場景中,就很有必要去糾錯。
錯誤是如何產生的
要去糾錯,先要去看看錯誤是怎么產生的。
首先是誤操作類型,這種類型可以從輸入法角度去看。
拼音輸入法。常會出現同音異形字,例如周節倫等。
筆畫輸入法或者手寫輸入法。常會出現形似字,例如博和傅。
然后是用戶的主觀理解,有的時候用戶只是聽說過而沒見過,或者就是理解問題,導致主動地出入了錯誤的內容,例如飛揚拔(跋)扈,然后有一些名詞,例如小說、音樂、電影等,寫錯字是非常容易的。
當然,也有用戶圖方便,或者輸入問題,導致直接輸入拼音或者拼音前綴,或者就是因為記憶的原因,輸錯了。
當然這里也要補充一些常見的問題舉例:
諧音。深圳-森圳。
別字。師傅-師博。
中英文。Taylor swift-泰勒斯威夫特。
近義詞。愛情呼叫轉移-戀愛呼叫轉移。
形近字。高粱-高梁。
全拼。深圳-shenzhen。
拼音前綴。北京-bj。
內容不完整。唐人街探案-唐人。
總之錯誤千奇百怪。理解錯誤產生的機理,我們就可以嘗試去處理這些問題。
詞典與規則方法
詞典是搜索系統中非常常用的方法,詞典具有高速、高準的優點,如果詞典的覆蓋度高,甚至可以達到高召回的效果,因此詞典基本是搜索系統中的核心存在,我們不應該小看他,而是盡可能挖掘他的潛能。
詞典方法,說白了就是對query找對應詞典里有沒有,如果有就改寫過去,這種方法的優點在于速度快,而難點在于怎么去挖掘這個詞典。
至于怎么挖掘這個詞典,方法有很多底層數據庫抽取,用戶日志等,都有很多構建起這樣的詞典,能夠大大降低耗時,復雜度至于query和單詞長度有關。那么一般都有什么詞典呢,我們來一個一個看看。
拼音和拼音前綴詞典。先將query或者單詞轉為拼音,然后通過通過拼音召回對應的結果,完成糾錯。
別字詞典,記錄一些常見的錯別字,例如百度的形近詞表就很不錯(就在百度百科里面)。
其他改寫字典。一般基于具體業務來改寫,例如用戶輸入唐人街探案,其實唐人街探案有3部,我們應該給那個,需要基于熱度等方面去改寫到具體最合適的一部。
詞典只是能夠匹配到合適的結果,但是我們需要知道的是,改寫的內容不能和原來差距太遠,否則會出現很多意料之外的結果,因此改寫不能大改,只能改微調,否則出來的結果會讓用戶感到很懵逼。控制的方法主要是編輯距離。
所謂的編輯距離,就是改寫前到改寫后,需要經過的操作多少,說人話就是兩句話的不同點有幾個,精確到字級別。深圳-森圳的編輯距離就是1。通過編輯距離的約束,一般能夠讓兩者的差距不是很大。
我知道很多人熱衷于用語義相似度之類的操作,不管別的什么方法,編輯距離一定要約束,用戶強調的是直觀感受,語義相近與否不是他們第一個關心的,只有當字相近的結果不好的時候考慮語義相近才是用戶的實際反映,且錯別字帶來的語義變化非常大,此處用予以相似度其實不完全合適。
模型類方法
說是詞典和規則好處很多,但是在泛化能力上,模型還是很強的。那么在模型視角下,其實會分為下面3個步驟進行分析處理。
錯誤診斷。即判斷有沒有錯。
修正召回。召回可能的修改項。保證召回率
修正確認。判斷最終需要的修改項。保證準確率。
當然,如果模型足夠強力,召回和確認兩個步驟也可以合并,具體看準招和耗時了。
其實這個思路最廣泛的應用就是推薦系統,召回和排序分離,這個我在大概是去年很早的一篇文章里談到在這個,這是推薦系統里面非常重要的思想,這個思想其實在很多地方可以遷移下面的一條公眾號文章。
至于模型層面,有下面的思路。
kenlm統計語言工具。運用統計學方法進行語言建模從而檢測和修正錯誤。
rnn_attention。RNN加上attention還是一個非常有意思的方法。
rnn_crf模型:說起來你們可能不信,這個思路來自阿里2016參賽中文語法糾錯比賽的第一名的方法。
seq2seq_attention模型:比RNN強一些,長文本效果不錯,但是容易過擬合。
transformer:線性優秀的序列表征模型,大家懂的。
bert:中文微調,最妙的是mask可協助糾正錯別字。
conv_seq2seq模型:基于Facebook出品的fairseq,在NLPCC-2018的中文語法糾錯比賽中,是唯一使用單模型并取得第三名的成績。
小結
怎么說呢,目前我還只是在探索,深度不是很夠,后面有所補充,再和大家交流,參考文獻放這里吧:
中文文本糾錯算法--錯別字糾正的二三事:https://zhuanlan.zhihu.com/p/40806718
pycorrector:https://github.com/shibing624/pycorrector
中文文本糾錯算法走到多遠了?:https://blog.csdn.net/sinat_26917383/article/details/86737361
-
搜索引擎
+關注
關注
0文章
119瀏覽量
13383 -
模型
+關注
關注
1文章
3298瀏覽量
49187 -
語言建模
+關注
關注
0文章
5瀏覽量
6276
原文標題:搜索系統中的糾錯問題
文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論