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