文字向量化 詞袋模型 TF IDF

2021-10-05 20:07:06 字數 3003 閱讀 7210

對文字資料進行建模,有兩個問題需要解決:

模型進行的是數**算,因此需要數值型別的資料,而文字不是數值型別資料。

模型需要結構化資料,而文字是非結構化資料。

將文字轉換為數值特徵向量的過程,稱為文字向量化。將文字向量化,可以分為如下步驟:

對文字分詞,拆分成更容易處理的單詞。

將單詞轉換為數值型別,即使用合適的數值來表示每個單詞。

同樣,需要注意的是,文字是非結構化資料,在向量化過程中,需要將其轉換為結構化資料。

詞袋模型,直觀上理解,就是乙個裝滿單詞的袋子。實際上,詞袋模型是一種能夠將文字向量化的方式。在詞袋模型中,每個文件為乙個樣本,每個不重複的單詞為乙個特徵,單詞在文件**現的次數作為特徵值。

運用詞袋模型,我們可以將文字資料轉換為結構化資料。

from sklearn.feature_extraction.text import countvectorizer

count = countvectorizer(

)docs =

['where there is a will, there is a way.'

,'there is no royal road to learning.',]

bag = count.fit_transform(docs)

#bag是乙個稀疏矩陣。

print

(bag)

#呼叫稀疏矩陣的toarray方法,將稀疏矩陣轉換為ndarray物件(稠密矩陣)。

#獲取每個特徵對應的單詞

print

(count.get_feature_name())

#輸出單詞與編號的對映關係

print

(count.vocabulary_)

需要留意,countvectorizer只會對字元長度不小於2的單詞進行處理,如果單詞長度小於2(單詞僅有乙個字元),則會忽略該單詞,如上的單詞「a」,就沒有作為特徵進行向量化。

經過上面的訓練後,就可以對未知文件進行向量化了,但向量化的特徵僅為訓練集**現的單詞特徵,如果未知文件中的單詞不在訓練集中,則在詞袋模型中無法體現。

#對未知文件進行向量化處理,

test_docs =

['while there is life there is hope.'

,'no pain, no gain.'

]t = count.transform(test_docs)

print

(t.toarray(

))

如上可以看到,在訓練集中沒有出現的詞彙,在未知文件的轉換結果中無法體現。

通過countvector類,我們能夠將文件向量化處理。在向量化過程中,我們使用每個文件中單詞的頻數作為對應特徵的取值。這是合理的,因為單詞出現的次數越多,我們就可以認為該單詞理應比出現次數少的單詞更加重要。

當然,這也是相對的,有些單詞,我們不能僅以當前文件中的頻數來進行衡量,還要考慮其在語料庫中,在其他文件**現的次數。因為有些單詞是非常常見的,在語句中可能頻繁出現,對於這樣的單詞,就應該降低其重要性。

tf-idf可以用來調整單詞在文件中的權重。其由兩部分組成:

tf(term-frequency)詞頻,指乙個單詞在文件**現的次數。

idf(inverse document-frequency)逆文件頻率。

計算方式為:

說明:sklearn庫中實現的tf-id轉換,與標準的公式略有不同。tf-id結果會使用l1或l2範數進行標準化(規範化)處理。

from sklearn.feature_extraction.text import tfidftransformer

count = countvectorizer(

)docs =

['where there is a will, there is a way.'

,'there is no royal road to learning.',]

bag = count.fit_transform(docs)

tfidf = tfidftransformer(

)t = tfidf.fit_transform(bag)

#tfidftransformer轉換的結果也是稀疏矩陣。

此外,sklearn中,同時提供了乙個類tfidfvectorizer,可以直接將文件轉換為tf-idf值,也就是該類相當於整合了countvectorizer與tfidftransformer兩個類的功能。

可以看到,結果與使用countvectorizer與tfidftransformer兩個類轉換的結果是一樣的。

文字預處理 詞袋模型與向量化

一般對文字預處理或者叫做特徵提取,首先是要分詞,分詞之後就是向量化,也就是訓練詞向量 其實就是將詞和詞頻對應起來,做成矩陣向量的形式 下面我們要講的就是向量化。講向量化之前,先講一下詞袋模型 bag of words,bow 詞袋模型假設我們不考慮文字中詞與詞之間的上下文關係,僅僅考慮所有詞的權重,...

文字向量化 從向量到向量(tfidf)

corpus dictionary.doc2bow text for text in texts tfidf models.tfidfmodel corpus 第一步 初始化乙個模型 doc bow 0,1 1,1 print tfidf doc bow 第二步 用模型轉換向量 0,0.707106...

文字向量化

table of contents概述 word2vec nnlm c wcbow and skip gram doc2vec str2vec 文字表示是自然語言處理中的基礎工作,文字表示的好壞直接影響到整個自然語言處理系統的效能。文字向量化就是將文字表示成一系列能夠表達文字語義的向量,是文字表示的...