搜尋結果準確度最高的搜尋引擎(搜尋引擎的技巧)
搜尋引擎,可以通過關鍵詞使得人們在使用時更加的便利。但關鍵詞是怎確定的呢?不同的使用者是怎麼在頁面中找到他們需要的資訊的?本文作者從一個例項出發,對搜尋背後的故事進行了梳理闡述,與大家分享。
柳絮紛飛的四組團,一個金色的下午,小白開啟電腦,鬼使神差地在百度搜尋框裡輸入“杭亦白的公眾號”這幾個字。大約30毫秒以後,672個搜尋結果展示在眼前。逐個往下翻看這些結果,三個疑惑逐漸湧上大腦:
- 我要找哪些網頁,百度怎麼知道的?
- 網頁這麼多,百度是根據什麼規則排列它們的?
- 它返回的和我想要的,相關性如何?
搜尋的數學本質——搜尋詞對應索引表的布林運算
剛剛經受畢業論文洗禮的我們,可能對摘要最後附帶的幾個“關鍵詞“還留有深刻的印象。不止是畢業論文,幾乎所有的學術雜誌都要求作者提供3~5個關鍵詞。
關鍵詞的歷史背景是什麼?原來,在半個多世紀以前,搜尋引擎已經廣泛運用於文獻檢索了。為了方便期刊的編輯、讀者查詢文獻,搜尋引擎開發者們巧妙地為文獻圍繞的核心詞建立了索引,也就是傳承至今的關鍵詞。如果你搜的詞出現在某篇文章的“關鍵詞“坑裡,搜尋引擎就會迅速把這篇文章返回給你。
比如你搜“顯微鏡“,多半會看到光學領域裡顯微鏡相關的文獻,因為這些文獻往往附帶著“顯微鏡”這個關鍵詞;同理,搜”浙江村“和”社羣“這兩個詞,項飆的《跨越邊界的社羣》很可能會出現在在顯著的位置。
“索引”這個概念的引入,使得搜尋引擎真正具有了實時反饋結果的可能。
一開始,由於計算機速度和容量都十分有限,只能對最重要的3到5個主題詞建立索引。現在好了,計算機的效能已經不再是制約因素,還有了成熟的分散式處理手段,對網際網路上所有網頁的所有詞建立索引理論上存在可能。
如果真的這麼搞,網際網路上就存在一張巨大的索引表,所有詞都能找到對應的網頁。當你搜尋一個片語,搜尋引擎把這個片語當作鍵(key)放到表裡,取出對應的網頁作為值(value)返回,理論上就初步完成了一次搜尋行為。
邏輯看起來非常簡單,數學上又是怎麼實現的呢?
原來,最簡單的索引結構就是一長串二進位制數,來表示關鍵詞是否存在在每篇文獻中。有多少篇文獻,二進位制數就有多少位,位上取0代表對應文獻裡不包含關鍵詞,取1則相反。
比方說,假設網際網路上只有16個網頁,搜尋引擎首先對這16個網頁做一個排序(如有新增網頁,堆在隊尾,保證前方網頁序號固定),然後對網頁內的所有詞,分別建16位的二進位制數,這些詞與對應的二進位制數就構成了一張索引表。
對於我要搜尋的“杭亦白的公眾號”,搜尋引擎首先把這句話根據語意做分詞處理,分出“杭亦白”、“的”、“公眾號”這三個詞。
關鍵詞“杭亦白”對應的二進位制數是0001 0000 0010 0011,表示第四、第十一、第十五、第十六個網頁上包含“杭亦白”這個詞。對“的”和“公眾號”做同樣處理,就得了三個二進位制數。
對以上3個二進位制數做布林AND運算,結果是0001 0000 0010 0010,表示第四、第十一、第十五個網頁滿足搜尋要求,搜尋引擎向搜尋者展示的就是這3個網頁。
原來,搜尋的數學本質,就是搜尋詞對應索引表的布林運算,搜尋引擎返回布林“與”運算結果為1的網頁。
這裡可以多提一句,布林運算的元素只有1(TRUE,真)和0(FALSE,假);基本運算只有“與”(AND)、或(OR)、非(NOT),十分簡單,卻為數位電路奠定了理論(布林元素真假對應著電路通斷),也對數學產生深遠影響:
“布林代數對於數學的意義等同於量子力學對於物理學的意義,它們將我們對世界的認識從連續狀態擴充套件為離散狀態。在布林代數的世界裡,萬物都是可以量子化的,從連續的變成一個個分離的,它們的運算“與、或、非”也就和傳統的代數運算完全不同了“
——《數學之美》
在實際情況中,網頁的數量不可能像上面假設的只有16個那麼少,很可能是上百億的量級,產生的片語索引表更是爆炸,需要將索引通過分散式的方式儲存在不同的伺服器上,接受查詢時,查詢分發到各個伺服器上並行處理,結果送到主伺服器上合併處理,向使用者返回最後結果。
搜尋返回網頁如何排序——PageRank投票表決
通過上面的布林運算,搜尋引擎向我們返回了三個網頁。那麼問題來了,該按什麼順序排列這三個網頁呢?
Google在1998年給出了答案:表決式PageRank。核心思路只有一句話:網頁之間會以互相之間連結錨文字(Anchor Text)的形式投票,獲得的票越多的網頁,排名越靠前。
比方說我們百度”錨文字“,搜尋結果裡有一些藍色部分的可跳轉超連結,比如圖上的“超連結”、“關鍵詞”、“Anchor text”,這些部分就是指向其他網頁的錨文字。
如果某個網頁被其他網頁指向地越多,可以認定這個網頁人緣好,比較靠譜,可以放在前列。
當然,這麼說也並不十分嚴謹。因為現實中,網頁質量本身存在差異,它們的票對排序結果的影響並不是等效的:被越有權威的網站連結到,越有可能獲得靠前的排名。
在這麼一個邏輯下,PageRank具體是怎麼運作的呢?不妨用一個簡單的3層連結模型來模擬一下。
搜尋引擎返回的3個網頁(序號為第四、第十一、第十五),分別定義為X1、X2、X3,它們分別被Y系列網頁連結,而Y系列網頁又被Z系列網頁連結。考慮到網頁質量良莠差異,排名越高的網站貢獻的連結權越大,網頁X的最終排名,取決於所有指向這個網頁的其他網頁的權重之和。
相加得到,
PR(X1) = 0.013 0.01 0.022 0.012=0.057,
同理,
PR(X2)=0.005 0.004 0.023 0.003=0.035,
PR(X3)=0.04。
根據結果,返回的搜尋結果中,X1網頁放在搜尋引擎最前列,接著是X3,最後是X2。
細心的朋友可能會問了,不對啊,這裡明顯預設了Z的權重,實際上X的權重由Y求和,Y的權重由Z求和,Z權重還得從外一層網頁計算…“計算搜尋結果的網頁排名過程中,需要用到網頁本身的排名“,這不成了”先有雞還是先有蛋“的問題了嗎?
Google創始人之一布林解決了這個問題。先假設所有網頁的排名是相同的,根據初始值算出各網頁第一次迭代排名,在這基礎上迭代出第二次排名,一般經過10次迭代,結果就會收斂到網頁的真實排名上。
判別返回結果與使用者搜尋的相關性
其實,搜尋結果的最終排名,除了得看搜尋結果中網頁質量高低(用PageRank連結權表徵),還取決於結果與使用者搜尋的相關性。
你想想啊,我搜“杭亦白的公眾號”,如果搜尋引擎給我返回“仙林野豬”或者“大衣哥和他的鄰居”這些莫名其妙的東西,我肯定不開心啊。哪怕是feed一些“公眾號寫作運營”弱相關的網頁,我也好受一些;如果能呈現在杭一白裡寫過的文章,那就圓滿了。心情一好,甚至要把百度設定成預設搜尋引擎。
那麼,搜尋引擎是怎麼保證返回結果與我搜尋的相關性的呢?
經過十多年的搜尋生涯,我把相關性泛化為 “檢索準確性”,並且有以下兩個感性結論:
- 搜尋結果中,搜尋詞出現的頻次越高,這個結果可能越準確;
- 如果搜尋結果包含專業詞彙,而不只有通用詞彙,這個結果可能越準確。
即“如果一個關鍵詞只在很少的網頁中出現,通過它就很容易鎖定目標,它的權重就應該大。反之,如果一個詞在大量的網頁中出現,看到它仍然不清楚要找什麼內容,它的權重就應該小。”
這兩個感性結論分別對應兩個量化指標:TF(Term Frequency,單文字詞頻)和IDF(Inversed Document Frequency,逆文字頻率指數)。
首先講TF,還是拿“杭亦白的公眾號”為例子。
搜尋返回的X1網頁裡,共有1000個詞,其中“杭亦白”出現了1次,“的”出現了30次,“公眾號”出現了5次。那麼這三個詞的詞頻TF1、TF2、TF3分別是0.001、0.03、0.005,三數相加,其和0.036就是網頁X1和搜尋“杭亦白的公眾號”的單文字詞頻TF(X1)。
同理,計算出TF(X2)和TF(X3),根據計算值大小,對應感性結論1,就可以知道哪個網頁和搜尋是最相關的。
就這?當然不是。如果只按照這個邏輯,“杭亦白”這個詞可能要有意見了。
首先是對“公眾號”不滿:我一個資訊量這麼高的詞,權重居然比不上你一個爛大街的詞。差不多每10個網頁裡就有一次你的身影,說到對預測小白要搜尋的主題的貢獻,你拿什麼和我比?引擎大哥,我認為有失偏頗!
其次是對“的”這個虛詞:哪哪都有你,難怪資料這麼好看,但是對相關性判別沒有半毛錢貢獻啊。
搜尋引擎聽了“杭亦白”的抱怨,默默引入IDF並更新了規則:
- “的”等虛詞列為停止詞(Stop Word);
- 專業詞比普通詞更能預測使用者搜尋的主題,需要適當提高影響因子。
具體操作是,對以上3個詞,分別使用公式log(D/Dw)計算IDF,其中,D是全部網頁數,Dw表示關鍵詞w在多少個網頁裡出現過。
假設中文網頁數D=100億,專業詞“杭亦白”出現在其中2000萬個網頁中,IDF1=log(100億/2000萬)=8.96;停止詞“的”出現在所有網頁中,IDF2=log(100億/100億)=0;普通詞“公眾號”出現在1億個網頁裡,IDF3=log(100億/1億)=3.32.
因此網頁X1與搜尋詞的相關性計算變成了以下的加權計算:
Relevance1=TF1*IDF1 TF2*IDF2 TF3*IDF3=0.002*8.96 0.03*0 0.005*3.32=0.02556。
即網頁X1與搜尋“杭亦白的公眾號”之間的相關性係數為0.02556.
同理分別計算出X2、X3和搜尋之間的相關係數。係數越大,證明網頁“越準確”,考慮排在越靠前的位置。
學到這,小白心裡又犯嘀咕了:好像都是一些上古時代PC端的知識,有沒有偏APP端的呢?想到這,小白關上電腦開啟手機,開始了新的征程。
號外:新開“小白學搜尋”系列,暫定分上中下三篇更新,用盡量直白的語言把搜尋講明白。請搜尋大佬不吝後臺賜教。
參考資料:
《數學之美》 吳軍人民郵電出版社
作者:杭亦白(微訊號:xiehangfeng01)。網際網路產品新人,對搜尋、產品、社交感興趣,座標上海;微信公眾號:杭一白(微訊號:xiehangfeng02)
本文由 @杭亦白 原創釋出於人人都是產品經理。未經許可,禁止轉載
題圖來自Unsplash,基於CC0協議