Machine Learning系列--TF-IDF模型的機率解釋

信息檢索概述

信息檢索是當前應用十分普遍的一種技術,論文檢索、搜索引擎都屬於信息檢索的範疇。一般,人們把信息檢索問題抽象爲:在文檔集合D上,對於由關鍵詞w[1] ... w[k]組成的查詢串q,返回一個按查詢q和文檔d匹配度relevance(q, d)排序的相關文檔列表D'。html

對於這一問題,前後出現了布爾模型、向量模型等各類經典的信息檢索模型,它們從不一樣的角度提出了本身的一套解決方案。布爾模型以集合的布爾運算爲基礎,查詢效率高,但模型過於簡單,沒法有效地對不一樣文檔進行排序,查詢效果不佳。向量模型把文檔和查詢串都視爲詞所構成的多維向量,而文檔與查詢的相關性即對應於向量間的夾角。不過,因爲一般詞的數量巨大,向量維度很是高,而大量的維度都是0,計算向量夾角的效果並很差。另外,龐大的計算量也使得向量模型幾乎不具備在互聯網搜索引擎這樣海量數據集上實施的可行性。算法

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的匹配度:code

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的一些細節卻並非那麼容易說清楚爲何。好比:htm

1) 爲何tf是count(w, d) / size(d)?能不能是log(count(w, d) / size(d))等其餘形式?blog

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

相關文章
相關標籤/搜索