文字的tfidf值表示

2021-09-10 08:34:48 字數 3210 閱讀 2455

做nlp的時候,如果用到tf-idf,sklearn中用countvectorizer與tfidftransformer兩個類,下面對和兩個類進行講解:

countvectorizer與tfidftransformer在處理訓練資料的時候都用fit_transform方法,在測試集用transform方法。fit包含訓練的意思,表示訓練好了去測試,如果在測試集中也用fit_transform,那顯然導致結果錯誤。

#變數:content_train 訓練集,content_test測試集

vectorizer = countvectorizer()

tfidftransformer = tfidftransformer()

#訓練 用fit_transform

count_train=vectorizer.fit_transform(content_train)

tfidf = tfidftransformer.fit_transform(count_train)

#測試count_test=vectorizer.transform(content_test)

test_tfidf = tfidftransformer.transform(count_test)

測試集的if-idf

test_weight = test_tfidf.toarray()

我們總是需要儲存tf-idf的詞典,然後計算測試集的tfidf,這裡要注意sklearn中儲存有兩種方法:pickle與joblib。我們這裡用pickle

train_content = segmentword(x_train)

test_content = segmentword(x_test)

# replace 必須加,儲存訓練集的特徵

vectorizer = countvectorizer(decode_error="replace")

tfidftransformer = tfidftransformer()

# 注意在訓練的時候必須用vectorizer.fit_transform、tfidftransformer.fit_transform

# 在**的時候必須用vectorizer.transform、tfidftransformer.transform

vec_train = vectorizer.fit_transform(train_content)

tfidf = tfidftransformer.fit_transform(vec_train)

# 儲存經過fit的vectorizer 與 經過fit的tfidftransformer,**時使用

feature_path ='models/feature.pkl'

withopen(feature_path,'wb')asfw:

pickle.dump(vectorizer.vocabulary_, fw)

tfidftransformer_path ='models/tfidftransformer.pkl'

withopen(tfidftransformer_path,'wb')asfw:

pickle.dump(tfidftransformer, fw)

注意:vectorizer 與tfidftransformer都要儲存,而且只能 fit_transform 之後儲存,表示vectorizer 與tfidftransformer已經用訓練集訓練好了。

# 載入特徵

feature_path ='models/feature.pkl'loaded_vec = countvectorizer(decode_error="replace", vocabulary=pickle.load(open(feature_path,"rb")))

# 載入tfidftransformer

tfidftransformer_path ='models/tfidftransformer.pkl'tfidftransformer = pickle.load(open(tfidftransformer_path,"rb"))

#測試用transform,表示測試資料,為list

test_tfidf = tfidftransformer.transform(loaded_vec.transform(test_content))

# 對每條分詞後的文字表示成tf-idf向量(去除停用詞之後的案由文字)

vectorizer = tfidfvectorizer(stop_words=stpwrdlst,use_idf=true,smooth_idf=true)

words_sets = vectorizer.get_feature_names()

# 文字的詞彙表

print('從訓練集中提取出來的文字的詞彙表:',words_sets)

print('資料文字的詞彙表長:',len(words_sets))

### 訓練 訓練集:train_texts

train_tfidf = vectorizer.fit_transform(train_texts)

train_x = train_tfidf.toarray() # 結果是乙個矩陣形式

# train_tfidf結果是乙個tf-idf的矩陣,上面兩個返回同一矩陣

print('train_tfidf的結果形式:',train_x.shape)

### 測試 測試集:test_texts

test_tfidf = vectorizer.transform(test_texts).toarray()
## 分類器訓練

clf1 = multinomialnb(alpha=0.001).fit(train_tfidf,train_y)

train_predicted = clf1.predict(train_tfidf)

train_predicted_proba = clf1.predict_proba(train_tfidf)

## 分類器測試

test_predicted = clf1.predict(test_tfidf)

文字向量表示及TFIDF詞彙權值

文字相似計算是進行文字聚類的基礎,和傳統結構化數值資料的聚類方法類似,文字聚類是通過計算文字之間 距離 來表示文字之間的相似度並產生聚類。文字相似度的常用計算方法 有餘弦定理和jaccard係數。但是文字資料與普通的數值資料或類屬資料不同,文字資料是一種半結構化資料,在進行文字挖掘之前必須要對文字資...

文字向量表示及TFIDF詞彙權值

文字相似計算是進行文字聚類的基礎,和傳統結構化數值資料的聚類方法類似,文字聚類是通過計算文字之間 距離 來表示文字之間的相似度並產生聚類。文字相似度的常用計算方法有餘弦定理和jaccard係數。但是文字資料與普通的數值資料或類屬資料不同,文字資料是一種半結構化資料,在進行文字挖掘之前必須要對文字資料...

TF IDF 文字的一種向量表示

tf idf是term frequency inverse document frequency的簡稱。她是一種非常常見的用於將文字轉化為有意義的數字表示的演算法。這個技術被廣泛的應用與nlp的各個方面。本文將會介紹怎樣計算和應用tf idf。為了將機器學習演算法或統計技術應用到任何形式的文字上,應...