CountVectorizer,Tf-idfVectorizer和word2vec构建词向量的区别
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維以上。如果樣本不算太大時,為了避免后續詞向量維度較大造成的訓練問題,可以將輸出維度設置為幾十維。
?
轉載于:https://www.cnblogs.com/dylan9/p/8679273.html
總結
以上是生活随笔為你收集整理的CountVectorizer,Tf-idfVectorizer和word2vec构建词向量的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: P2253 好一个一中腰鼓!
- 下一篇: Docker服务器的图形显示方案