關鍵詞權重計算算法:TF-IDF


TF-IDF(Term Frequency–Inverse Document Frequency)是一種用於資訊檢索與文本挖掘的常用加權技術。TF-IDF是一種統計方法,用以評估一字詞對於一個文件集或一個語料庫中的其中一份 文件的重要程度。字詞的重要性隨着它在文件中出現的次數成正比增加,但同時會隨着它在語料庫中出現的頻率成反比下降。TF-IDF加權的各種形式常被搜索 引擎應用,作為文件與用戶查詢之間相關程度的度量或評級。除了TF-IDF以外,互聯網上的搜尋引擎還會使用基於連結分析的評級方法,以確定文件在搜尋結 果中出現的順序。

TFIDF的主要思想是:如果某個詞或短語在一篇文章中出現的頻率TF高,並且在其他文章中很少出現,則認為此詞或者短語具有很好的類別區分能力,適合用來分類。TF-IDF實際上是:TF * IDF。

  • 詞頻(Term Frequency,TF)指的是某一個給定的詞語在該文件中出現的頻率。這個數字是對詞數(term count)的歸一化,以防止它偏向長的文件。(同一個詞語在長文件里可能會比短文件有更高的詞數,而不管該詞語重要與否。)
  • 逆向文件頻率(Inverse Document Frequency,IDF)是一個詞語普遍重要性的度量。某一特定詞語的IDF,可以由總文件數目除以包含該詞語之文件的數目,再將得到的商取對數得到。

某一特定文件內的高詞語頻率,以及該詞語在整個文件集合中的低文件頻率,可以產生出高權重的TF-IDF。因此,TF-IDF傾向於過濾掉常見的詞語,保留重要的詞語。

tf-idf模型

目前,真正在搜索引擎等實際應用中廣泛使用的是tf-idf模型。tf-idf模型的主要思想是:如果詞w在一篇文檔d中出現的頻率高,並且在其他文檔中很少出現,則認為詞w具有很好的區分能力,適合用來把文章d和其他文章區分開來。

該模型主要包含了兩個因素:

1) 詞w在文檔d中的詞頻tf (Term Frequency),即詞w在文檔d中出現次數count(w, d)和文檔d中總詞數size(d)的比值:

tf(w,d) = count(w, d) / size(d)

2) 詞w在整個文檔集合中的逆向文檔頻率idf (Inverse Document Frequency),即文檔總數n與詞w所出現文件數docs(w, D)比值的對數:

idf = log(n / docs(w, D))

tf-idf模型根據tf和idf為每一個文檔d和由關鍵詞w[1]…w[k]組成的查詢串q計算一個權值,用於表示查詢串q與文檔d的匹配度:

tf-idf(q, d) = sum { i = 1..k | tf-idf(w[i], d) } = sum { i = 1..k | tf(w[i], d) * idf(w[i]) }

信息檢索問題的概率視角

直觀上看,tf描述的是文檔中詞出現的頻率;而idf是和詞出現文檔數相關的權重。我們比較容易定性地理解tf-idf的基本思想,但具體到tf-idf的一些細節卻並不是那么容易說清楚為什么。比如:

1) 為什么tf是count(w, d) / size(d)?能不能是log(count(w, d) / size(d))等其他形式?

2) 為什么idf是一個log形式?

3) 為什么tf和idf之間是乘積關系,而不是加法或指數關系?

4) 為什么多個關鍵詞的tf-idf值是加法關系,而不是乘法或者指數關系?

5) 除了tf-idf值,Google還會計算網頁的PageRank值,二者相乘得到最后的權值,為什么是乘法,而不是加法或指數?

據說,最初甚至tf-idf的提出者自己也沒有對諸如“為什么idf是log形式”這個問題給出有力的解釋,雖然后來有人從信息論的角度對idf的 log形式給出了令人信服的解釋,但是剩下的其他一些疑問仍然存在。在我了解的范圍內,對於tf-idf模型還沒有一個真正統一完整的理論解釋。在試圖為 tf-idf找到更好的理論解釋的過程中,我意識到對tf-idf模型種種疑問的根源在於tf-idf試圖表達的“查詢q和文檔的匹配度”本身就有一定的 模糊性,什么叫做“匹配度”,這就有很大的自由發揮空間。如果說向量模型的用向量夾角來表示匹配度概念還有一定的理論基礎,那么用tf-idf來表達匹配 度就有點“與其說是科學,不如說是藝術”的味道。

