1. 程式人生 > >搜尋引擎的Query自動糾錯技術和架構詳解

搜尋引擎的Query自動糾錯技術和架構詳解

1 背景

如今,搜尋引擎是人們的獲取資訊最重要的方式之一,在搜尋頁面小小的輸入框中,只需輸入幾個關鍵字,就能找到你感興趣問題的相關網頁。搜尋巨頭Google,甚至已經使Google這個創造出來的單詞成為動詞,有問題Google一下就可以。在國內,百度也同樣成為一個動詞。除了通用搜索需求外,很多垂直細分領域的搜尋需求也很旺盛,比如電商網站的產品搜尋,文學網站的小說搜尋等。面對這些需求,達觀資料(www.datagrand.com)作為國內提供中文雲搜尋服務的高科技公司,為合作伙伴提供高質量的搜尋技術服務,並進行搜尋服務的統計分析等功能。(達觀資料聯合創始人高翔)

搜尋引擎系統最基本最核心的功能是資訊檢索,找到含有關鍵字的網頁或文件,然後按照一定排序將結果給出。在此基礎之上,搜尋引擎能夠提供更多更復雜的功能來提升使用者體驗。對於一個成熟的搜尋引擎系統,使用者看似簡單的搜尋過程,需要在系統中經過多個環節,多個模組協同工作,才能提供一個讓人滿意的搜尋結果。其中拼寫糾錯(Error Correction,以下簡稱EC)是使用者比較容易感知的一個功能,比如百度的糾錯功能如下圖所示:

圖片 1

圖 1:百度糾錯功能示例

EC其實是屬於Query Rewrite(以下簡稱QR)模組中的一個功能,QR模組包括拼寫糾錯,同義改寫,關聯query等多個功能。QR模組對於提升使用者體驗有著巨大的幫助,對於搜尋質量不佳的query進行改寫後能返回更好的搜尋結果。QR模組內容較多,以下著重介紹EC功能。

在搜尋引擎中,我們將使用者輸入的關鍵字查詢叫做query,使用者希望得到和輸入query相關的質量較好的網頁或文件,這個“好”字定義有多種衡量方式,最簡單的標準就是那些對使用者幫助最大最具吸引力的結果能夠排到前列,搜尋工程師們也在努力通過各種演算法的提升來達到這個目的。但是往往出於各種原因,使用者輸入的query本身質量不高或是錯誤的,如果搜尋引擎不對這種錯誤進行修正彌補,會導致召回錯誤的結果,或者結果數少甚至沒有結果。

當用戶看到搜尋結果較差較少時,如果能意識到自己的query錯誤,對query進行修正再次檢索,也許能找到想要的結果。但有時使用者也不知道自己的query錯在哪裡,這個時候就會非常著急。筆者之前從事搜尋相關工作時,剛開始搜尋系統不支援糾錯功能,結果收到使用者大量的吐槽和投訴,說明沒有糾錯功能的搜尋系統會大大降低使用者體驗,不僅如此,這些錯誤query檢索還浪費大量的流量。當開發完畢並在搜尋系統中使用EC模組後,糾錯成功的流量佔到總流量的2%,不僅提升了使用者體驗,還能夠挽回流量損失,提升使用者粘度。

2 EC常見錯誤

EC應該怎麼做?首先我們看一下常見的query錯誤都有哪些。

對於英文,最基本的語義元素是單詞,因此拼寫錯誤主要分為兩種,一種是Non-word Error,指單詞本身就是拼錯的,比如將“happy”拼成“hbppy”,“hbppy”本身不是一個詞。另外一種是Real-word Error,指單詞雖拼寫正確但是結合上下文語境確是錯誤的,比如“two eyes”寫成“too eyes”,“too”在這裡是明顯錯誤的拼寫。

而對於中文,最小的語義單元是字,往往不會出現錯字的情況,因為現在每個漢字幾乎都是通過輸入法輸入裝置,不像手寫漢字也許會出錯。雖然漢字可以單字成詞,但是兩個或以上的漢字組合成的詞卻是更常見的語義元素,這種組合帶來了類似英文的Non-word Error,比如“洗衣機”寫成“洗一雞”,雖然每個字是對的,但是整體卻不是一個詞,也就是所謂的別字。漢字也有類似Real-word Error的問題,比如加薪聖旨,加薪和聖旨都是正確的詞,但是兩個連在一起確有問題,因此很多情況下漢語query糾錯實際上是短語糾錯問題。Query除了純漢字外,現在還會出現中英文混拼錯誤,中文拼音混拼等錯誤。下圖是筆者在搜尋日誌中找到的一些常見錯誤query:

圖片 2

圖 2:搜尋日誌中的錯誤query

