一.前言
傳統(tǒng)的搜索引擎的定義,是指一種對于指定的查詢(Query),能夠返回與之相關(guān)的文檔集合(Documents)的系統(tǒng)。而百度將這個定義更加豐富化,即搜索引擎能夠幫助人們更方便的找到所求。這里的“所求”,比“文檔”更加寬泛和豐富,比如一個關(guān)于天氣的查詢,直接返回一個天氣預(yù)報的窗口,而非一篇關(guān)于天氣的文檔;再如一個關(guān)于小游戲的查詢,直接返回這個小游戲的Flash頁面而非簡單的介紹性的文字。
百度對Query深刻的理解,源于自然語言處理技術(shù)在其中發(fā)揮的巨大作用。對搜索引擎而言,文本切分是最基礎(chǔ)也是最重要的自然語言問題之一。今天,我們就來談?wù)勎谋厩蟹至6扰c搜索引擎的關(guān)系。
本文后續(xù)章節(jié)組織如下:第二節(jié)介紹什么是文本的粒度,第三節(jié)講述搜索引擎的基本原理與文本切分粒度的關(guān)系,第四節(jié)深入探討粒度的屬性與檢索相關(guān)性計算,第五節(jié)小結(jié)。
二.文本粒度
什么是文本的粒度?我們用什么來衡量文本粒度?在回答這些問題前,讓我們先看看以下幾組詞匯:
纏綿、崎嶇、葡萄、乒乓
綠茶、籃球、紅色、鼠標(biāo)墊、起重機(jī)
打球、跳繩、炒菜、登山
筆記本電腦、高清機(jī)頂盒、IP電視
但是、然后、如果、非常
步步驚心、家的n次方、一個人的精彩
百度在線網(wǎng)絡(luò)技術(shù)(北京)有限公司、清華大學(xué)
張學(xué)友、趙傳、工藤新一、里奧內(nèi)爾·安德雷斯·梅西
……
這幾組詞匯中,哪些的粒度大,哪些的粒度。
不管在傳統(tǒng)的語言學(xué)領(lǐng)域,還是在自然語言處理領(lǐng)域,都沒有對粒度下一個清晰準(zhǔn)確的定義。但是就搜索引擎而言,我們不妨這樣定義:粒度是衡量文本所含信息量的大小。文本含信息量多,粒度就大,反之就小。有了這個原則,我們就很容易判斷文本粒度大小了。像“纏綿”,“崎嶇”,“葡萄”這些詞,雖然有兩個字組成,但是僅表達(dá)一個意思,這些詞的粒度是小的。而“籃球”,“鼠標(biāo)墊”等詞,是由簡單詞合成的,雖然也只有一個意思,但還可以拆分,如“籃”和“球”,“鼠標(biāo)”和 “墊”。這類詞,粒度稍微大一些。而“筆記本電腦”,“高清機(jī)頂盒”這樣的詞,粒度就更大了。
專名是一類比較特殊的詞,盡管所含字?jǐn)?shù)很多,但其實(shí)只表達(dá)一個意思,如“步步驚心”,“家的n次方”這樣的電影、電視劇的名稱,粒度是很小的。機(jī)構(gòu)名、人名等屬于有內(nèi)部結(jié)構(gòu)的專名,比電影名的粒度稍大一些。
顯然易見,我們在討論文本粒度時,理想的方式是從語義角度出發(fā),合理的分析和判斷。然而以上我們僅對粒度做了定性的分析,為粒度找一個合適的度量單位和計算方法,是百度人一直追求的目標(biāo)。
三.搜索引擎的基本原理與詞匯切分關(guān)系
3.1 搜索引擎的基本原理
文本檢索系統(tǒng),是搜索引擎最簡單的實(shí)現(xiàn)方式。通過返回包含關(guān)鍵字的頁面,來滿足用戶的檢索需求。形式化的表達(dá)就是給定一系列關(guān)鍵字集合K,要求返回所有包含關(guān)鍵字的文檔D,對D中的任意一個文檔d,包含K中的任意一個關(guān)鍵字k。
一般我們采用倒排索引的方式來實(shí)現(xiàn)這個系統(tǒng)。所謂倒排索引,就是對關(guān)鍵字建立索引,記錄包含這個關(guān)鍵字的文檔集合D。對于請求的關(guān)鍵字集合,找出所有關(guān)鍵字對應(yīng)的索引,并對索引求交,最后返回同時存在于所有索引中的文檔。
在百度,我們不僅允許用戶輸入關(guān)鍵字,也可以輸入任何長度在一定范圍內(nèi)的文本。此時我們需要對文本做一定處理,切分成一系列關(guān)鍵字,從而能夠從倒排索引中找出對應(yīng)的文檔。
那么為什么要對輸入文本做切分,如果不切分會有什么問題?
我們可以想象一下,如果不對輸入文本做切分,直接用輸入文本去做匹配,會怎么樣?首先,得到的結(jié)果會非常少,因?yàn)橹苯佑萌课谋酒ヅ,就失去了靈活性,對結(jié)果限制的非常死,必須完全匹配才能滿足要求;其次,系統(tǒng)性能會非常差,因?yàn)樾枰獙λ虚L度的文本都建立索引,這是指數(shù)級的,在實(shí)際系統(tǒng)中根本不可能實(shí)現(xiàn)。再考慮一下另一個極端?我們對輸入文本做單字切分,結(jié)果又是怎樣?我們會得到大量無關(guān)的頁面,不僅浪費(fèi)系統(tǒng)性能,對相關(guān)性計算也造成了巨大的壓力。
所以,我們需要對文本做一個合適的切分。
3.2 用戶滿意度與粒度關(guān)系
無論是建立倒排索引、還是處理輸入文本,我們都需要對文本做切分,切出合適的關(guān)鍵字出來。為了能夠使用戶對查詢結(jié)果滿意,搜索引擎需要什么樣的粒度?讓我們先看一下下面幾個例子:
1. Q:“北京地圖” P1:“北京市地圖” P2:“北京城市地圖”
2. Q:“鬧太套是神馬意思”, P:”A:神吶,我騎不了這烈馬。B:鬧太套!”
3. Q:“獸獸門” P:“獸獸艷照門”
4. Q1:“工業(yè)園” Q2:“園區(qū)” P:“工業(yè)園區(qū)”
5. Q:“ip電視” P1:“ip電視的歷史” P2:“電視銷售…您的IP是xxx”
注:Q表示query,P表示頁面中包含Q的內(nèi)容
Case1,要求query能找到P1和P2這樣的結(jié)果,就必須對P1和P2都切出“北京”這個詞來。Case2,必須把”神馬”切為一個詞,否則會召回P這樣不相關(guān)的結(jié)果。Case3,不能把Q中的“獸獸門“切為一個詞,而需要切除“獸獸”,否則就召不回”獸獸艷照門”這個結(jié)果。Case4中,對“工業(yè)園區(qū)”這樣的頁面,必須同時切出“工業(yè)園”和“園區(qū)”這兩個重疊的詞匯,才能保證Q1 和Q2都能召回。Case5與Case2類似,如果把ip和電視分開切分,將召回P2這樣不相關(guān)的結(jié)果。
以上幾個case,基本上概括了搜索引擎對切分粒度的要求,我們可以從兩方面來描述:1)影響召回 2)影響相關(guān)性
以上從用戶滿意度的角度,討論了搜索引擎與粒度的關(guān)系,當(dāng)然,這是最基本的要求,在第四節(jié)我們還會對文本的粒度問題做更深入的分析。
3.3 搜索系統(tǒng)性能與粒度的關(guān)系
顯而易見,粒度越小,召回就越多,建立倒排索引時,索引的長度就越長;粒度的層次越多,索引的數(shù)量就越多。一個多,一個長,就對搜索系統(tǒng)的性能構(gòu)成了極大的考驗(yàn)。
一般而言,大型搜索引擎的索引都采用分布式系統(tǒng)。不同文本的索引,被某種hash算法 “分配”到了某臺機(jī)器。理論上講,索引的數(shù)量的增長,只會造成所需機(jī)器的增長,而對整體系統(tǒng)性能的消耗影響比較小。所以一般搜索引擎會從性價比的角度來考慮索引數(shù)量與機(jī)器數(shù)量的折衷,也就是召回與硬件投入的折衷。粒度分析對于折衷的性價比也有一定的貢獻(xiàn),在粒度層次里,當(dāng)粒度逐漸變小的過程中,我們并不一定對所有小粒度詞都建索引,而是選擇“更有可能召回相關(guān)結(jié)果”的小粒度詞。詞匯的什么性質(zhì)決定了“更有可能召回相關(guān)結(jié)果”?我們同樣會在第四節(jié)討論。
四.深入分析粒度的性質(zhì)
在第三節(jié)中我們反復(fù)提到:一般情況下,粒度越大,相關(guān)性越好,召回越差;粒度越小,相關(guān)性越差,召回越好。在搜索引擎中,如果做到折衷呢?基本的原則是,在系統(tǒng)性能可接受的前提下,盡量多召回有效結(jié)果,計算相關(guān)性時,將最相關(guān)的排在前面。
我們?nèi)绾巫龅綄⒑侠頊p小粒度,增加有效召回,又如何做到將最好的排在最前呢?這里涉及到兩個問題:緊密度與重要性。
既然粒度是衡量文本所含信息量的大小,那么緊密度就是描述文本所含信息緊密程度的量。再說的通俗一些,緊密度就是信息被人們表達(dá)和接受的穩(wěn)定程度。穩(wěn)定有兩種解釋,第一,穩(wěn)定是相對于臨時而言的。一般來說,如果信息是因?yàn)槟承┮蛩嘏R時組合在一起,那就是不穩(wěn)定的,即不緊密。比如許多動賓結(jié)構(gòu)的短語(“過馬路”,“踢足球”),定中結(jié)構(gòu)的短語(“紅蘋果”,“豪華轎車”)。第二,穩(wěn)定是相對于順序不固定而言的。如果同樣一個信息,內(nèi)部的子信息順序可以互換,那么這個詞匯就不穩(wěn)定,即不緊密。比如一些大粒度的詞匯“鼠標(biāo)護(hù)腕墊”、“護(hù)腕鼠標(biāo)墊”。
由此可見,我們根據(jù)詞匯的緊密程度,可以將結(jié)果中表述與查詢表述的一致程度聯(lián)系起來,作為計算相關(guān)性的一個因素。同樣,我們也可以將緊密度作為減小粒度的依據(jù)之一,詞匯越不緊密,我們就有理由將其拆分為更小的粒度。
短語的重要性,其實(shí)是短語子成分的重要性,有很多定義。其中一種被普遍接受的定義為其占短語完整含義的比例。一般情況下,偏正結(jié)構(gòu)短語中,“正”的部分比較重要,比如“綠茶”中的“茶”,但也有例外,如“珊瑚蟲”中的“珊瑚”。而主謂、動賓短語一般來說,都比較重要,如“打球”,“你說”。所以,短語的子成分重要性,不能僅靠語法來識別,而應(yīng)綜合各種因素來確定。
假設(shè)有了詞匯的子成分重要性,那么就可以幫助判斷將詞匯粒度變小后的語義損失風(fēng)險程度(注意,這里使用了“語義損失”,而不是“轉(zhuǎn)義”,想一想為什么)。這也就回答了第四節(jié)末尾的問題:語義損失越小,越有可能召回相關(guān)結(jié)果。
五.結(jié)束語
本文介紹了搜索引擎中的粒度問題,重點(diǎn)討論了搜索引擎與短語切分粒度的關(guān)系,并進(jìn)一步探討了短語的兩個重要性質(zhì)——緊密度和重要性。通過本文,讀者應(yīng)該能夠大致明白搜索引擎中關(guān)于粒度的種種。當(dāng)然,本文只是對搜索引擎的粒度問題開了一個頭,怎么合理的處理好粒度、在不同場合使用何種粒度,都是需要我們繼續(xù)深入研究的。
本文鏈接:http://www.95time.cn/tech/site/2011/8691.asp
出處:百度搜索引擎研發(fā)部
責(zé)任編輯:bluehearts
◎進(jìn)入論壇網(wǎng)站綜合、網(wǎng)頁制作版塊參加討論
|