NLP一些基本概念初識

大量摘自維基百科、百度百科。

TF*IDF

在一份給定的文件裏,詞頻 (term frequency, TF) 指的是某一個給定的詞語在該文件中出現的次數。這個數字通常會被歸一化,以防止它偏向長的文件。(同一個詞語在長文件裏可能會比短文件有更高的詞頻,而不管該詞語重要與否。)

逆向文件頻率 (inverse document frequency, IDF) 是一個詞語普遍重要性的度量。某一特定詞語的IDF,可以由總文件數目除以包含該詞語之文件的數目,再將得到的商取對數得到。

有很多不同的數學公式可以用來計算TF-IDF。這邊的例子以上述的數學公式來計算。詞頻 (TF) 是一詞語出現的次數除以該文件的總詞語數。假如一篇文件的總詞語數是100個,而詞語“母牛”出現了3次,那麼“母牛”一詞在該文件中的詞頻就是3/100=0.03。一個計算文件頻率 (IDF) 的方法是測定有多少份文件出現過“母牛”一詞,然後除以文件集裏包含的文件總數。所以,如果“母牛”一詞在1,000份文件出現過,而文件總數是10,000,000份的話,其逆向文件頻率就是 lg(10,000,000 / 1,000)=4。最後的TF-IDF的分數爲0.03 * 4=0.12。

在某個一共有一千詞的網頁中“原子能”、“的”和“應用”分別出現了 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。這個比例和我們的直覺比較一致了。

entropy

熵(entropy)表示單個隨機變量的不確定性的均值,隨機變量的熵越大,它的不確定性就越大,也就意味着能正確估計其值的概率越小,公式如下:

舉個例子

information gain

信息增益是特徵選擇中的一個重要指標,它定義爲一個特徵能夠爲分類系統帶來多少信息,帶來的信息越多,該特徵越重要。那麼如何衡量一個特徵爲分類系統帶來的信息多少呢:對一個特徵而言,系統有它和沒它時信息量將發生變化,而前後信息量的差值就是這個特徵給系統帶來的信息量。所謂信息量,其實就是熵。

信息增益是針對一個一個的特徵而言的,就是看一個特徵t,系統有它和沒它的時候信息量各是多少,兩者的差值就是這個特徵給系統帶來的信息量,即增益。系統含有特徵t的時候信息量很好計算,就是剛纔的式子,它表示的是包含所有特徵時系統的信息量。

問題是當系統不包含t時,信息量如何計算?我們換個角度想問題,把系統要做的事情想象成這樣:說教室裏有很多座位,學生們每次上課進來的時 候可以隨便坐,因而變化是很大的(無數種可能的座次情況);但是現在有一個座位,看黑板很清楚,聽老師講也很清楚,於是校長的小舅子的姐姐的女兒託關係 (真輾轉啊),把這個座位定下來了,每次只能給她坐,別人不行,此時情況怎樣?對於座次的可能情況來說,我們很容易看出以下兩種情況是等價的:(1)教室 裏沒有這個座位;(2)教室裏雖然有這個座位,但其他人不能坐(因爲反正它也不能參與到變化中來,它是不變的)。

對應到我們的系統中,就是下面的等價:(1)系統不包含特徵t;(2)系統雖然包含特徵t,但是t已經固定了,不能變化。

我們計算分類系統不包含特徵t的時候,就使用情況(2)來代替,就是計算當一個特徵t不能變化時,系統的信息量是多少。這個信息量其實也有專門的名稱,就叫做“條件熵”,條件嘛,自然就是指“t已經固定“這個條件。

但是問題接踵而至,例如一個特徵X,它可能的取值有n多種(x1,x2,……,xn), 當計算條件熵而需要把它固定的時候,要把它固定在哪一個值上呢?答案是每一種可能都要固定一下,計算n個值,然後取均值纔是條件熵。而取均值也不是簡單的 加一加然後除以n,而是要用每個值出現的概率來算平均(簡單理解,就是一個值出現的可能性比較大,固定在它上面時算出來的信息量佔的比重就要多一些)。

