轉自:http://hi.baidu.com/yaomohan/blog/item/e7b1c2c2516638110ef477cc.html 經過N天的努力,我的第一個文本聚類小程式終於火熱出爐了.真不容易啊,在網上看了很多程式才明白其中的核心原理。其實原理很簡單,但這個程式最麻煩的是 一些細節,比如字串的處理還有用什麼樣的資料結構來儲存資料等等,這些才是最麻煩的。下面我會詳細介紹我所總結的東西,由於是我自己總結的所以難免會有 一些錯誤,望廣大網友,牛人指出錯誤,謝謝合作!!! 首先我來介紹一下什麼是文本聚類,最簡單的來說文本聚類就是從很多文檔中把一些 內容相似的文檔聚為一類。文本聚類主要是依據著名的聚類假設:同類的文本相似性較大,而不同類的文本相似性較小。作為一種無監督的機器學習方法,聚 類由於不需要訓練過程,以及不需要預先對文本手工標註類別,因此具有一定的靈活性和較高的自動化處理能力,已經成為對文本資訊進行有效地組織、摘要和導航 的重要手段,為越來越多的研究人員所關注。一個文本表現為一個由文字和標點符號組成的字串,由字或字元組成詞,由片語成短語,進而形成句、段、節、章、 篇的結構。要使電腦能夠高效地處理真是文本,就必須找到一種理想的形式化表示方法,這種表示一方面要能夠真實地反應文檔的內容(主題、領域或結構等), 另一方面,要有對不同文檔的區分能力。目前文本表示通常採用向量空間模型(vector space model,VSM)。 VSM法即向量空間模型(Vector Space Model)法,由Salton等人於60年代末提出。這是最早也是最出名的資訊檢索方面的數學模型。其基本思想是將文檔表示為加權的特徵向 量:D=D(T1,W1;T2,W2;…;Tn,Wn),然後通過計算文本相似性的方法來確定待分樣本的類別。當文本被表示為空白間向量模型的時候,文本的 相似性就可以藉助特徵向量之間的內積來表示。最簡單來說一個文檔可以看成是由若干個單片語成的,每個單詞轉化成權值以後, 每個權值可以看成向量中的一個分量,那麼一個文檔可以看成是n維空間中的一個向量,這就是向量空間模型的由來。單詞對應的權值可以通過TF-IDF加權技 術計算出來。 TF-IDF(term frequency–inverse document frequency)是一種用於資訊檢索與文本挖掘的常用加權技術。TF-IDF是一種統計方法,用以評估一字詞對於一個檔案集或一個語料庫中的 其中一份檔案的重要程 度。字詞的重要性隨著它在檔案中出現的次數成正比增加,但同時會隨著它在語料庫中出現的頻率成反比下降。TF-IDF加權的各種形式 常被搜尋引擎應用,作為檔案與使用者查詢之間相關程度 的度量或評級。除了TF-IDF以外,互連網上的搜尋引擎還會使用基於連結分析的評級方法,以確定檔案在搜尋結果中出現的順序。 原理:
以上式子中 ni,j 是該詞在檔案dj中的出現次 數,而分母則是在檔案dj中所 有字詞的出現次數之和。 逆向檔案頻率(inverse document frequency,IDF)是一個詞語普遍重要性的度量。某一特定詞語的IDF,可以由總檔案數目除以包含該詞語之檔案的數目,再將得到的商取對數得到:
其中
- |D|:語料庫中的檔案總數
- : 包含詞語ti的檔案數目(即的
檔案數目)
然後
某一特定檔案內的高詞語頻率,以及該詞語在整個檔案集合中的低檔案頻率,可以產生出高權重的TF-IDF。因此,TF-IDF傾向於過濾掉常見的詞 語,保留重要的詞語。 例子有很多不同的數學公式可以用來計 算TF-IDF。這邊的例子以上述的數學公式來計算。詞頻 (TF) 是一詞語出現的次數除以該檔案的總詞語數。假如一篇檔案的總詞語數是100個,而詞語“母牛”出現了3次,那麼“母牛”一詞在該檔案中的詞頻就是 0.03 (3/100)。一個計算檔案頻率 (DF) 的方法是測定有多少份檔案出現過“母牛”一詞,然後除以檔案集裡包含的檔案總數。所以,如果“母牛”一詞在1,000份檔案出現過,而檔案總數是 10,000,000份的話,其逆向檔案頻率就是 9.21 ( ln(10,000,000 / 1,000) )。最後的TF-IDF的分數為0.28( 0.03 * 9.21)。TF-IDF權重計算方法經常會和餘 弦相似性(cosine similarity)一同使用於向 量空間模型中,用以判斷兩份檔案之間的相 似性。學過向量代數的人都知道,向量實際上是多維空間中有方向的線段。如果兩個向量的方向一致,即夾角接近零,那麼這兩個向量就相近。而要確定兩 個向量方向是否一致,這就要用到餘弦定理計算向量的夾角了。 餘弦定理對我們每個人都不陌生,它描述了三角形中任何一個夾角和三個邊的關係,換句話說,給定三角形的三條邊,我們可以用餘弦定理求出三角形各個角的角 度。假定三角形的三條邊為 a, b 和 c,對應的三個角為 A, B 和 C,那麼角 A 的餘弦 -- 如果我們將三角形的兩邊 b 和 c 看成是兩個向量,那麼上述公式等價於
其中分母表示兩個向量 b 和 c 的長度,分子表示兩個向量的內積。舉一個具體的例子,假如文本 X 和文本 Y 對應向量分別是 x1,x2,...,x64000 和 y1,y2,...,y64000, 那麼它們夾角的餘弦等於,
當兩條文本向量夾角的餘弦等於一時,這兩個文本完全重複(用這個辦法可以重複資料刪除的網頁);當夾角的餘弦接近於一時,兩個文本相似,從而可以歸成一類;夾 角的餘弦越小,兩個文本越不相關。 我們在中學學習餘弦定理時,恐怕很難想象它可以用來對文本進行分類。
最後我們在對文本進行聚類時要用到資料採礦中的Kmeans演算法,聚類演算法有很多種,這篇文章主要介紹Kmeans演算法。K-MEANS演算法: k-means 演算法接受輸入量 k ;然後將n個資料對象劃分為 k個聚類以便使得所獲得的聚類滿足:同一聚類中的對象相似性較高;而不同聚類中的對象相似性較小。聚類相似性是利用各聚類中對象的均值所獲得一個“中心對 象”(引力中心)來進行計算的。 k-means 演算法的工作過程說明如下:首先從n個 資料對象任意選擇 k 個對象作為初始聚類中心;而對於所剩下其它對象,則根據它們與這些聚類中心的相似性(距離),分別將它們分配給與其最相似的(聚類中心所代表的)聚類;然 後再計算每個所獲新聚類的聚類中心(該聚類中所有對象的均值);不斷重複這一過程直到標準測度函數開始收斂為止。一般都採用均方差作為標準測度函數. k個聚類具有以下特點:各聚類本身儘可能的緊湊,而各聚類之間儘可能的分開。 處理流程: ( 1 ) 從 c 個 資料對象任意選擇 k 個 對象作為初始聚類中心; ( 2 ) 循 環( 3 ) 到( 4 ) 直到每個聚類不再發生變化為止; ( 3 ) 根 據每個聚類對象的均值(中心對象),計算每個對象與這些中心對象的距離;並根據最小距離重新對相應對象進行劃分; ( 4 ) 重 新計算每個(有變化)聚類的均值(中心對象) 到這裡這個文本聚類的小程式的核心思想就講完了,總的來說大致步驟如 下: (1)對各個文本分詞,去除停用詞 (2)通過TF-IDF方法獲得文本向量的權值(每個文本向量的維數是 相同的,是所有文本單詞的數目,這些單詞如果有重複那隻算一次,所以如果文本越多,向量的維數將會越大) (3)通過K-means演算法對文本進行分類 本人的文本小程式的結 果還算令人滿意,對下面的實驗用例的聚類結果還算是理想,但是每次執行的結果都不一樣。其實聚類的結果受好多種因素制約,提取特徵的演算法,隨機初始化函 數,kmeans演算法的實現等,都有最佳化的地方,不信你把輸入的資料的順序改改,聚類結果就不一樣了,或者把隨機數的種子變一下,結果也不一樣,k- means演算法加入一些變異係數的調整,結果也不一樣,提取特徵的地方不用TF/IDF權重演算法用別的,結果肯定也不一樣。 實驗用例: 奧運拳擊入場券基本分罄鄒市明奪冠對手浮出水面 股民要清楚自己的目的 印花稅之股民四季 杭州股民放鞭炮慶祝印花稅下調 殘疾女青年入圍奧運遊泳比賽創奧運曆史兩項第一 介紹一個ASP.netMVC系列教程 在asp.net中實現觀察者模式,或有更好的方法(續) 輸大錢的股民給我們啟迪 Asp.Net頁面執行流程分析 運動員行李將"後上先下"奧運相關人員行李實名制 asp.net控制項開發顯示控制項內容 奧運票務網上成功訂票後應及時到銀行代售網點付款 某心理健康站開張後首個諮詢者是位新股民 ASP.NET自訂控制項複雜屬性聲明持久性淺析
以下是我在網上參考的資料: http://www.cnblogs.com/onlytiancai/archive/2008/05/10/1191557.html http://hi.baidu.com/zhumzhu/blog/item/fc49ef3d19b0a4c09f3d62a3.html |