一.前言
傳統的搜索引擎的定義,是指一種對於指定的查詢(Query),能夠返回與之相關的文檔集合(Documents)的系統。而百度將這個定義更加豐富化,即搜索引擎能夠幫助人們更方便的找到所求。這裡的“所求”,比“文檔”更加寬泛和豐富,比如一個關於天氣的查詢,直接返回一個天氣預報的窗口,而非一篇關於天氣的文檔;再如一個關於小游戲的查詢,直接返回這個小游戲的Flash頁面而非簡單的介紹性的文字。
百度對Query深刻的理解,源於自然語言處理技術在其中發揮的巨大作用。對搜索引擎而言,文本切分是最基礎也是最重要的自然語言問題之一。今天,我們就來談談文本切分粒度與搜索引擎的關系。
本文後續章節組織如下:第二節介紹什麼是文本的粒度,第三節講述搜索引擎的基本原理與文本切分粒度的關系,第四節深入探討粒度的屬性與檢索相關性計算,第五節小結。
二.文本粒度
什麼是文本的粒度?我們用什麼來衡量文本粒度?在回答這些問題前,讓我們先看看以下幾組詞匯:
纏綿、崎岖、葡萄、乒乓
綠茶、籃球、紅色、鼠標墊、起重機
打球、跳繩、炒菜、登山
筆記本電腦、高清機頂盒、IP電視
但是、然後、如果、非常
步步驚心、家的n次方、一個人的精彩
百度在線網絡技術(北京)有限公司、清華大學
張學友、趙傳、工籐新一、裡奧內爾·安德雷斯·梅西
……
這幾組詞匯中,哪些的粒度大,哪些的粒度小?
不管在傳統的語言學領域,還是在自然語言處理領域,都沒有對粒度下一個清晰准確的定義。但是就搜索引擎而言,我們不妨這樣定義:粒度是衡量文本所含信息量的大小。文本含信息量多,粒度就大,反之就小。有了這個原則,我們就很容易判斷文本粒度大小了。像“纏綿”,“崎岖”,“葡萄”這些詞,雖然有兩個字組成,但是僅表達一個意思,這些詞的粒度是小的。而“籃球”,“鼠標墊”等詞,是由簡單詞合成的,雖然也只有一個意思,但還可以拆分,如“籃”和“球”,“鼠標”和“墊”。這類詞,粒度稍微大一些。而“筆記本電腦”,“高清機頂盒”這樣的詞,粒度就更大了。
專名是一類比較特殊的詞,盡管所含字數很多,但其實只表達一個意思,如“步步驚心”,“家的n次方”這樣的電影、電視劇的名稱,粒度是很小的。機構名、人名等屬於有內部結構的專名,比電影名的粒度稍大一些。
顯然易見,我們在討論文本粒度時,理想的方式是從語義角度出發,合理的分析和判斷。然而以上我們僅對粒度做了定性的分析,為粒度找一個合適的度量單位和計算方法,是百度人一直追求的目標。
三.搜索引擎的基本原理與詞匯切分關系
3.1 搜索引擎的基本原理
文本檢索系統,是搜索引擎最簡單的實現方式。通過返回包含關鍵字的頁面,來滿足用戶的檢索需求。形式化的表達就是給定一系列關鍵字集合K,要求返回所有包含關鍵字的文檔D,對D中的任意一個文檔d,包含K中的任意一個關鍵字k。
一般我們采用倒排索引的方式來實現這個系統。所謂倒排索引,就是對關鍵字建立索引,記錄包含這個關鍵字的文檔集合D。對於請求的關鍵字集合,找出所有關鍵字對應的索引,並對索引求交,最後返回同時存在於所有索引中的文檔。
在百度,我們不僅允許用戶輸入關鍵字,也可以輸入任何長度在一定范圍內的文本。此時我們需要對文本做一定處理,切分成一系列關鍵字,從而能夠從倒排索引中找出對應的文檔。
那麼為什麼要對輸入文本做切分,如果不切分會有什麼問題?
我們可以想象一下,如果不對輸入文本做切分,直接用輸入文本去做匹配,會怎麼樣?首先,得到的結果會非常少,因為直接用全部文本匹配,就失去了靈活性,對結果限制的非常死,必須完全匹配才能滿足要求;其次,系統性能會非常差,因為需要對所有長度的文本都建立索引,這是指數級的,在實際系統中根本不可能實現。再考慮一下另一個極端?我們對輸入文本做單字切分,結果又是怎樣?我們會得到大量無關的頁面,不僅浪費系統性能,對相關性計算也造成了巨大的壓力。
所以,我們需要對文本做一個合適的切分。
1 2 下一頁
3.2 用戶滿意度與粒度關系
無論是建立倒排索引、還是處理輸入文本,我們都需要對文本做切分,切出合適的關鍵字出來。為了能夠使用戶對查詢結果滿意,搜索引擎需要什麼樣的粒度?讓我們先看一下下面幾個例子:
1. Q:“北京地圖” P1:“北京市地圖” P2:“北京城市地圖”
2. Q:“鬧太套是神馬意思”, P:”A:神吶,我騎不了這烈馬。B:鬧太套!”
3. Q:“獸獸門” P:“獸獸艷照門”
4. Q1:“工業園” Q2:“園區” P:“工業園區”
5. Q:“ip電視” P1:“ip電視的歷史” P2:“電視銷售…您的IP是xxx”
注:Q表示q