訓練,顧名思義,就是training(汗,這解釋),簡單的說就是讓計算機從給定的一堆文檔中自己學習分類的規則(如果學不對的話,還要,打屁屁?)。
開始訓練之前,再多說幾句關于VSM這種文檔表示模型的話。
舉個例子,假設說把我正在寫的“文本分類入門”系列文章的第二篇抽出來當作一個需要分類的文本,則可以用如下的向量來表示這個文本,以便于計算機理解和處理。
w2=(文本,5,統計學習,4,模型,0,……)
這個向量表示在w2所代表的文本中,“文本”這個詞出現了5次(這個信息就叫做詞頻),“統計學習”這個詞出現了4次,而“模型”這個詞出現了0次,依此類推,后面的詞沒有列出。
而系列的第三篇文章可以表示為
w3=(文本,9,統計學習,4,模型,10,……)
其含義同上。如果還有更多的文檔需要表示,我們都可以使用這種方式。
只通過觀察w2和w3我們就可以看出實際上有更方便的表示文本向量的方法,那就是把所有文檔都要用到的詞從向量中抽離出來,形成共用的數據結構(也可以仍是向量的形式),這個數據結構就叫做詞典,或者特征項集合。
例如我們的問題就可以抽離出一個詞典向量
D=(文本,統計學習,模型,……)
所有的文檔向量均可在參考這個詞典向量的基礎上簡化成諸如
w2=(5,4,0,……)
w3=(9,4,10,……)
的形式,其含義沒有改變。
5,4,10這些數字分別叫做各個詞在某個文檔中的權重,實際上單單使用詞頻作為權重并不多見,也不十分有用,更常見的做法是使用地球人都知道的TF/IDF值作為權重。(關于TF/IDF的詳細解釋,Google的吳軍研究員寫了非常通俗易懂的文章,發布于Google黑板報,鏈接地址是http://googlechinablog.com/2006/06/blog-post_27.html,有興趣不妨一讀)TF/IDF作為一個詞對所屬文檔主題的貢獻程度來說,是非常重要的度量標準,也是將文檔轉化為向量表示過程中的重要一環。
在這個轉化過程中隱含了一個很嚴重的問題。注意看看詞典向量D,你覺得它會有多大?或者說,你覺得它會包含多少個詞?
假設我們的系統僅僅處理漢語文本,如果不做任何處理,這個詞典向量會包含漢語中所有的詞匯,我手頭有一本商務印書館出版的《現代漢語詞典》第5版(2005年5月出版),其中收錄了65,000個詞,D大致也應該有這么大,也就是說,D是一個65,000維的向量,而所有的文本向量w2,w3,wn也全都是65,000維的!(這是文本分類這一問題本身的一個特性,稱為“高維性”)想一想,大部分文章僅僅千余字,包含的詞至多幾百,為了表示這樣一個文本,卻要使用65,000維的向量,這是對存儲資源和計算能力多大的浪費呀!(這又是文本分類問題的另一個特性,稱為“向量稀疏性”,后面會專門有一章討論這些特性,并指出解決的方法,至少是努力的方向)
中國是一個人口眾多而資源稀少的國家,我們不提倡一味發展粗放型的經濟,我們所需要的可持續發展是指資源消耗少,生產效率高,環境污染少……跑題了……
這么多的詞匯當中,諸如“體育”,“經濟”,“金融”,“處理器”等等,都是極其能夠代表文章主題的,但另外很多詞,像“我們”,“在”,“事情”,“里面”等等,在任何主題的文章中都很常見,根本無法指望通過這些詞來對文本類別的歸屬作個判斷。這一事實首先引發了對文本進行被稱為“去停止詞”的預處理步驟(對英文來說還有詞根還原,但這些與訓練階段無關,不贅述,會在以后講述中英文文本分類方法區別的章節中討論),與此同時,我們也從詞典向量D中把這些詞去掉。
但經過停止詞處理后剩下的詞匯仍然太多,使用了太多的特征來表示文本,就是常說的特征集過大,不僅耗費計算資源,也因為會引起“過擬合問題”而影響分類效果[22]。
這個問題是訓練階段要解決的第一個問題,即如何選取那些最具代表性的詞匯(更嚴格的說法應該是,那些最具代表性的特征,為了便于理解,可以把特征暫時當成詞匯來想象)。對這個問題的解決,有人叫它特征提取,也有人叫它降維。
特征提取實際上有兩大類方法。一類稱為特征選擇(Term Selection),指的是從原有的特征(那許多有用無用混在一起的詞匯)中提取出少量的,具有代表性的特征,但特征的類型沒有變化(原來是一堆詞,特征提取后仍是一堆詞,數量大大減少了而已)。另一類稱為特征抽取(Term Extraction)的方法則有所不同,它從原有的特征中重構出新的特征(原來是一堆詞,重構后變成了別的,例如LSI將其轉為矩陣,文檔生成模型將其轉化為某個概率分布的一些參數),新的特征具有更強的代表性,并耗費更少的計算資源。(特征提取的各種算法會有專門章節討論)
訓練階段,計算機根據訓練集中的文檔,使用特征提取找出最具代表性的詞典向量(仍然是不太嚴格的說法),然后參照這個詞典向量把這些訓練集文檔轉化為向量表示,之后的所有運算便都使用這些向量進行,不再理會原始的文本形式的文檔了(換言之,失寵了,后后)。
下一章繼續訓練,咱們之間還沒完。(怎么聽著像要找人尋仇似的)
請教一下:上文中的‘TF/IDF’中的‘/’為何是除號而非乘號呢?我覺得如果這里IDF的定義同您引用的吳軍的文章中一樣的話,即也是lg(D/Dw),那么計算權重時應該是TF×IDF才對?或者你這里的IDF的計算式是Dw/D?
第一天看文本分類,很多東西不懂,還請不吝賜教^_^
這里的‘/’可不是除的意思哦