更進一步,其實,信息檢索問題的抽象方式“在文檔集合D上,對於給定查詢串q,返回一個按查詢q和文檔d匹配度relevance(q, d)排序的相關文檔列表D’”本身是值得反思的。我們應當考慮拋棄“匹配度”這種模糊的目標,從根源上尋求一種具有明確數學意義的目標。如果我們從概率視 角來看,把“查詢串q和文檔d的匹配度”問題轉換為“當查詢串是q時,用戶期望獲得文檔d的概率”問題,信息檢索問題就清晰多了。一方面這個概率描述是站在人的角度來看待信息檢索問題的,更加貼近實際的用戶體驗;另一方面,概率本身是有明確數學意義的,這樣我們就首先從目標上對問題進行了嚴格化。

下面,我將通過一個模型,從概率的視角,一邊解釋tf-idf的概率意義,一邊指出其不合理之處。

盒子小球模型

為了分析“當查詢串是q時,用戶期望獲得文檔d的概率”問題,我首先建立了一種稱為“盒子小球模型”的簡化模型。盒子小球模型把詞想象成各種不同顏色的小球,文檔想象成裝有若干小球的盒子,把“當查詢串是q時,用戶期望獲得文檔d的概率“轉換為下面的問題:

有n個盒子d[1], d[2], … d[n],每個盒子中有若干不同顏色的小球,有人隨機地選擇了一個盒子,並從盒子中隨機地拿出了一個顏色為w[j]的小球,那么這個小球來自於盒子d[i]的概率是多少?

其實,這就是經典的條件概率問題P(d[i] | w[j]),采用貝葉斯推斷將其轉化為:

P(d[i] | w[j]) = P(d[i], w[j]) / P(w[j]) = P(d[i]) * P(w[j] | d[i]) / P(w[j])

我們注意到這個條件概率包括幾個部分,P(d[i])是盒子d[i]被選中的先驗概率,p(w[j])是w[j]顏色小球被選中的先驗概率,P(w[j] | d[i])是在盒子d[i]中選中顏色w[j]小球的條件概率。

文檔先驗概率P(d)與PageRank

首先,我們來看盒子d[i]被選中的先驗概率P(d[i])是什么。P(d[i])的意義是:當用戶什么也沒有輸入的時候,它可能對文檔d[i]感 興趣的概率。在沒有更多信息的情況下,我們可以認為每個盒子被選中的先驗概率P(d[i])是相等的,都等於1 / m,其中m表示總文檔數(總盒子數),這時P(d[i])作為公共系數可被忽略。不過,在實際應用中,我們通常可以根據其他知識獲得各文檔的先驗概率,比 如,學術文獻和網頁通常可以基於引用度模型計算其先驗概率,這些經典論文和熱門網頁是多數人樂於見到的。說到這里,你可能已經發現,Google PageRank本質上就是這個先驗概率P(d[i])乘以某個系數!所以,PageRank實際上也被納入這個條件概率模型中來了,這就不難解釋為什么 在Google的排序算法中PageRank權重和tf-idf權重是一種乘積關系而不是加或者指數關系。另一方面,在理解了文檔先驗概率對整個搜索結果 概率的影響后,當搜索引擎中針對PageRank出現各種假鏈接SEO時,我們可以不拘泥於基於鏈接引用模型的PageRank,只要是以網頁先驗概率為 目標,不論是采用基於鏈接引用的PageRank,還是基於搜索結果點擊數模型,或是其他模型,都是可以的。這就是“變通”,從原理上“通”了,就可以在 方法上“變”。

詞的先驗概率P(w)

下面我們來考察詞w[j]的先驗概率P(w[j])。P(w[j])的意義是:在整個文檔集合中,w[j]被作為搜索關鍵詞的概率,比 如:“iPhone 5”,“青花瓷”這類詞被用作搜索關鍵詞的概率較高,而“的”,“什么”,“我們”這類高頻詞不大可能成為搜索關鍵詞。那么,我們如何來定量計算 P(w[j])呢?一種思路就是把w[j]在文檔集中出現的頻率作為其先驗概率。不過,顯然存在更好的方案:在大量的搜索查詢中進行統計,統計方法得出 P(w[j])的方法很接近P(w[j])本質的,不需要引入額外的假設。比如,一段時間內某搜索引擎的搜索總次數為10^10次,“公積金”這個詞出現 了100次,那么,我們可以認為先驗概率P(“公積金”)就是100 / 10^10 = 10^-8。

