數據競賽 Task2

TF-IDF,即“詞頻-逆文本頻率”。它由兩部分組成,TF和IDF。

TF就是詞頻,我們之前做的向量化也就是做了文本中各個詞的出現頻率統計,並作爲文本特徵。

IDF反應了一個詞在所有文本中出現的頻率,如果一個詞在很多的文本中出現,那麼它的IDF值應該低。而反過來如果一個詞在比較少的文本中出現,那麼它的IDF值應該高,比如一些專業的名詞如“Machine Learning”,這樣的詞IDF值應該高。一個極端的情況,如果一個詞在所有的文本中都出現,那麼它的IDF值應該爲0。

這裏直接給出一個詞xx的IDF的基本公式如下:

                                                                                  IDF(x)=log\tfrac{N}{N(x)}

其中,N代表語料庫中文本的總數,而N(x)代表語料庫中包含詞x的文本總數。

上面的IDF公式已經可以使用了,但是在一些特殊的情況會有一些小問題,比如某一個生僻詞在語料庫中沒有,這樣我們的分母爲0, IDF沒有意義了。所以常用的IDF我們需要做一些平滑,使語料庫中沒有出現的詞也可以得到一個合適的IDF值。平滑的方法有很多種,最常見的IDF平滑後的公式之一爲:

                                                                                 IDF(x)=log\tfrac{N+1}{N(x)+1}+1

代碼:

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer

train = pd.read_csv('./data/train_set.csv', nrows=1000, index_col=None)
tfidf_model = TfidfVectorizer(max_features=10, min_df=1).fit_transform(train['article'])
print(tfidf_model.todense())

輸出:

[[0.81094896 0.03069051 0.10402692 ... 0.30445217 0.20972818 0.25778147]
 [0.55069662 0.1056866  0.24308439 ... 0.49144636 0.1564821  0.50241498]
 [0.60866709 0.11133641 0.14187214 ... 0.15113737 0.45383072 0.45390683]
 ...
 [0.60949257 0.05016933 0.09717215 ... 0.24884174 0.24379703 0.54624834]
 [0.3078827  0.         0.03272408 ... 0.15084168 0.38485338 0.52033483]
 [0.58033419 0.03980768 0.07710283 ... 0.23693705 0.56219874 0.39008669]]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章