我們向搜尋引擎提交乙個查詢,搜尋引擎會從先到後列出大量的結果,這些結果排序的標準是什麼呢?這個看似簡單的問題,卻是資訊檢索專家們研究的核心難題之一。
為了說明這個問題,我們來研究乙個比搜尋引擎更加古老的話題:求醫。比如,如果我牙疼,應該去看怎樣的醫生呢?假設我只有三種選擇:
a醫生,既治眼病,又治胃病;
b醫生,既治牙病,又治胃病,還治眼病;
c醫生,專治牙病。
a醫生肯定不在考慮之列。b醫生和c醫生之間,貌視更應該選擇c醫生,因為他更專注,更適合我的病情。假如再加乙個條件:b醫生經驗豐富,有二十年從醫經歷,醫術高明,而c醫生只有五年從醫經驗,這個問題就不那麼容易判斷了,是優先選擇更加專注的c醫生,還是優先選擇醫術更加高明的b醫生,的確成了乙個需要仔細權衡的問題。
至少,我們得到了乙個結論,擇醫需要考慮兩個條件:醫生的專長與病情的適配程式設計客棧程度;醫生的醫術。大家肯定覺得這個結論理所當然,而且可以很自然地聯想到,搜尋引擎排序不也是這樣嗎,既要考慮網頁內容與使用者查詢的匹配程度,又要考慮網頁本身的質量。但是,怎麼把這兩種因素結合起來,得到乙個,而不是兩個或多個排序標準呢?假如我們把這兩種因素表示成數值,最終的排序依據是把這兩個數值加起來,還是乘起來,或是按決策樹的辦法把它們組織起來?如果是加起來,是簡單相加,還是帶權重加呢?
我們可以根據直覺和經驗,通過試錯的辦法,把這兩個因素結合起來。但更好的辦法是我們能找到乙個明確的依據,最好能跟數學這樣堅實的學科聯絡起來。說起來,依據樸素的經驗,人類在古代程式設計客棧就能建造出高樓;但要建造出高達數百公尺的 摩天大廈,如果沒有建築力學、材料力學這樣堅實的學科作為後盾,則是非常非常困難的。同理,依據樸素的經驗構建的搜尋引擎演算法,用來處理上萬的網頁集合應該是沒問題的;但要檢索上億的網頁,則需要更為牢固的理論基礎。
求醫,病人會優先選擇診斷準確、**效果好的醫生;對於搜尋引擎來說,一般按網頁滿足使用者需求的概率從大到小排序。如果用q表示使用者給出了乙個特定的查詢,用d表示乙個特定的網頁滿足了使用者的需求,那麼排序的依據可以用乙個條件概率來表示:
p(d|q)
這個簡單的條件概率,將搜尋引擎排序演算法與概率論這門堅實的學科聯絡了起來,這就像在大海中航行的船隻裝備了指南針一樣。利用貝葉斯公式,這個條件概率可以表示為:
可以清楚地看到,搜尋引擎的排序標準,是由三個部分組成的:查詢本身的屬性p(q);網頁本身的屬性p(d);兩者的匹配關係p(q|d)。對於同一次查詢來說,所有網頁對應的p(q)都是一樣的,因此排序時可以不考慮,即
公式左邊,是已知使用者的查詢,求網頁滿足該使用者需求的概率。搜尋引擎為了提高響應使用者查詢的效能,需要事先對所有待查詢的網頁做預處理。預處理時,只知道網頁,不知道使用者查詢,因此需要倒過來計算,即分析每個網頁能滿足哪些需求,該網頁分了多大比例來滿足該需求,即得到公式右邊的第一項p(q|d),這相當於上文介紹的醫生的專門程度。比如,乙個網頁專門介紹牙病,另乙個網頁既介紹牙病又介紹胃病,那麼對於「牙疼」這個查詢www.cppcns.com來說,前乙個網頁的p(q|d)值就會更高一些。
公式右邊的第二項p(d),是乙個網頁滿足使用者需求的概率,它反映了網頁本身的好壞,與查詢無關。假如要向乙個陌生人推薦網頁(我們並不知道他需要什麼),那麼p(d)就相當於某個特定的網頁被推薦的概率。在傳統的資訊檢索模型中,這乙個量不太被重視,如傳統的向量空間模型、bm25模型,都試圖只根據查詢與文件的匹配關係來得到排序的權重。而實際上,這個與查詢無關的量是非常重要的。假如我們用網頁被訪問的頻次來估計它滿足使用者需求的概率,可以看出對於兩個不同的網頁,這個量有著極其巨大的差異:有的網頁每天只被訪問一兩次,而有的網頁每天被訪問成千上萬次。能夠提供如此巨大差異的量,竟長期被傳統的搜尋引擎忽略,直到google發明了pagerank並讓它參與到排序中。pagerank是對p(d)值的乙個不錯的估計,這個因素的加入使搜尋引擎的效果立即上公升到了乙個新的台階。
這個公式同樣回答了上文提出的問題,網頁與查詢的匹配程度,和網頁本身的好壞,程式設計客棧這兩個因素應該怎樣結合起來參與排序。這個公式以不可辯駁的理由告訴我們,如果網頁與查詢的匹配程度用p(q|d)來表示,網頁本身的好壞用p(d)程式設計客棧來表示,那麼應該按它們的乘積來進行排序。在現代商業搜尋引擎中,需要考慮更多更細節的排序因素,這些因素可能有成百上千個,要把它們融合起來是更加複雜和困難的問題。
本文標題: 以求醫為例談搜尋引擎排序演算法的基礎原理
本文位址:
以求醫為例談搜尋引擎排序演算法的基礎原理
為了說明這個問題,我們來研究乙個比搜尋引擎更加古老的話題 求醫。比如,如果我牙疼,應該去看怎樣的醫生呢?假設我只有三種選擇 a醫生肯定不在考慮之列。b醫生和c醫生之間,貌視更應該選擇c醫生,因為他更專注,更適合我的病情。假如再加乙個條件 b醫生經驗豐富,有二十年從醫經歷,醫術高明,而c醫生只有五年從...
以求醫為例談搜尋引擎排序演算法的基礎原理
我們向搜尋引擎提交乙個查詢,搜尋引擎會從先到後列出大量的結果,這些結果排序的標準是什麼呢?這個看似簡單的問題,卻是資訊檢索專家們研究的核心難題之一。為了說明這個問題,我們來研究乙個比搜尋引擎更加古老的話題 求醫。比如,如果我牙疼,應該去看怎樣的醫生呢?假設我只有三種選擇 a醫生肯定不在考慮之列。b醫...
以求醫為例談搜尋引擎排序演算法的基礎原理
以求醫為例談搜尋引擎排序演算法的基礎原理 2011 1 27 08 01 02 標籤 分類 搜尋技術 我們向搜尋引擎提交乙個查詢,搜尋引擎會從先到後列出大量的結果,這些結果排序的標準是什麼呢?這個看似簡單的問題,卻是資訊檢索專家們研究的核心難題之一。為了說明這個問題,我們來研究乙個比搜尋引擎更加古老...