1. 程式人生 > >CountVectorizer,Tf-idfVectorizer和word2vec構建詞向量的區別

CountVectorizer,Tf-idfVectorizer和word2vec構建詞向量的區別

tor 兩種方法 閾值 出現 使用 方法 詞典 idfv 情感

CountVectorizer和Tf-idfVectorizer構建詞向量都是通過構建字典的方式,比如在情感分析問題中,我需要把每一個句子(評論)轉化為詞向量,這兩種方法是如何構建的呢?拿CountVectorizer來說,首先構建出一個字典,字典包含了所有樣本出現的詞匯,每一個詞匯對應著它出現的順序和頻率。對於每一個句子來說,構建出來的詞向量的長度就是整個詞典的長度,詞向量的每一維上都代表這一維對應的單詞的頻率。同理,Tf-idf就是將頻率換成Tf權值。

CountVectorizer有幾個參數個人覺得比較重要:

max_df:可以設置為範圍在[0.0 1.0]的float,也可以設置為沒有範圍限制的int,默認為1.0。這個參數的作用是作為一個閾值,當構造語料庫的關鍵詞集的時候,如果某個詞的document frequence大於max_df,這個詞不會被當作關鍵詞。如果這個參數是float,則表示詞出現的次數與語料庫文檔數的百分比,如果是int,則表示詞出現的次數。如果參數中已經給定了vocabulary,則這個參數無效
min_df:類似於max_df,不同之處在於如果某個詞的document frequence小於min_df,則這個詞不會被當作關鍵詞
max_features:默認為None,可設為int,對所有關鍵詞的term frequency進行降序排序,只取前max_features個作為關鍵詞集

Tf-idfVectorizer也有上述參數,除此之外還有一個個人覺得能用得上的:

norm:默認為‘l2‘,可設為‘l1‘或None,計算得到tf-idf值後,如果norm=‘l2‘,則整行權值將歸一化,即整行權值向量為單位向量,如果norm=None,則不會進行歸一化。大多數情況下,使用歸一化是有必要的。(這裏的l1和l2的區別我目前也不太明白)

通過這些方法轉化的詞向量維度還是比較大的,而且是稀疏陣,為了避免過擬合等問題,所以在實際處理中需要降維處理。

word2vec的話比他們要復雜一些,是利用類似神經網絡進行訓練得到的詞向量,每一個單詞有對應的向量。一般如果像微博評論情感分析這種問題,在求評論向量的時候,可以直接對每一個詞向量求平均作為句子向量。至於word2vec實現不在這裏贅述。word2vec可以設置好詞向量維度,但是一般設在100維以上。如果樣本不算太大時,為了避免後續詞向量維度較大造成的訓練問題,可以將輸出維度設置為幾十維。

CountVectorizer,Tf-idfVectorizer和word2vec構建詞向量的區別