詞代表文檔主題的條件概率P(w | d)

最后,我們來看條件概率P(w[j] | d[i])。P(w[j] | d[i])的意義是在文檔d[i]中,人們用關鍵詞w[j]來搜索它的概率。那么,什么樣的詞是人們會用來搜索一篇文檔的呢?多數情況下,是那些代表一篇 文檔主題的詞。比如,有一篇新聞是關於iPhone 5發布會的,那么“iPhone5”, “發布會”,“庫克”,“蘋果”這些詞基本上就構成了文章的主題;那么,反過來說,如果用戶想搜索這篇關於iPhone 5發布會的新聞,他就有很大的可能通過這幾個詞來進行搜索。我們應當注意分辨P(w[j] | d[i])與P(w[j])的區別,后者可以通過大量的查詢統計得來,而前者不能與后者直接划等號,因為前者的意義是w[j]代表d[i]主題的概率。如 果非要引入統計方法,那么P(w[j] | d[i])對應的統計是:當搜索關鍵詞是w[j]且搜索結果包含d[i]時,用戶點擊(滿意)d[i]作為搜索結果的頻率。比如,用“iPhone5 發布會”的搜索,在結果中有都10000次出現了網頁x,其中,用戶8000次點擊了網頁x,那么,可以認為有80%的概率網頁x的主題是關於 “iPhone5 發布會”的。

詞的信息量和idf

上面談到了對P(w[j] | d[i])的計算的統計方法,但該方法有一定的局限,比如,要能進行統計首先需要文檔出現在足夠多的搜索結果中,需要時間和量的積累。除了統計方法外,我 們可以考慮其他方法計算詞w[j]代表文檔d[i]主題的概率。可能有人立刻會想到要對文章進行語義分析提取關鍵詞,給這些關鍵詞高權重,給其他詞低權 重。這種想法有一定的合理性,但實現上涉及語義分析,沒有成熟高效的方法。實際上,信息論為我們提供了另一條高效方案。上面談到“的”,“什么”,“我 們”這類高頻詞不會成為文檔主題和搜索關鍵詞的原因是它們不能提供足夠的信息,而“iPhone 5”,“發布會”這樣的詞匯則信息量豐富。所謂信息是指對不確定性(熵)的減小程度,信息的單位是比特(bit),信息量越大對於不確定性的減小程度越 大。比如,外面可能在下雨也可能沒有下雨,可能性空間大小為2,如果我們看一眼窗外,可能性空間就變成了1,那么“看見窗外在下雨”所提供的信息量就和熵 的減小程度成正比,具體來講等於log(2/1)=1。如果要用二進制編碼是否下雨,需要1個bit,0代表沒有下雨,1代表下雨。

但在很多場景下,各個可能性的概率並不相同,比如:歐洲杯16只球隊都可能奪冠,賽前它們奪冠的先驗概率並不相同,那么結果的不確定性程度實際上是 小於log(16)=4。如果你沒有看比賽,有人告訴你西班牙奪冠了,你可能會覺得很正常,但如果有人告訴你瑞士奪冠了,你通常會非常驚訝。這一現象的理 論解釋是,如果賽前西班牙奪冠概率是1/4,而瑞士奪冠概率是1/32,那么,“西班牙奪冠”的信息量為log(4)=2,即把不確定性減小為原來的1 /4,而“瑞士奪冠”的信息量為log(32)=5,不確定性減小為原來的1/32,一下子接受比前者大了兩倍以上的信息量,當然你會吃驚。

回到信息檢索,比如,“2012美國大選”這個查詢串包含了“2012”,“美國”和“大選”3個關鍵詞,我們應該如何定量計算它們的信息量呢?根 據信息的定義,詞的信息量等於它對不確定性的縮小程度。如果文檔總數為2^30,其中2^14篇文檔出現了“美國”,那么“美國”這個詞就把文檔的不確定 性從2^30縮小為2^14,它所包含的信息量為log(2^30/2^14)=16;而只有2^10篇文檔出現了“大選”,那么大選的信息量就是 log(2^30/2^10)=20,比“美國”多了4個bit。而“的”,“什么”,“我們”這些高頻詞對減小文檔不確定性幾乎沒有幫助,因而信息量為 0。相信你已經發現,上面idf(w)公式中的log(n / docs(w, D))實際上就是詞w的信息量了。