從上圖可以看出,中文搜尋中常見的錯誤query主要包括別字,純拼音,模糊音,拼音漢字混合,拼音其他符號混合等多種問題。

3 Query出錯的原因分析

目前最普遍的中文輸入方式是拼音輸入法,使用者輸入拼音,輸入法給出候選詞,但是由於使用者誤選或無需要候選詞時,query就有可能出錯。雖然相較之前智慧輸入法現在已經足夠強大,但仍有一些新的產品、小說、影視作品,輸入法可能會覆蓋不到。比如一些新奇網路詞彙的出現,傳統的詞典已經無法包括這些詞。還有一些較為陌生的詞,比如“羋月傳”,很多人都是聽朋友介紹很好看,結果去搜索引擎中搜索相關資訊,很多人只知道第一個字發音是“mi”,但實際是哪個字卻不確定。

除此之外,使用者搜尋時也會從網頁或其他文件上覆制貼上文字來搜尋,導致搜尋query不完整或帶入其他字元,甚至打字太快也是錯誤query輸入的原因。

4 Query糾錯方案

英文拼寫糾錯已經有較長的歷史,對於英文糾錯的研究較多。英文糾錯是中文糾錯的重要基礎,其中很多演算法思想同樣適用於中文。因此首先介紹一下英文糾錯問題。在介紹具體糾錯方案前,先介紹兩個重要的的概念:編輯距離,n元語法模型。

4.1 基礎概念

4.1.1 編輯距離

編輯距離是兩個字串之間,由一個轉換成另外一個所需要的最少操作次數,允許的操作包括字元替換,增加字元,減少字元,顛倒字元。舉例來講,apple和apply的編輯距離是1,access和actress的編輯距離是2,arrow和brown的編輯距離是3,編輯距離的計算操作過程如下圖所示:

圖片 3

圖 3:編輯距離計算過程

4.1.2 n元語法模型

語言模型(language mode)在基於統計模型的語音識別,機器翻譯,漢語自動分詞和句法分析中有著廣泛的應用,目前採用的主要是n元語法模型(n-gram model)。

一個語言模型構建字串的概率分佈p(W),假設p(W)是字串作為句子的概率,則概率由下邊的公式計算:

圖片 4

公式 1:語言模型

其中w1表示第一個詞,w2表示第二個詞,以此類推。p(w4|w1w2w3)表示前面三個詞是w1w2w3的情況下第四個詞是w4的概率。

w1w2…wi-1稱作歷史,如果w共有5000個不同的詞,i=3的時候就有1250億個組合,但是訓練資料或已有語料庫資料不可能有這麼多組合,並且絕大多數的組合不會出現,所以可以將w1w2…wi-1根據規則對映到等價類,最簡單的方式就是取wi之前n-1個歷史,根據馬爾科夫假設,一個詞只和他前面n-1個詞相關性最高,這就是n元語法模型。

圖片 5

公式 2:n元語法模型

通常用的n元語法模型包括unigram,bigram,trigram,其中unigram表示這個詞和前面的詞無關,彼此獨立,計算公式如下:

圖片 6

公式 3:unigram語法模型

Bigram表示一個詞只和它前面一個詞有關,計算公式如下:

圖片 7

公式 4:bigram語法模型

4.2 英文糾錯

4.2.1 Non-word糾錯

糾錯首先要檢測出錯誤。檢測錯誤的方法有很多種,對於Non-word錯誤可以使用語料庫字典,如果輸入詞不在字典中,即可以判定為錯詞。

糾錯過程就是找出和錯詞最相似的一些候選詞,然後從中選出正確的糾錯詞。候選詞可以使用上面介紹的編輯距離從語料庫中找出。統計指出,80%的錯誤詞的編輯距離是1,並且幾乎所有的錯誤的編輯距離在2以內。

在候選詞中找到最終的糾錯詞,比較簡單的方法可以根據候選詞的權重進行排序,給出權重最高的詞作為糾錯詞,這個權重可以是人工標註的結果,也可以是語料庫統計的詞頻或其他方式。相對複雜的候選詞選擇方法可以使用統計模型計算,比如噪聲通道模型。

噪聲通道模型(Noisy Channel Model)最早是夏農為了模型化通道的通訊問題,在資訊熵概念上提出的模型,目標是優化噪聲通道中訊號傳輸的吞吐量和準確率。對於自然語言處理而言,通道噪聲模型如下圖,其中I表示輸入,O表示經過噪聲通道後的輸出,I’表示經過解碼後最有可能的輸入。

圖片 8

圖 4:通道噪聲模型框圖

在自然語言處理中,很多問題都可以歸結為給定輸出O(有可能包括錯誤資訊),在所有可能的輸入I中找到最可能的那一個作為輸入I’

