數學之美 系列九 如何確定網頁和查詢的相關性
阿新 • • 發佈:2019-01-26
發表者:吳軍,Google 研究員
[我們已經談過了如何自動下載網頁、如何建立索引、如何衡量網頁的質量(Page Rank)。我們今天談談如何確定一個網頁和某個查詢的相關性。瞭解了這四個方面,一個有一定程式設計基礎的讀者應該可以寫一個簡單的搜尋引擎了,比如為您所在的學校或院系建立一個小的搜尋引擎。]
我們還是看上回的例子,查詢關於“原子能的應用”的網頁。我們第一步是在索引中找到包含這三個詞的網頁(詳見關於布林運算的系列)。現在任何一個搜尋引擎都包含幾十萬甚至是上百萬個多少有點關係的網頁。那麼哪個應該排在前面呢?顯然我們應該根據網頁和查詢“原子能的應用”的相關性對這些網頁進行排序。因此,這裡的關鍵問題是如何度量網頁和查詢的相關性。
我們知道,短語“原子能的應用”可以分成三個關鍵詞:原子能、的、應用。根據我們的直覺,我們知道,包含這三個詞多的網頁應該比包含它們少的網頁相關。當然,這個辦法有一個明顯的漏洞,就是長的網頁比短的網頁佔便宜,因為長的網頁總的來講包含的關鍵詞要多些。因此我們需要根據網頁的長度,對關鍵詞的次數進行歸一化,也就是用關鍵詞的次數除以網頁的總字數。我們把這個商稱為“關鍵詞的頻率”,或者“單文字詞彙頻率”(Term Frequency),比如,在某個一共有一千詞的網頁中“原子能”、“的”和“應用”分別出現了 2 次、35 次 和 5 次,那麼它們的詞頻就分別是 0.002、0.035 和 0.005。 我們將這三個數相加,其和 0.042 就是相應網頁和查詢“原子能的應用”
相關性的一個簡單的度量。概括地講,如果一個查詢包含關鍵詞 w1,w2,...,wN, 它們在一篇特定網頁中的詞頻分別是: TF1, TF2, ..., TFN。 (TF: term frequency)。 那麼,這個查詢和該網頁的相關性就是:
TF1 + TF2 + ... + TFN。
讀者可能已經發現了又一個漏洞。在上面的例子中,詞“的”站了總詞頻的 80% 以上,而它對確定網頁的主題幾乎沒有用。我們稱這種詞叫“應刪除詞”(Stopwords),也就是說在度量相關性是不應考慮它們的頻率。在漢語中,應刪除詞還有“是”、“和”、“中”、“地”、“得”等等幾十個。忽略這些應刪除詞後,上述網頁的相似度就變成了0.007,其中“原子能”貢獻了0.002,“應用”貢獻了 0.005。
細心的讀者可能還會發現另一個小的漏洞。在漢語中,“應用”是個很通用的詞,而“原子能”是個很專業的詞,後者在相關性排名中比前者重要。因此我們需要給漢語中的每一個詞給一個權重,這個權重的設定必須滿足下面兩個條件:
1. 一個詞預測主題能力越強,權重就越大,反之,權重就越小。我們在網頁中看到“原子能”這個詞,或多或少地能瞭解網頁的主題。我們看到“應用”一次,對主題基本上還是一無所知。因此,“原子能“的權重就應該比應用大。
2. 應刪除詞的權重應該是零。
我們很容易發現,如果一個關鍵詞只在很少的網頁中出現,我們通過它就容易鎖定搜尋目標,它的權重也就應該大。反之如果一個詞在大量網頁中出現,我們看到它仍然不很清楚要找什麼內容,因此它應該小。概括地講,假定一個關鍵詞 w 在 Dw 個網頁中出現過,那麼 Dw 越大,w 的權重越小,反之亦然。在資訊檢索中,使用最多的權重是“逆文字頻率指數” (Inverse document frequency 縮寫為IDF),它的公式為log(D/Dw)其中D是全部網頁數。比如,我們假定中文網頁數是D=10億,應刪除詞“的”在所有的網頁中都出現,即Dw=10億,那麼它的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。遺憾的是,她既沒有從理論上解釋為什麼權重IDF 應該是對數函式 log(D/Dw)(而不是其它的函式,比如平方根),也沒有在這個題目上作進一步深入研究,以至於在以後的很多文獻中人們提到 TF/IDF 時沒有引用她的論文,絕大多數人甚至不知道斯巴克-瓊斯的貢獻。同年羅賓遜寫了個兩頁紙的解釋,解釋得很不好。倒是後來康乃爾大學的薩爾頓(Salton)多次寫文章、寫書討論 TF/IDF 在資訊檢索中的用途,加上薩爾頓本人的大名(資訊檢索的世界大獎就是以薩爾頓的名字命名的)。很多人都引用薩爾頓的書,甚至以為這個資訊檢索中最重要的概念是他提出的。當然,世界並沒有忘記斯巴克-瓊斯的貢獻,2004年,在紀念文獻學學報創刊 60 週年之際,該學報重印了斯巴克-瓊斯的大作。羅賓遜在同期期刊上寫了篇文章,用夏農的資訊理論解釋 IDF,這回的解釋是對的,但文章寫的並不好、非常冗長(足足十八頁),把一個簡單問題搞複雜了。其實,資訊理論的學者們已經發現並指出,其實 IDF 的概念就是一個特定條件下、關鍵詞的概率分佈的交叉熵(Kullback-Leibler Divergence)(詳見 上一系列)。這樣,資訊檢索相關性的度量,又回到了資訊理論。
現在的搜尋引擎對 TF/IDF 進行了不少細微的優化,使得相關性的度量更加準確了。當然,對有興趣寫一個搜尋引擎的愛好者來講,使用 TF/IDF 就足夠了。 如果我們結合上網頁排名(Page Rank),那麼給定一個查詢,有關網頁綜合排名大致由相關性和網頁排名乘積決定。
[我們已經談過了如何自動下載網頁、如何建立索引、如何衡量網頁的質量(Page Rank)。我們今天談談如何確定一個網頁和某個查詢的相關性。瞭解了這四個方面,一個有一定程式設計基礎的讀者應該可以寫一個簡單的搜尋引擎了,比如為您所在的學校或院系建立一個小的搜尋引擎。]
我們還是看上回的例子,查詢關於“原子能的應用”的網頁。我們第一步是在索引中找到包含這三個詞的網頁(詳見關於布林運算的系列)。現在任何一個搜尋引擎都包含幾十萬甚至是上百萬個多少有點關係的網頁。那麼哪個應該排在前面呢?顯然我們應該根據網頁和查詢“原子能的應用”的相關性對這些網頁進行排序。因此,這裡的關鍵問題是如何度量網頁和查詢的相關性。
我們知道,短語“原子能的應用”可以分成三個關鍵詞:原子能、的、應用。根據我們的直覺,我們知道,包含這三個詞多的網頁應該比包含它們少的網頁相關。當然,這個辦法有一個明顯的漏洞,就是長的網頁比短的網頁佔便宜,因為長的網頁總的來講包含的關鍵詞要多些。因此我們需要根據網頁的長度,對關鍵詞的次數進行歸一化,也就是用關鍵詞的次數除以網頁的總字數。我們把這個商稱為“關鍵詞的頻率”,或者“單文字詞彙頻率”(Term Frequency),比如,在某個一共有一千詞的網頁中“原子能”、“的”和“應用”分別出現了 2 次、35 次 和 5 次,那麼它們的詞頻就分別是 0.002、0.035 和 0.005。 我們將這三個數相加,其和 0.042 就是相應網頁和查詢“原子能的應用”
相關性的一個簡單的度量。概括地講,如果一個查詢包含關鍵詞 w1,w2,...,wN, 它們在一篇特定網頁中的詞頻分別是: TF1, TF2, ..., TFN。 (TF: term frequency)。 那麼,這個查詢和該網頁的相關性就是:
TF1 + TF2 + ... + TFN。
讀者可能已經發現了又一個漏洞。在上面的例子中,詞“的”站了總詞頻的 80% 以上,而它對確定網頁的主題幾乎沒有用。我們稱這種詞叫“應刪除詞”(Stopwords),也就是說在度量相關性是不應考慮它們的頻率。在漢語中,應刪除詞還有“是”、“和”、“中”、“地”、“得”等等幾十個。忽略這些應刪除詞後,上述網頁的相似度就變成了0.007,其中“原子能”貢獻了0.002,“應用”貢獻了 0.005。
細心的讀者可能還會發現另一個小的漏洞。在漢語中,“應用”是個很通用的詞,而“原子能”是個很專業的詞,後者在相關性排名中比前者重要。因此我們需要給漢語中的每一個詞給一個權重,這個權重的設定必須滿足下面兩個條件:
1. 一個詞預測主題能力越強,權重就越大,反之,權重就越小。我們在網頁中看到“原子能”這個詞,或多或少地能瞭解網頁的主題。我們看到“應用”一次,對主題基本上還是一無所知。因此,“原子能“的權重就應該比應用大。
2. 應刪除詞的權重應該是零。
我們很容易發現,如果一個關鍵詞只在很少的網頁中出現,我們通過它就容易鎖定搜尋目標,它的權重也就應該大。反之如果一個詞在大量網頁中出現,我們看到它仍然不很清楚要找什麼內容,因此它應該小。概括地講,假定一個關鍵詞 w 在 Dw 個網頁中出現過,那麼 Dw 越大,w 的權重越小,反之亦然。在資訊檢索中,使用最多的權重是“逆文字頻率指數” (Inverse document frequency 縮寫為IDF),它的公式為log(D/Dw)其中D是全部網頁數。比如,我們假定中文網頁數是D=10億,應刪除詞“的”在所有的網頁中都出現,即Dw=10億,那麼它的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。遺憾的是,她既沒有從理論上解釋為什麼權重IDF 應該是對數函式 log(D/Dw)(而不是其它的函式,比如平方根),也沒有在這個題目上作進一步深入研究,以至於在以後的很多文獻中人們提到 TF/IDF 時沒有引用她的論文,絕大多數人甚至不知道斯巴克-瓊斯的貢獻。同年羅賓遜寫了個兩頁紙的解釋,解釋得很不好。倒是後來康乃爾大學的薩爾頓(Salton)多次寫文章、寫書討論 TF/IDF 在資訊檢索中的用途,加上薩爾頓本人的大名(資訊檢索的世界大獎就是以薩爾頓的名字命名的)。很多人都引用薩爾頓的書,甚至以為這個資訊檢索中最重要的概念是他提出的。當然,世界並沒有忘記斯巴克-瓊斯的貢獻,2004年,在紀念文獻學學報創刊 60 週年之際,該學報重印了斯巴克-瓊斯的大作。羅賓遜在同期期刊上寫了篇文章,用夏農的資訊理論解釋 IDF,這回的解釋是對的,但文章寫的並不好、非常冗長(足足十八頁),把一個簡單問題搞複雜了。其實,資訊理論的學者們已經發現並指出,其實 IDF 的概念就是一個特定條件下、關鍵詞的概率分佈的交叉熵(Kullback-Leibler Divergence)(詳見
現在的搜尋引擎對 TF/IDF 進行了不少細微的優化,使得相關性的度量更加準確了。當然,對有興趣寫一個搜尋引擎的愛好者來講,使用 TF/IDF 就足夠了。 如果我們結合上網頁排名(Page Rank),那麼給定一個查詢,有關網頁綜合排名大致由相關性和網頁排名乘積決定。