[
)。我們今天談談如何確定乙個網頁和某個查詢的相關性。了解了這四個方面,乙個有一定程式設計基礎的讀者應該可以寫乙個簡單的搜尋引擎了,比如為您所在的學校或院系建立乙個小的搜尋引擎。]
我們還是看上回的例子,查詢關於「原子能的應用」的網頁。我們第一步是在索引中找到包含這三個詞的網頁(詳見關於布林運算的系列)。現在任何乙個搜尋引擎都包含幾十萬甚至是上百萬個多少有點關係的網頁。那麼哪個應該排在前面呢?顯然我們應該根據網頁和查詢「原子能的應用」的相關性對這些網頁進行排序。因此,這裡的關鍵問題是如何度量網頁和查詢的相關性。
frequency
),比如,在某個一共有一千詞的網頁中「原子能」、「的」和「應用」分別出現了2
次、35
次和5
次,那麼它們的詞頻就分別是0.002
、0.035
和0.005
。我們將這三個數相加,其和0.042
就是相應網頁和查詢「原子能的應用」
它們在一篇特定網頁中的詞頻分別是: tf1, tf2, ..., tfn
。(tf: term frequency
)。那麼,這個查詢和該網頁的相關性就是:tf1 + tf2 + ... + tfn。
讀者可能已經發現了又乙個漏洞。在上面的例子中,詞「的」站了總詞頻的80%
以上,而它對確定網頁的主題幾乎沒有用。我們稱這種詞叫「應刪除詞」(stopwords
),也就是說在度量相關性是不應考慮它們的頻率。在漢語中,應刪除詞還有「是」、「和」、「中」、「地」、「得」等等幾十個。忽略這些應刪除詞後,上述網頁的相似度就變成了0.007
,其中「原子能」貢獻了0.002
,「應用」貢獻了0.005。
細心的讀者可能還會發現另乙個小的漏洞。在漢語中,「應用」是個很通用的詞,而「原子能」是個很專業的詞,後者在相關性排名中比前者重要。因此我們需要給漢語中的每乙個詞給乙個權重,這個權重的設定必須滿足下面兩個條件:
1. 乙個詞**主題能力越強,權重就越大,反之,權重就越小。我們在網頁中看到「原子能」這個詞,或多或少地能了解網頁的主題。我們看到「應用」一次,對主題基本上還是一無所知。因此,「原子能「的權重就應該比應用大。
2. 應刪除詞的權重應該是零。
在dw
個網頁中出現過,那麼dw
越大,w
的權重越小,反之亦然。在資訊檢索中,使用最多的權重是「逆文字頻率指數」(inverse document frequency
縮寫為idf
),它的公式為log
(d/dw
)其中d
是全部網頁數。比如,我們假定中文網頁數是d=10
億,應刪除詞「的」在所有的網頁中都出現,即dw
=1億,那麼它的idf
=log
(10億/10
億)= log
(1)=
0。假如專用詞「原子能」在兩百萬個網頁中出現,即dw
=200
萬,則它的權重idf
=log
(500
)=6.2
。又假定通用詞「應用」,出現在五億個網頁中,它的權重idf = log
(2)則只有0.7
。也就只說,在網頁中找到乙個「原子能」的比配相當於找到九個「應用」的匹配。利用idf
,上述相關性計算個公式就由詞頻的簡單求和變成了加權求和,即tf1*idf1 +
tf2*idf2 +... + tfn*idfn
。在上面的例子中,該網頁和「原子能的應用」的相關性為0.0161
,其中「原子能」貢獻了0.0126
,而「應用」只貢獻了0.0035
。這個比例和我們的直覺比較一致了。
tf/idf
(term frequency/inverse document frequency
)的概念被公認為資訊檢索中最重要的發明。在搜尋、文獻分類和其他相關領域有廣泛的應用。講起tf/idf
的歷史蠻有意思。idf
的概念最早是劍橋大學的斯巴克-瓊斯【注:她有兩個姓】(karen sparck jones
)提出來的。斯巴克-瓊斯1972
。遺憾的是,她既沒有從理論上解釋為什麼權重idf
應該是對數函式log
(d/dw
)(而不是其它的函式,比如平方根),也沒有在這個題目上作進一步深入研究,以至於在以後的很多文獻中人們提到tf/idf
時沒有引用她的**,絕大多數人甚至不知道斯巴克-瓊斯的貢獻。同年羅蘋遜寫了個兩頁紙的解釋,解釋得很不好。倒是後來康乃爾大學的薩爾頓(salton
)多次寫文章、寫書討論tf/idf
在資訊檢索中的用途,加上薩爾頓本人的大名(資訊檢索的世界大獎就是以薩爾頓的名字命名的)。很多人都引用薩爾頓的書,甚至以為這個資訊檢索中最重要的概念是他提出的。當然,世界並沒有忘記斯巴克-瓊斯的貢獻,2004
年,在紀念文獻學學報創刊60
周年之際,該學報重印了斯巴克-
瓊斯的大作。羅蘋遜在同期期刊上寫了篇文章,用夏農的資訊理論解釋idf
,這回的解釋是對的,但文章寫的並不好、非常冗長(足足十八頁),把乙個簡單問題搞複雜了。其實,資訊理論的學者們已經發現並指出,其實idf
現在的搜尋引擎對tf/idf
進行了不少細微的優化,使得相關性的度量更加準確了。當然,對有興趣寫乙個搜尋引擎的愛好者來講,使用tf/idf
就足夠了。如果我們結合上網頁排名(page rank
),那麼給定乙個查詢,有關網頁綜合排名大致由相關性和網頁排名乘積決定。
數學之美(系列九) 之 如何確定網頁和查詢的相關性
2006年6月27日 上午 09 53 00 發表者 吳軍,google 研究員 我們已經談過了 如何建立索引 如何衡量網頁的質量 page rank 我們今天談談如何確定乙個網頁和某個查詢的相關性。了解了這四個方面,乙個有一定程式設計基礎的讀者應該可以寫乙個簡單的搜尋引擎了,比如為您所在的學校或院...
數學之美 系列九 如何確定網頁和查詢的相關性
2006年6月27日 上午 09 53 00 發表者 吳軍,google 研究員 我們還是看上回的例子,查詢關於 原子能的應用 的網頁。我們第一步是在索引中找到包含這三個詞的網頁 詳見關於布林運算的系列 現在任何乙個搜尋引擎 都包含幾十萬甚至是上百萬個多少有點關係的網頁。那麼哪個應該排在前面呢?顯然...
數學之美 系列九 如何確定網頁和查詢的相關性
數學之美 系列九 如何確定網頁和查詢的相關性 我們已經談過了 如何建立索引 如何衡量網頁的質量 page rank 我們今天談談如何確定乙個網頁和某個查詢的相關性。了解了這四個方面,乙個有一定程式設計基礎的讀者應該可以寫乙個簡單的搜尋引擎了,比如為您所在的學校或院系建立乙個小的搜尋引擎。我們還是看上...