如果我們考慮詞的信息量對條件概率P(w[j] | d[i])的影響,假設“詞w在文檔中被選中的概率與其在文檔中的出現頻率和其信息量的乘積成正比”,那么上面的條件概率模型就變成:

P(d[i] | w[j]) = P(d[i], w[j]) / P(w[j]) = P(d[i]) * P(w[j] | d[i]) / P(w[j]) = P(d[i]) * (tf(w[j], d[i]) * idf(w[j] / sum { k = 1..size(d[i]), tf(w[k], d[i]) * idf(w[k]) }) / p(w[j]) = P(d[i]) * (tf-idf(w[j], d[i]) / sum { k = 1..size(d[i]), tf-idf(w[k], d[i]) }) / p(w[j]) = P(d[i]) * (tf-idf(w[j], d[i]) / tf-idf(d[i])) / p(w[j])

我們看到tf-idf已經被納入框架內了,但是還多出文檔先驗概率P(d[i]),關鍵詞先驗概率P(w[j])和文檔各詞的總tf- idf(d[i])。普通搜索引擎是基於PageRank和tf-idf的,那么,根據這個概率模型,我們可以看出,它沒有考慮文檔總tf- idf(d[i])和關鍵詞先驗概率p(w[j])。如果考慮這兩個因素,相信搜索效果會更好。

多關鍵詞

上面的條件概率模型主要是針對單個關鍵詞的情況,下面我們進一步將其擴展到多關鍵詞情況。我們知道,在tf-idf中,多個關鍵詞的所產生的tf- idf值是一種疊加關系,那么這是否符合條件概率模型呢?答案是否定的。在兩個關鍵字情況下,條件概率問題轉化為“如果有人從一個盒子中同時摸出顏色 w[x]的小球和顏色w[y]的小球,這兩個小球來自於盒子d[i]的概率是多少?”。假設從盒子中摸出各個小球事件是相互獨立的情況下,即

P(w[x], w[y]) = P(w[x]) * P(w[y]) P(w[x], w[y] | d[i]) = P(w[x] | d[i]) * P(w[y] | d[i])

我們可以推導出條件概率:

P(d[i] | w[x], w[y]) = P(d[i], w[x], w[y]) / P(w[x], w[y]) = P(d[i]) * P(w[x], w[y] | d[i]) / P(w[x], w[y]) = P(d[i]) * P(w[x] | d[i]) * P(w[y] | d[i]) / (P(w[x] * P(w[y])) = P(d[i]) * (tf-idf(w[x], d[i]) / tf-idf(d[i])) * ((tf-idf(w[y], d[i]) / tf-idf(d[i]))) / (p(w[x]) * P(w[y]))

可見,概率模型所得出的各個關鍵詞的tf-idf值之間是乘積關系,這是與tf-idf模型的加法關系是不同的。這一點可能與二者是否要求“文檔必 須包含所有查詢關鍵詞”的基本假設有關系。在文檔不包含所有關鍵字的這種情況下,tf-idf模型可能得出一個非0的匹配度,但條件概率模型得出的概率肯 定為0。不過,如果考慮一般查詢關鍵詞數量不多(3個以內),而大量文檔都同時包含這些關鍵詞,概率模型的乘積關系是比tf-idf模型的加法關系更有理 論基礎。從根本上講,這是因為tf-idf的“匹配度”是一個模棱兩可的概念,而條件概率有堅實的理論基礎。

總結

TF-IDF模型是搜索引擎中廣泛使用的信息檢索模型,但對於TF-IDF模型一直存在各種疑問。本文為信息檢索問題一種基於條件概率的盒子小球模 型,其核心思想是把“查詢串q和文檔d的匹配度問題”轉化為“查詢串q來自於文檔d的條件概率問題”。它從概率的視角為信息檢索問題定義了比TF-IDF 模型所表達的匹配度更為清晰的目標。從概率模型中,我們看到查詢串q來自於文檔d的條件概率主要包含以下幾個因素:1) 文檔的先驗概率P(d[i]),這與PageRank對應;2) 詞w被作為搜索關鍵詞的先驗概率P(w),這可以通過統計方法獲得;3) 關鍵詞w代表文檔d主題,或以詞w搜索文檔d的概率,P(w | d),除了統計方法,這可以通過tf-idf來計算。

參考地址:http://www.cnblogs.com/weidagang2046/archive/2012/10/22/tf-idf-from-probabilistic-view.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM