2018文本智能处理挑战赛-第二天

TF-IDF原理及使用

1.TF-IDF(Term Frequency-Inverse Document Frequency, 词频-逆文本频率).

一个词语在一篇文章中出现次数越多, 同时在所有文档中出现次数越少, 越能够代表该文章.

TF(x)

TF反映了一个词在当前文章中出现的频率,如果一个词在当前的文本中多次出现,那么它的TF值应该比较高,这个词出现的频率越高,越接近1.

TF(词频) = 该文章出现此词的次数/文章的总次数

IDF(x)

IDF反应了一个词在所有文本中出现的频率,如果一个词在很多的文本中出现,那么它的IDF值应该低,比如比如单词 “is”、“and”等。而反过来如果一个词在比较少的文本中出现,那么它的IDF值应该高。比如一些专业的名词如“Machine Learning”。这样的词IDF值应该高。一个极端的情况,如果一个词在所有的文本中都出现,那么它的IDF值应该为0。

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

N 代表语料库中文本的总数,而N(x)代表语料库中包含词xx的文本总数,

上面的IDF公式已经可以使用了,但是在一些特殊的情况会有一些小问题,比如某一个生僻词在语料库中没有,这样我们的分母为0, IDF没有意义了。为了防止一些热词会有N(x)=N,导致IDF值为0, 接着TF-IDF也为0,影响整个算法的过程,所以常用的IDF我们需要做一些平滑,使语料库中没有出现的词也可以得到一个合适的IDF值。平滑的方法有很多种,最常见的IDF平滑后的公式之一为:

 

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

N 代表语料库中文本的总数,而N(x)代表语料库中包含词xx的文本总数。

TF−IDF(x)        

TF - IDF(x) = TF(x)*IDF(x)   (该词的词频(TF) 乘以 权重(IDF)

总结:

TF-IDF算法的优点是简单快速,结果比较符合实际情况。

缺点是,单纯以"词频"衡量一个词的重要性,不够全面,有时重要的词可能出现次数并不多。

而且,这种算法无法体现词的位置信息,出现位置靠前的词与出现位置靠后的词,都被视为重要性相同,这是不正确的。

(一种解决方法是,对全文的第一段和每一段的第一句话,给予较大的权重。)

2.应用

达观杯文本分类数据

from sklearn.feature_extraction.text import TfidfVectorizer
vec = TfidfVectorizer()
tfidfX_train = vec.fit_transform(X_train["word_seg"]) # 也可以用CountVectorizer+TfidfTransformer的组合
print(tfidfX_train)

 

 

 (0, 555859)	0.13626336767206662
  (0, 10960)	0.0079950202415356
  (0, 60380)	0.04774102230403789
  (0, 462401)	0.01628029763917735
  (0, 129942)	0.010093582790523453
  (0, 481177)	0.035661753236321043
  (0, 500619)	0.12223405155311452
  (0, 590042)	0.028672919391752878
  (0, 519491)	0.08577796139666678
  (0, 40910)	0.028673522485787323
  (0, 222611)	0.02247056347865981
  (0, 328449)	0.16106834459267144
  (0, 626282)	0.11479395755145853
  (0, 641245)	0.11028263921075573
  (0, 524555)	0.10328630075775601
  (0, 397724)	0.09830988691442702
  (0, 563778)	0.13810109074225443
  (0, 231370)	0.3315637062041968
  (0, 19379)	0.15115207357802815
  (0, 36284)	0.16954570349997508
  (0, 385755)	0.13129785407001648
  (0, 526982)	0.006581830547107576
  (0, 536252)	0.028896303792333967
  (0, 55857)	0.009656707143037036
  (0, 214848)	0.052272118006157685
  :	:
  (61365, 114238)	0.04736859756036005
  (61365, 123659)	0.050969811781371215
  (61365, 568756)	0.04246262332849717
  (61365, 287266)	0.04058915768431871
  (61365, 548971)	0.05790141639728023
  (61365, 584876)	0.045807817071433395
  (61365, 574990)	0.050969811781371215
  (61365, 65017)	0.05249321078115605
  (61365, 554972)	0.10454950569571177
  (61365, 427635)	0.05453930588513383
  (61365, 423523)	0.15203464207379222
  (61365, 80633)	0.057145149801019895
  (61365, 13588)	0.06344151009356525
  (61365, 498617)	0.06036211290321397
  (61365, 391043)	0.06380192229996137
  (61365, 154013)	0.05220341723482519
  (61365, 162657)	0.053111323147109056
  (61365, 168619)	0.06344151009356525
  (61365, 637784)	0.05992281376921672
  (61365, 455567)	0.05596032272833658
  (61365, 169421)	0.05729003117165101
  (61365, 591423)	0.06987982465920654
  (61365, 132000)	0.13001885541208508
  (61365, 592358)	0.15924123713106914
  (61365, 364936)	0.07962061856553457

参考博客:https://blog.csdn.net/devcy/article/details/89071572

你可能感兴趣的:(2018文本智能处理挑战赛-第二天)