自然語言處理中的機器翻譯,詞性標註,語音識別等多個問題都可以使用通道噪聲模型來解決,對於糾錯問題也可以使用通道噪聲模型來解決,相應的求解問題可以用公式表達:

圖片 9

公式 5:噪聲通道模型糾錯公式

其中p(x|w)是正確的詞編輯成為錯誤詞x的轉移概率,包括刪除(deletion)、增加(insertion)、替換(substitution)和顛倒(transposition)四種轉移矩陣,這個轉移矩陣的概率可以通過統計大量的正確詞和錯誤詞對來得到,轉移矩陣的計算公式如下:

圖片 10

圖片 11

公式 6:轉移矩陣公式計算

將轉移矩陣計算公式代入公式5的噪聲通道模型公式中,根據不同候選詞和糾錯詞之間的變換關係選擇轉移矩陣型別,就能得到概率最大的候選詞。

 4.2.2 Real-word糾錯:

有研究報告指出指出有40%~45%的錯誤屬於Real-word Error問題。Real-word問題中,每個詞都是正確的,但是組合在一起成為短語或句子時意思卻不對。因此糾錯策略和Non-word有些不同。首先是候選詞集合的生成,對於句子或短語中每個詞生成候選集合,這個集合包括:1,這個詞本身;2,所有和這個詞編輯距離為1的詞;3,同音詞。集合選定後,選擇最佳候選物件或組合時,可以使用的方法有噪聲通道模型及特殊分類器。

噪聲通道模型和Non-word糾錯類似,只是計算目標從某個候選詞的最大概率變成不同位置候選詞組合形成的句子p(s)的最大概率,這個問題可以使用HMM(Hidden Markov model,隱馬爾可夫模型)求解。

圖片 12

圖 5:噪聲通道模型糾錯Real-word Error問題

上圖中,每一數列是這個位置詞的候選詞集合,其中每個詞的狀態轉移概率可以通過語言模型在語料庫中統計求得。

基於分類方法糾錯,分類器將會根據多個特徵訓練出一對Real-word之間的轉移模型,常見的分類器包括SVM(Support Vector Machine,支援向量機)或者是基於規則的分類器,特徵可以選擇每個word的unigram,bigram概率等。

4.3 中文糾錯

中文糾錯以英文糾錯為基礎但卻有所不同。在中文中,一般情況下錯誤詞和正確詞的長度是相同的,只是指定位置上的某一個字有誤,因此狀態轉移矩陣只有替換一種。其次是中文詞語往往較短,即使編輯距離只有1,就會有大量的候選詞,存在較大的轉義風險。中文使用拼音作為文字的發音,每個字都有固定的發音(多音字除外),而拼音輸入法佔據中文輸入方式的主導地位,導致錯誤query中的別字同音但字形錯誤。因此中文糾錯以拼音為基礎,編輯距離等其他方式為輔的策略。

4.3.1 候選詞集合的獲取

對於錯誤的詞的候選詞集合,可以通過資料自動挖掘來生成。英文候選詞集合一般通過編輯距離來獲得,而中文候選詞集合使用和錯誤詞有相同的拼音的片語成,比如“嗒衣”這個錯詞的拼音是“dayi”, 則可以通過事先挖掘好的拼音是“dayi”的片語成候選集,比如。

4.3.2 候選詞的選擇

對於糾錯候選詞的選擇就是一個對候選詞進行排序,按照一定的排序規則,把排名最高的候選詞作為最佳糾錯結果返回。排序規則可以使用詞頻等多種特徵,候選詞按照這些特徵規則進行排序,返回權重較高的詞。

對於一個無上下文關係的詞進行糾錯,候選詞的選擇會比較困難,比如上面“嗒衣”這個錯詞的候選詞有很多,無論按照哪一種方式進行排序,都存在較為嚴重的轉義風險,這時可以使用編輯距離等其他方式輔助選擇。

相對於單獨一個詞的query,由多個片語成的query糾錯相對更加精準,每個詞存在上下文關係約束,整個query的意圖更加明確。通過對query分詞,查詢每個詞的候選詞集合,然後使用和英文Real-word糾錯類似的方式糾錯。

除了搜尋日誌query和語料庫的統計挖掘,搜尋系統中的session分析和點選模型提供的資料也能夠為query糾錯服務。搜尋session指的是使用者在某一個時間段內的搜尋行為,如果把搜尋日誌按照時間排序,對於某一個使用者的搜尋日誌來說,可以看到使用者的搜尋行為是分段的,每段之間往往有較為明顯的間隔,每一段我們稱為一個搜尋session。一般來說,使用者在一個session內的搜尋行為都是為了解決一個問題,因此在此session內使用者輸入的query往往都是相關的。

