数据竞赛 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]]

 

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