因此有這樣兩個條件熵的表達式:

這是指特徵X被固定爲值xi時的條件熵,

這是指特徵X被固定時的條件熵,注意與上式在意義上的區別。從剛纔計算均值的討論可以看出來,第二個式子與第一個式子的關係就是:

具體到我們文本分類系統中的特徵t,t有幾個可能的值呢?注意t是指一個固定的特徵,比如他就是指關鍵詞“經濟”或者“體育”,當我們說特徵“經濟”可能的取值時,實際上只有兩個,“經濟”要麼出現,要麼不出現。一般的,t的取值只有t(代表t出現)和clip_image006(代表t不出現),注意系統包含t但t 不出現與系統根本不包含t可是兩回事。

因此固定t時系統的條件熵就有了,爲了區別t出現時的符號與特徵t本身的符號,我們用T代表特徵,而用t代表T出現,那麼:

與剛纔的式子對照一下,含義很清楚對吧,P(t)就是T出現的概率,就是T不出現的概率。這個式子可以進一步展開,其中的

另一半就可以展開爲:

因此特徵T給系統帶來的信息增益就可以寫成系統原本的熵與固定特徵T後的條件熵之差:

公式中的東西看上去很多,其實也都很好計算。比如P(Ci),表示類別Ci出現的概率,其實只要用1除以類別總數就得到了(這是說你平等的看待每個類別而忽略它們的大小時這樣算,如果考慮了大小就要把大小的影響加進去)。再比如P(t),就是特徵T出現的概率,只要用出現過T的文檔數除以總文檔數就可以了,再比如P(Ci|t)表示出現T的時候,類別Ci出現的概率,只要用出現了T並且屬於類別Ci的文檔數除以出現了T的文檔數就可以了。

從以上討論中可以看出,信息增益也是考慮了特徵出現和不出現兩種情況,與開方檢驗一樣,是比較全面的,因而效果不錯。但信息增益最大的問題 還在於它只能考察特徵對整個系統的貢獻,而不能具體到某個類別上,這就使得它只適合用來做所謂“全局”的特徵選擇(指所有的類都使用相同的特徵集合),而 無法做“本地”的特徵選擇(每個類別有自己的特徵集合,因爲有的詞,對這個類別很有區分度,對另一個類別則無足輕重)。

================

一個例子:

================

任務:

根據天氣預測否去打網球

數據:

複製代碼
這個數據集來自Mitchell的機器學習,叫做是否去打網球play-tennis,以下數據仍然是從帶逗號分割的文本文件,複製到紀事本,把後綴直接改爲.csv就可以拿Excel打開:

*play-tennis data,其中6個變量依次爲:編號、天氣{Sunny、Overcast、Rain}、溫度{熱、冷、適中}、溼度{高、正常}、風力{強、弱}以及最後是否去玩的決策{是、否}。一個建議是把這些數據導入Excel後,另複製一份去掉變量的數據到另外一個工作簿,即只保留14個觀測值。這樣可以方便地使用Excel的排序功能,隨時查看每個變量的取值到底有多少。*/

NO. , Outlook , Temperature , Humidity , Wind , Play 
1 , Sunny , Hot , High , Weak , No 
2 , Sunny , Hot , High , Strong , No 
3 , Overcast , Hot , High , Weak , Yes 
4 , Rain , Mild , High , Weak , Yes 
5 , Rain , Cool , Normal , Weak , Yes 
6 , Rain , Cool , Normal , Strong , No 
7 , Overcast , Cool , Normal , Strong , Yes 
8 , Sunny , Mild , High , Weak , No 
9 , Sunny , Cool , Normal , Weak , Yes 
10 , Rain , Mild , Normal , Weak , Yes 
11 , Sunny , Mild , Normal , Strong , Yes 
12 , Overcast , Mild , High , Strong , Yes 
13 , Overcast , Hot , Normal , Weak , Yes 
14 , Rain , Mild , High , Strong , No
複製代碼