點選模型中的一些統計資料可以判斷一個搜尋query質量的高低,質量高的query往往會給出較好的結果,使用者點選的慾望更高。舉例來說,“度假”(正確)“渡假”(錯誤)這兩個query,假設使用者輸入較多的是錯誤的“渡假”,系統給出結果會比較差。下圖例子中“渡假”的搜尋結果都沒有命中標題,而標題往往是使用者最為關注的資訊,如果標題中不含有搜尋query關鍵字,使用者點選的慾望也會較低。

圖片 13

圖 6:錯誤query“渡假”的結果少,質量差

圖片 14

圖 7:正確query“度假”的結果多,質量好

在這種情況下,雖然“渡假”的搜尋次數更多,但是點選模型給出query分數會比較低,而候選詞“度假”的query得分就會高一些,可以輔助其他糾錯方式完成糾錯。

4.4 存在的問題

搜尋系統許多功能的召回率和準確率是矛盾的,但是在query糾錯問題中,準確率往往要求更高。拼音query到漢字query的糾錯,往往會存在較大的轉義風險,不同的型別的拼音轉換方式(全拼,模糊全拼,簡拼,混拼)有著不同程度的轉義風險,召回越大則準確率降低,因此使用全拼較為穩妥。(達觀資料聯合創始人高翔)

5 達觀資料搜尋系統query糾錯技術介紹

達觀資料在搜尋引擎等大資料技術上有著深厚的積累,搜尋引擎提供多種功能及服務,其中糾錯模組是比較重要的功能之一。

5.1 糾錯過程

對於搜尋中的query糾錯功能,糾錯過程主要分為以下3個過程:

1, Query糾錯判斷。對於常見錯誤,例如常見的拼寫錯誤,使用事先挖掘好的錯誤query字典,當query在此字典中時糾錯。如果使用者輸入的query查詢無結果或結果較少於一定閾值時,嘗試糾錯,可以根據不同領域的策略和容忍度,配置最少結果數閾值。

2,不同策略獨立糾錯。達觀資料使用多種糾錯策略,主要使用拼音糾錯和編輯距離糾錯,並輔助模糊音形近字二次糾錯等其他糾錯策略。同音策略是使用者輸入的錯誤query和候選糾錯query有相同的拼音。編輯距離策略就是錯誤query和候選query之間編輯距離小於一定閾值,並配合其他條件進行過濾。

3,候選詞結果選擇。因為每個策略比較獨立,不同策略會給出不同的候選詞,因此對於候選詞的選取,每個策略有所不同。不同策略之間,不同策略內部需要使用不同的評估方式,來選擇最優結果。

達觀科技搜尋系統的糾錯模組包括上述多個策略,每個策略獨立執行,針對不同的領域和業務情況,策略優先順序和權重可配置,糾錯鬆緊度可調節。

5.2 系統設計

達觀資料EC系統主要分為三部分:資料模組,離線建庫端及線上檢索端。

圖片 15

圖 8:EC系統模組構成

5.2.1 資料模組

資料模組的主要作用是為後面的離線建庫端和線上檢索端提供資料。

資料模組對搜尋log定期進行抽取和統計,對query進行歸一化後給出query頻次詞典。對資料庫資訊整理給出自定義詞典。通過爬蟲系統爬取優質詞條詞典。

5.2.2 離線建庫端

離線建庫端使用資料模組準備好的各種詞典生就糾錯詞典,包括拼音糾錯詞典,編輯距離糾錯詞典等。根據配置,對頻次詞典中對超出一定長度query上述操作不處理。

5.2.3 線上檢索端

線上檢索端負責query實時糾錯,根據5.1節的三個步驟進行。如果第一次糾錯query查詢結果較差,使用擴大召回的方式,比如二次糾錯、片段糾錯等擴大召回重新糾錯,進行二次查詢並返回質量較高的查詢結果。

5.3 糾錯效果評估

糾錯效果的好壞從微觀上來講,可以檢視搜尋日誌中無結果或結果少的糾錯query以及點選模型中點選較少的糾錯query等方式發現bad case,在針對這些bad case出現的原因進行分類總結,後續改進演算法。

在巨集觀上可以關注搜尋效果評估系統中的MAP和MRR分數,使用AB test,檢視使用糾錯模組後或糾錯演算法升級後的帶來的效果提升。

6結語

一個完善的搜尋引擎系統中,糾錯功能是重要的一環,對提升使用者體驗及使用者滿意度有很大的幫助,亦能補救大量錯誤query所帶來的流量損失。達觀資料在搜尋引擎服務上有著豐富的行業經驗,能夠為合作企業提供高質量的搜尋服務,充分挖掘企業的資料價值。(達觀資料聯合創始人高翔)

圖片 16

技術猶如滿天繁星指引我們前行。題圖筆者攝於Mt Cook