文本分類本質上也是一個模式識別的問題,因此我想借用一個更直觀的例子來說說特征選擇和權重量化到底各自是什么東西,當然,一旦解釋清楚,你馬上就會覺得文本分類這東西實在白癡,實在沒什么技術含量,你也就不會再繼續看我的技術博客,不過我不擔心,因為你已經踏上了更光明的道路(笑),我高興還來不及。
想想通過指紋來識別一個人的身份,只看一個人的指紋,當然說不出他姓甚名誰,識別的過程實際上是比對的過程,要與已有的指紋庫比較,找出相同的,或者說相似到一定程度的那一個。
首要的問題是,人的指紋太復雜,包含太多的位置和幾何形狀,要完全重現一個人的指紋,存儲和計算都是大麻煩。因此第一步總是一個特征選擇的問題,我們把全人類的指紋都統計一下,看看哪幾個位置能夠最好的區分不同的人。顯然不同的位置效果很不一樣,在有的位置上,我的指紋是是什么形狀,其他人也大都是這個形狀,這個位置就不具有區分度,或者說不具有表征性,或者說,對分類問題來說,它的重要程度低。這樣的位置我們就傾向于在識別的時候根本不看它,不考慮它。
那怎么看誰重要誰不重要呢?這就依賴于具體的選擇方法如何來量化重要程度,對卡方檢驗和信息增益這類方法來說,量化以后的得分越大的特征就越重要(也就是說,有可能有些方法,是得分越小的越重要)。
比如說你看10個位置,他們的重要程度分別是:
1 2 3 4 5 6 7 8 9 10
(20,5,10,20,30,15,4,3,7, 3)
顯然第1,第3,4,5,6個位置比其他位置更重要,而相對的,第1個位置又比第3個位置更重要。
識別時,我們只在那些重要的位置上采樣。當今的指紋識別系統,大都只用到人指紋的5個位置(驚訝么?只要5個位置的信息就可以區分60億人),這5個位置就是經過特征選擇過程而得以保留的系統特征集合。假設這個就是剛才的例子,那么該集合應該是:
(第1個位置,第3個位置,第4個位置,第5個位置,第6個位置)
當然,具體的第3個位置是指紋中的哪個位置你自己總得清楚。
確定了這5個位置之后,就可以把一個人的指紋映射到這個只有5個維度的空間中,我們就把他在5個位置上的幾何形狀分別轉換成一個具體的值,這就是特征權重的計算。依據什么來轉換,就是你選擇的特征權重量化方法,在文本分類中,最常用的就是TFIDF。
我想一定是“權重“這個詞誤導了所有人,讓大家以為TFIDF計算出的值代表的是特征的重要程度,其實完全不是。例如我們有一位男同學,他的指紋向量是:
(10,3,4,20,5)
你注意到他第1個位置的得分(10)比第3個位置的得分(3)高,那么能說第1個位置比第3個位置重要么?如果再有一位女同學,她的指紋向量是:
(10,20,4,20,5)
看看,第1個位置得分(10)又比第3個位置(20)低了,那這兩個位置到底哪個更重要呢?答案是第1個位置更重要,但這不是在特征權重計算這一步體現出來的,而是在我們特征選擇的時候就確定了,第1個位置比第3個位置更重要。
因此要記住,通過TFIDF計算一個特征的權重時,該權重體現出的根本不是特征的重要程度!
那它代表什么?再看看兩位同學的指紋,放到一起:
(10, 3,4,20,5)
(10,20,4,20,5)
在第三個位置上女同學的權重高于男同學,這不代表該女同學在指紋的這個位置上更“優秀“(畢竟,指紋還有什么優秀不優秀的分別么,笑),也不代表她的這個位置比男同學的這個位置更重要,3和20這兩個得分,僅僅代表他們的”不同“。
在文本分類中也是如此,比如我們的系統特征集合只有兩個詞:
(經濟,發展)
這兩個詞是使用卡方檢驗(特征選擇)選出來的,有一篇文章的向量形式是
(2,5)
另一篇
(3,4)
這兩個向量形式就是用TFIDF算出來的,很容易看出兩篇文章不是同一篇,為什么?因為他們的特征權重根本不一樣,所以說權重代表的是差別,而不是優劣。想想你說“經濟這個詞在第二篇文章中得分高,因此它在第二篇文章中比在第一篇文章中更重要“,這句話代表什么意義呢?你自己都不知道吧(笑)。
所以,當再說起使用TFIDF來計算特征權重時,最好把“權重“這個字眼忘掉,我們就把它說成計算得分好了(甚至”得分“也不太好,因為人總會不自覺的認為,得分高的就更重要),或者就僅僅說成是量化。
如此,你就再也不會拿TFIDF去做特征選擇了。
小Tips:為什么有的論文里確實使用了TFIDF作特征選擇呢?
嚴格說來并不是不可以,而且嚴格說來只要有一種方法能夠從一堆特征中挑出少數的一些,它就可以叫做一種特征選擇方法,就連“隨機選取一部分“都算是一種,而且效果并沒有差到驚人的地步哦!還是可以分對一大半的哦!所以有的人就用TFIDF的得分來把特征排排序,取得分最大的幾個進入系統特征集合,效果也還行(畢竟,連隨機選取效果也都還行),怎么說呢,他們愿意這么干就這么干吧。就像咱國家非得實行戶口制度,這個制度說不出任何道理,也不見他帶來任何好處,但不也沒影響二十一世紀成為中國的世紀么,呵呵。
多謝博主。
博主能不能講講關于LIBSVM的使用方面的文章啊。。。也許如何使用本身并不難,但沒人給你引個路,想開始還真難啊。。。不是有句話叫萬事開頭難嗎?
比如輸入的文本格式要怎么處理成標準輸入格式呢?還有具體使用過程中會遇到的一些問題。。。
不管怎么樣,還是很期待你的下一篇文章^.^。學到了很多東西啊。
如果假設各個特征項是獨立的,可以簡單的計算每個特征的增益,然后取和。
如果假設不是獨立的,就把他們的組合看成是一個新的變量,統計這個新變量可能的取值,每個取值取到的概率,重復運用信息增益的公式計算即可。
你說:“我想一定是“權重“這個詞誤導了所有人,讓大家以為TFIDF計算出的值代表的是特征的重要程度,其實完全不是。例如我們有一位男同學,他的指紋向量是:(10,3,4,20,5)你注意到他第1個位置的得分(10)比第3個位置的得分(3)高,那么能說第1個位置比第3個位置重要么?”
我想在指紋識別中這個值確實不能夠說位置1就比位置3重要,那是因為你的這個從指紋特征往這個向量值映射的函數我們未知所造成的??墒窃赥C問題中,TFIDF值的建模就是把那些出現頻率高,且區分作用大的詞賦予更高的tfidf值,所以他的高是可以說明這個詞更加重要的(或者是這個特征更加重要)
假如一篇文章的tfidf向量表示為(10,3,4,20,5),那么這里的“10”和“3”會帶來什么效果呢?很明顯,在做向量乘法計算相似度的時候顯然是“10”比“3”對于整體的相似度貢獻更大。因為similarity = (10,3,4,20,5) * (x1,x2,x3,x4,x5)T; 那么在不考慮x1,x2,..x5的情況下。顯然10比3“貢獻”大啊。
所以請博主在考慮一下,TFIDF這個在IR中如此經典的一個模型難道就真的這么一文不值?
就是因為不同的人在分類的不同階段對“重要”的定義彼此不同,所以大家會在一項指標重要還是不重要上存在分歧。注意我在談特征選擇階段特征對類別區分度方面的“重要”,而您糾結在文章向量表示時相似度判別時的“重要”。這種混淆很常見,所以也不能怪您,如果您有興趣繼續在文本分類方面深入,相信您有一天會得到不同的理解。
呵呵 有這篇文章,以后一定能讓好多人解惑。
呵呵~ 我并沒有說TFIDF是最好的特征選擇方法,可他確實是一種特征選擇的途徑,我只是不太同意你在最后說的:
“所以有的人就用TFIDF的得分來把特征排排序,取得分最大的幾個進入系統特征集合,效果也還行(畢竟,連隨機選取效果也都還行)”
因為如果您能夠通過實驗證明統計結果表明TFIDF特征選擇與隨機選取效果的期望和方差基本一致的話,您就可以說明TFIDF確實對特征提取沒有作用,而其他人之前確實將TFIDF與特征選擇混淆了。可是如果他的效果好于隨機的話就說明他還是有一定的道理的。
呵呵~ 還有你說:而您糾結在文章向量表示時相似度判別時的“重要”。
特征提取不是分類的目的,只是想通過特征提取來降維并得到有區分度的特征詞,可是這些特征詞最后還是為基于相似度的分類服務的,所以可以將特征提取的作用歸納為:找到區分度重要的詞,找到對相似度計算重要的詞
對于區分度重要,如果通過Tfidf提取出來的特征能夠很好的定義相同類別里面文本的相似,不就是能夠很好的定義不同類別里面文本的區別嗎?也許是博主認為做tfidf特征提取就是將tfidf值最高的詞提取出來了,所以認為這樣的不合理吧。如果能夠很好的利用tfidf值的類內分布和類間分布來做特征提取是能夠很好的得到有區分度的特征詞的。
而另一方面,而正如博主所說的tfidf在相似度計算中是很“重要”的,所以用tfidf來做特征提取對于之后的分類的相似度計算是很有用的。
拙見,海涵~
連您自己都同意了我的觀點,即認為單純使用TFIDF值來判斷一個特征是否有區分度不夠,而應該考慮該值在類間的分布,這個分布情況,不管您給它起什么名字,它一定不叫TFIDF,它只是以TFIDF值為基礎,正如信息增益,卡方檢驗和互信息等方法全都是以特征的文檔頻率為基礎一樣,它們都不叫文檔頻率方法,只有直接依據文檔頻率大小排序的方法才叫做“文檔頻率特征選擇”(而且確實有這種方法)。因為說到底,我們從文本中能觀察到的量其實只有兩個:詞頻和文檔頻率,所有的方法一律以這兩個量為計算基礎,但不能由此把所有的方法都叫做詞頻方法或者文檔頻率方法。TFIDF也是一種很基礎的量(它是由詞頻和文檔頻率計算來的),同樣它也帶來了較詞頻和文檔頻率單獨使用完全不同的效果。
如果您同意這些,您就會明白我所說的“TFIDF不能用來做特征選擇”,正是指單獨使用一個特征的TFIDF值來判斷毫無道理,卡方檢驗完全基于文檔頻率計算,但單看文檔頻率也毫無道理(好吧,文檔頻率有那么一點道理,呵呵)。
另外,兩個文檔的相似度在有的分類模型里(例如支持向量機)里完全沒有用處,您通過文檔在空間中的分布也可以看出來,一些位于類別邊界附近的文檔,其實與另一個類里的文檔更加相似(反而與同類的文檔不那么相似),在這種模型中,我們僅通過它所處的位置來判斷分類,而絲毫不受它與誰相似的影響。相信這一點您一想就能明白。當然這里所爭論的乃是對分類來說文檔相似度是否一定有用(對有的方法完全沒用),而不是說TFIDF對判斷相似是否有用,我要說,對文檔相似度計算來說,TFIDF是非常有效的。
準確的說,計算權重是為了能給每篇文章一個"唯一"的身份,就跟計算指紋不是為了得到指紋數據本身,而是為了得到唯一性一樣.我們需要一種指標,這種指標能讓計算機"看到"不同的兩篇文章確實不同,并且知道不同在哪里.只有能看到這種不同,計算機才能看出同類文章相似在哪里.如果有一種指標,它衡量每篇文章時結果都一樣,顯然程序沒法在這種數據基礎上學習分類的.因此形成向量表示實際是一個中間目的,終極的目的是為了讓文章之間看上去彼此不同,并且這種不同有所依據.
一個固定的詞IDF只有一個,不同的是TF,占詞頻的比重大。在AB兩篇文章中如果幾個不同的詞,TF都基本一致,比如說都是(5,1),而這兩個詞在C中是(1,5),難道就僅靠隨機判斷,就能得出AB同一類,跟C不同一類嗎?svm里面的核方法,是在原空間進行點積或者向量相減之后點積(rbf核)這樣的方法可以跟隨機等價嗎?
還有“經濟這個詞在第二篇文章中得分高,因此它在第二篇文章中比在第一篇文章中更重要”,TF高,難道意味著這個詞在第二篇文章不比第一篇重要嗎?
似乎看不到特征選取,即上文中的選擇特征位置的過程,
而僅僅存在TFIDF來進行對關鍵詞(針對詞頻選取topN作為關鍵詞)進行向量化。
如何將博主提到的卡方檢驗和chi融入其中呢?
我也有這個問題,還希望有人能給解答下
TFIDF= 某個詞在某篇文本中出現的次數 / 有該詞出現的文本數量,
我覺得這個TFIDF值能夠反映某個詞對于不同類文本間的區分度,所以TFIDF越大就證明這個詞對于區分不同類文本的作用越大(也就意味著特征明顯)。
不知我說的對不對?
請教樓主,謝謝~
"即認為單純使用TFIDF值來判斷一個特征是否有區分度不夠,而應該考慮該值在類間的分布,這個分布情況,不管您給它起什么名字,它一定不叫TFIDF,它只是以TFIDF值為基礎"
“該值在類間的分布”即是說該選擇的特征應該在某類出現多,而其它類出現少。對吧?也即該特征的IDF(反文檔頻率)在不同類的方差越大越好。
那么,在選特征時需滿足兩個條件:
1.特征的TFIDF夠高,保證文檔區分度
2.特征的IDF在不同類的方差夠大,保證分類的區分度
不知這樣如何,請指教
很多人沒有搞清楚特征選選擇和特征量化的區別。
idf用來做特征選擇是可以的,因為它代表該詞(特征)在文檔集上的分布;tfidf則不能用于特征選擇,因為特征選擇的目的是在所有詞中選擇一部分重要的詞作為文本特征,判斷標準是跟具體某一篇文檔無關的,而tfidf的tf因子與文檔有關。在不同文檔中tf不同,因此tfidf只能區分該詞對不同文檔的重要程度,但不能代表分類問題的區分度。
tfidf作為特征量化方法是可以,實際上在選擇了特征后用tf也可以,因為同一個詞idf對不同文檔來說是常量,“特征量化”本身一定要能差別話該特征在不同文檔上的分布。
文檔A:(2,5)
文檔B:(3,4)
不同文檔A和B的同一個位置:說2的權重小于3,5的權重大于4,這都不準確!但是,在同一篇文檔中,A:2的權重小于5,B:3的權重小于4,這都是沒有問題的!
這也是為什么能根據TF-IDF的大小,從一篇文章中提取關鍵詞的原因。
拙見,見陋了~
感覺越講越亂了