用決策樹來預測:

決策樹的形式類似於“如果天氣怎麼樣,去玩;否則,怎麼着怎麼着”的樹形分叉。那麼問題是用哪個屬性(即變量,如天氣、溫度、溼度和風力)最適合充當這顆樹的根節點,在它上面沒有其他節點,其他的屬性都是它的後續節點。

那麼借用上面所述的能夠衡量一個屬性區分以上數據樣本的能力的“信息增益”(Information Gain)理論。

如果一個屬性的信息增益量越大,這個屬性作爲一棵樹的根節點就能使這棵樹更簡潔,比如說一棵樹可以這麼讀成,如果風力弱,就去玩;風力強,再按天氣、溫度等分情況討論,此時用風力作爲這棵樹的根節點就很有價值。如果說,風力弱,再又天氣晴朗,就去玩;如果風力強,再又怎麼怎麼分情況討論,這棵樹相比就不夠簡潔了。

用熵來計算信息增益:

 

複製代碼
1 計算分類系統熵
類別是 是否出去玩。取值爲yes的記錄有9個,取值爲no的有5個,即說這個樣本里有9個正例,5 個負例,記爲S(9+,5-),S是樣本的意思(Sample)。那麼P(c1) = 9/14, P(c2) = 5/14
這裏熵記爲Entropy(S),計算公式爲:
Entropy(S)= -(9/14)*log2(9/14)-(5/14)*log2(5/14)用Matlab做數學運算

2 分別以Wind、Humidity、Outlook和Temperature作爲根節點,計算其信息增益

我們來計算Wind的信息增益
當Wind固定爲Weak時:記錄有8條,其中正例6個,負例2個;
同樣,取值爲Strong的記錄6個,正例負例個3個。我們可以計算相應的熵爲:
Entropy(Weak)=-(6/8)*log(6/8)-(2/8)*log(2/8)=0.811
Entropy(Strong)=-(3/6)*log(3/6)-(3/6)*log(3/6)=1.0
現在就可以計算出相應的信息增益了:
所以,對於一個Wind屬性固定的分類系統的信息量爲 (8/14)*Entropy(Weak)+(6/14)*Entropy(Strong)
Gain(Wind)=Entropy(S)-(8/14)*Entropy(Weak)-(6/14)*Entropy(Strong)=0.940-(8/14)*0.811-(6/14)*1.0=0.048
這個公式的奧祕在於,8/14是屬性Wind取值爲Weak的個數佔總記錄的比例,同樣6/14是其取值爲Strong的記錄個數與總記錄數之比。

同理,如果以Humidity作爲根節點:
Entropy(High)=0.985 ; Entropy(Normal)=0.592
Gain(Humidity)=0.940-(7/14)*Entropy(High)-(7/14)*Entropy(Normal)=0.151
以Outlook作爲根節點:
Entropy(Sunny)=0.971 ; Entropy(Overcast)=0.0 ; Entropy(Rain)=0.971
Gain(Outlook)=0.940-(5/14)*Entropy(Sunny)-(4/14)*Entropy(Overcast)-(5/14)*Entropy(Rain)=0.247
以Temperature作爲根節點:
Entropy(Cool)=0.811 ; Entropy(Hot)=1.0 ; Entropy(Mild)=0.918
Gain(Temperature)=0.940-(4/14)*Entropy(Cool)-(4/14)*Entropy(Hot)-(6/14)*Entropy(Mild)=0.029
這樣我們就得到了以上四個屬性相應的信息增益值:
Gain(Wind)=0.048 ;Gain(Humidity)=0.151 ; Gain(Outlook)=0.247 ;Gain(Temperature)=0.029
最後按照信息增益最大的原則選Outlook爲根節點。子節點重複上面的步驟。這顆樹可以是這樣的,它讀起來就跟你認爲的那樣:

互信息(Mutual Informatin):



發佈了60 篇原創文章 · 獲贊 18 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章