開始之前首先說說分類體系。回憶一下,分類體系是指事先確定的類別的層次結構以及文檔與這些類別間的關系。
其中包含著兩方面的內容:
一,類別之間的關系。一般來說類別之間的關系都是可以表示成樹形結構,這意味著一個類有多個子類,而一個子類唯一的屬于一個父類。這種類別體系很常用,卻并不代表它在現實世界中也是符合常識的,舉個例子,“臨床心理學”這個類別應該即屬于“臨床醫學”的范疇,同時也屬于“心理學”,但在分類系統中卻不便于使用這樣的結構。想象一下,這相當于類別的層次結構是一個有環圖,無論遍歷還是今后類別的合并,比較,都會帶來無數的麻煩。
二,文檔與類別間的關系。一般來說,在分類系統中,我們傾向于讓一篇文檔唯一的屬于一個類別(更嚴格的說,是在同一層次中僅屬于一個類別,因為屬于一個類別的時候,顯然也屬于這個類別的父類別),這使得我們只適用一個標簽就可以標記這個文檔的類別,而一旦允許文檔屬于多個類別,標簽的數目便成為大小不定的變量,難于設計成高效的數據結構。這種“屬于多個”類的想法更糟的地方在于文檔類別表示的語義方面,試想,如果姚明給災區捐款的新聞即屬于災區新聞,也屬于體育新聞的話(這在現實中倒確實是合情合理的),當用戶使用這個系統來查找文檔,指定的條件是要所有“屬于災區新聞但不屬于體育新聞的新聞”(有點拗口,不過正好練嘴皮子啦,笑)的時候,這篇姚明的報道是否應該包含在查詢結果中呢?這是一個矛盾的問題。
文本分類問題牽涉到如此多的主題,本身又含有如此多的屬性,因此可以從多個角度對文本分類問題本身進行一下分類。
分類系統使用何種分類算法是分類系統的核心屬性。如果一個分類算法在一次分類判斷時,僅僅輸出一個真假值用來表示待分類的文檔是否屬于當前類別的話,這樣的系統就可以叫做基于二元分類器的分類系統。有些分類算法天然就是獨立二元的,例如支持向量機,它只能回答這個文檔是或不是這個類別的。這種分類算法也常常被稱為“硬分類”的算法(Hard Categorization)。而有的算法在一次判斷后就可以輸出文檔屬于多個類別的得分(假設說,得分越大,則說明越有可能屬于這個類別),這類算法稱為“排序分類”的算法(Ranking Categorization),也叫做m元分類算法。kNN就是典型的m元分類算法(因為kNN會找出與待分類文檔最相近的訓練樣本,并記錄下這些樣本所屬的分類)。