當前位置:
首頁 > 最新 > 文本聚類系列教程:(三)構建詞袋空間VSM(Vector Space Model

文本聚類系列教程:(三)構建詞袋空間VSM(Vector Space Model

咱們今天先聊個概念吧,著名的聚類假設,這也是文本聚類的依據,內容如下:該假設認為,同類的文檔相似度較大,而不同類的文檔相似度較小。


概念:

對於上述概念,也就是做文本聚類的基礎,如果不相關的文檔反而相似度高,我們便無法做文本聚類。

接下來再說VSM(Vector Space Model),對於VSM的定義,我在網上搜羅了些資料,如下所示:

Vector space model (or term vector model) is an algebraic model for representing text documents (and any objects, in general) as vectors of identifiers, such as, for example, index terms. It is used in information filtering, information retrieval, indexing and relevancy rankings. Its first use was in the SMART Information Retrieval System.

A document is represented as a vector. Each dimension corresponds to a separate term. If a term occurs in the document, its value in the vector is non-zero. Several different ways of computing these values, also known as (term) weights, have been developed. One of the best known schemes is tf-idf weighting.

The definition of term depends on the application. Typically terms are single words, keywords, or longer phrases. If the words are chosen to be the terms, the dimensionality of the vector is the number of words in the vocabulary (the number of distinct words occurring in the corpus).

拙劣的翻譯:

向量空間模型是用來表示文本文檔(通常也包含一些對象)的特徵向量的代數模型,例如索引詞項。它被應用於信息過濾、信息檢索、索引和相關度計算。這個模型最早被應用於SMART信息檢索系統。

一個文本文檔表示一個向量。每一個維度相當於一個單獨的詞項(term)。如果一個詞項(term)出現在一個文檔中,那麼它在表示該文檔的向量中對應項不為0.有一些計算這些詞項(term)權重的方法被逐漸提出來,其中最著名的方法就是tf-idf權重計算方法。

對於詞項(term)的定義依賴於應用。一般而言,詞項(term)可以是單詞、關鍵字、或者長短語。如果單詞作為詞項(term),那麼向量中的維度就是辭彙表中的單詞的個數(出現在文檔全集中所有不同的單詞的數量)。

小荔枝:

舉個荔枝吧 ,方便理解上述的概念。首先假設有這樣兩個文本

1.

2.

分詞結果為: 和 統計所有文檔的詞集合: ,按照1983停用詞去除停用詞後結果為:

我們對這兩個文本構建向量,結果如下

相信你已經對VSM的認識有了一個大致的輪廓,但是細心的你也可能發現了,我們在上述的例子中計算term值的方法僅僅只是計數,這樣的term值是否有意義呢?我們是否能用這樣的方法直接進行接下來的計算呢?對於前一個問題,答案是肯定的。不管在此基礎上做什麼樣的改進,我們最基礎的就是統計單詞出現的次數,那就讓我們先把上述的代碼實現一下吧(與該文件同目錄下有個名為txt1的文件夾,裡面有1.txt和2.txt兩個文件,內容分別是上述所說的兩個文檔,我們在上次RmStopWord.py的基礎上再做修改):

運行結果:

分析:

上述結果不言而喻,那麼我們接著討論,顯而易見,我既然提出了第二個疑問就一定有它被提出的道理,僅僅只計算term值的方法顯然存在問題,我們再隨便舉個例子,文本1中 只出現了1次,但是文本1中只有3個單詞,文本2中 出現了10次但是文本2中有1000個單詞,那我們用上述的方法顯然不合適。所以接下來我們便要講一個最著名的方法tf-idf計算權值的方法。

TF-IDF(term frequency–inverse document frequency)

維基百科和百度百科上的講的很清楚,這裡截取概念方便大家閱讀,更詳細的內容請參考前面所說的兩個百科。

TF-IDF是一種統計方法,用以評估一個詞(term)對於一個文件集或者一個語料庫中的一份文件的重要程度。一個詞(term)的重要性隨著它在文件中出現的次數成正比增加,但同時會隨著它在語料庫中出現的頻率成反比下降。

原理:

TF-IDF的主要思想是:如果某個詞或短語(term)在一篇文章中出現的頻率TF高,並且在其他文章中很少出現,則認為此詞或者短語(term)具有很好的類別區分能力,適合用來分類。如果包含詞條term的文檔越少,也就是n越小,則IDF越大,則說明詞條term也具有很好的類別區分能力。

思考:

現在想一下我們剛才提出的問題,針對我們上述的問題:同一詞語在長文件里可能會比短文件有更高的詞數,而不管該詞重要與否。那麼我們對詞數做歸一化就可以了,而TF就幫我們做了這樣的事。那麼我們就先給出TF的運算公式吧。

TF公式解讀:上式中分子是該詞在文件中出現的次數,而分母則是該詞在文件中出現的詞數之和。

我們再講個小問題:

如果某一類文檔C中包含詞條t的文檔數為m,而其他類包含t的文檔總數為k,顯然所有包含t的文檔數n=m+k,而當m變大的時候,n也變大,這是後按照IDF的計算方法計算得到的IDF值會變小,也就相對應的說明該詞條t類別區分能力不強。但是實際上,如果一個詞條在一個類的文件中頻繁出現,則說明該詞條能夠很好的代表這個類的文本的特徵,這樣的詞條應該給它們賦予較高的權重,並選來作為該類文本的特徵詞以區別與其它類文檔。其實這就是IDF的不足

那麼接下來就該給出IDF的計算公式了:

IDF公式解讀:

|D|:語料庫中文件的總數

分子為包含該詞條t的文件數目,如果該詞條不在語料庫中,就會導致分母為零,因此一般使用1。

那就接著我們上述代碼,運用TF-IDF,把對應的矩陣的單純計數轉換成權值計算吧:

結果:

本次的學習會用到很多numpy的知識,請大家自行查閱。如有興趣,請思考為什麼在新的權值矩陣中「來到」一詞的權重變成了0。感謝大家的閱讀~


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 weafteam 的精彩文章:

TAG:weafteam |