1. 程式人生 > >TF-IDF 直觀理解

TF-IDF 直觀理解

今天讀完了吳軍老師的數學之美第十一章,我對從資訊理論去解釋TF-IDF有了更加深刻的理解。

       我們知道Google來查詢網頁時,表現的很好。表現的好是因為Google給你返回的網頁與你的查詢相關性很大。比如我們搜尋“原子能的應用”,那麼搜尋引擎需要做的就是在大量的網頁中給你推薦一些相關性很強的網頁。那麼問題來了?如果讓你做一個搜尋引擎你如何構建。

      如果我來構建搜尋引擎,首先我會用最簡單粗暴的辦法!我統計網頁中的詞頻(Term Frequency,TF),比如某個網頁有1000個詞,其中“原子能”,“的”,“應用”分別出現的次數為2次,35次和5次。那麼詞頻分別是0.002,0.035,0.005。我簡單的將詞頻求和,得0.042。那麼我用這個詞頻和來衡量相關性。如果網頁a的詞頻和為0.042, 網頁b的詞頻和為0.052,我優先推薦網頁a。

    那麼有的同學會發現這裡有漏洞!“的”這個詞頻佔比很大,然而它對衡量相關性毫無用處。所以我們需要去停用詞(停用詞指的是“是”, “中”,“地”等詞)。還有個漏洞,我們直觀上感覺“原子能”這個詞應該更重要,而“應用”這個詞不那麼重要。所以我們需要更改我們的方法。我們直觀上的感覺一個關鍵詞W在D個文件中出現的次數Dw,Dw越小,證明這個網頁和當前搜尋更相關。我們用IDF(逆文件頻率)來對這種直覺建模(IDF = log(D/Dw)),至於為什麼這樣衡量我後續會用資訊理論來解釋。

    總結一下,我們用TF-IDF來衡量一個關鍵詞與網頁的相關性。因為直覺上,網頁中所含的關鍵詞詞頻TF越大,與網頁更相關。如果這個關鍵詞越集中在少量的幾個網頁中,這個關鍵詞與這個網頁更相關。所以衡量搜尋和網頁的相關性就用下列公式來衡量。(上面我是介紹了為何公式1.1來衡量相關性的思路)

TF1*IDF1+TF2*IDF2+...+TFn*IDFn (1.1)

那麼為什麼IDF =log(D/Dw),而不是IDF=\sqrt(D/Dw).我下面從資訊理論的角度解釋一下。

我們知道一個詞的資訊量I(w) = -P(w)*log(P(w)) =-TFw/N*log(TFw/N) = TFw/Nlog(N/TFw)

其實最後TF-IDF就成了詞w在整個語料庫中的資訊量與詞w在某篇文件i的資訊量的差值。圖片中I(w)為詞w在整個語料庫的資訊量,I(w)^i表示詞w在第i篇文件的資訊量。感興趣的同學可以看一下公式的推導。這裡解釋了為什麼IDF用IDF = log(D/Dw)來衡量。

我一直強調直觀的理解,下面我來談一下我對資訊理論的一點想法。我們知道資訊熵是用來衡量資訊量的大小,資訊量等同於不確定性的大小。我舉這樣一個例子,比如有隊伍A和隊伍B比賽,需要你預測誰是贏家?這裡我們假設認為A贏的概率是1/2,B同理。那麼如果我引入一個先驗資訊——“A隊比較強”,這時A贏得概率要更大,不妨設3/4。當我們沒有引入先驗資訊,我們猜A隊贏,這時我們心裡也很忐忑,也沒底。而引入了先驗資訊之後,我們猜A隊贏,這時我們很有把握。這種直觀上的感覺有多大把握,就是不確定性!如果用公式計算一下,引入先驗資訊之前,資訊熵很大,也就是不確定性很大,也就是很沒有把握。

還有一點需要注意,引入了先驗知識,能消除系統的不確定性,而我們當然想要資訊更加準確*(也就是資訊熵越小越好)(注,這裡的先驗要與比賽相關,如果是獨立變數的話。比如說知道特朗普當選總統,這對於消除系統的不確定性沒有絲毫幫助)那麼我們迴歸我們的公式,D(w)代表了詞w的資訊量,而D(w)^i表現了詞w在文件I中的資訊量的大小