CountVectorizer,Tf-idfVectorizer和word2vec构建词向量的区别
CountVectorizer和Tf-idfVectorizer構(gòu)建詞向量都是通過構(gòu)建字典的方式,比如在情感分析問題中,我需要把每一個句子(評論)轉(zhuǎn)化為詞向量,這兩種方法是如何構(gòu)建的呢?拿CountVectorizer來說,首先構(gòu)建出一個字典,字典包含了所有樣本出現(xiàn)的詞匯,每一個詞匯對應(yīng)著它出現(xiàn)的順序和頻率。對于每一個句子來說,構(gòu)建出來的詞向量的長度就是整個詞典的長度,詞向量的每一維上都代表這一維對應(yīng)的單詞的頻率。同理,Tf-idf就是將頻率換成Tf權(quán)值。
?
CountVectorizer有幾個參數(shù)個人覺得比較重要:
max_df:可以設(shè)置為范圍在[0.0 1.0]的float,也可以設(shè)置為沒有范圍限制的int,默認為1.0。這個參數(shù)的作用是作為一個閾值,當構(gòu)造語料庫的關(guān)鍵詞集的時候,如果某個詞的document frequence大于max_df,這個詞不會被當作關(guān)鍵詞。如果這個參數(shù)是float,則表示詞出現(xiàn)的次數(shù)與語料庫文檔數(shù)的百分比,如果是int,則表示詞出現(xiàn)的次數(shù)。如果參數(shù)中已經(jīng)給定了vocabulary,則這個參數(shù)無效
min_df:類似于max_df,不同之處在于如果某個詞的document frequence小于min_df,則這個詞不會被當作關(guān)鍵詞
max_features:默認為None,可設(shè)為int,對所有關(guān)鍵詞的term frequency進行降序排序,只取前max_features個作為關(guān)鍵詞集
?
Tf-idfVectorizer也有上述參數(shù),除此之外還有一個個人覺得能用得上的:
norm:默認為'l2',可設(shè)為'l1'或None,計算得到tf-idf值后,如果norm='l2',則整行權(quán)值將歸一化,即整行權(quán)值向量為單位向量,如果norm=None,則不會進行歸一化。大多數(shù)情況下,使用歸一化是有必要的。(這里的l1和l2的區(qū)別我目前也不太明白)
通過這些方法轉(zhuǎn)化的詞向量維度還是比較大的,而且是稀疏陣,為了避免過擬合等問題,所以在實際處理中需要降維處理。
?
word2vec的話比他們要復(fù)雜一些,是利用類似神經(jīng)網(wǎng)絡(luò)進行訓(xùn)練得到的詞向量,每一個單詞有對應(yīng)的向量。一般如果像微博評論情感分析這種問題,在求評論向量的時候,可以直接對每一個詞向量求平均作為句子向量。至于word2vec實現(xiàn)不在這里贅述。word2vec可以設(shè)置好詞向量維度,但是一般設(shè)在100維以上。如果樣本不算太大時,為了避免后續(xù)詞向量維度較大造成的訓(xùn)練問題,可以將輸出維度設(shè)置為幾十維。
?
轉(zhuǎn)載于:https://www.cnblogs.com/dylan9/p/8679273.html
總結(jié)
以上是生活随笔為你收集整理的CountVectorizer,Tf-idfVectorizer和word2vec构建词向量的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: P2253 好一个一中腰鼓!
 - 下一篇: Docker服务器的图形显示方案