一. 什么是TF-IDF
TF-IDF(Term Frequency-Inverse Document Frequency, 词频-逆文件频率).
字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
-
词频 (term frequency, TF)
指的是某一个给定的词语在该文件中出现的次数。这个数字通常会被归一化(一般是词频除以文章总词数),
以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词频,而不管该词语重要与否。 -
逆向文件频率 (inverse document frequency, IDF) IDF的主要思想是:如果包含词条t的文档越少,
IDF越大,则说明词条具有很好的类别区分能力。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。
某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。
二、sklearn中的TfidfVectorizer
代码示例:
#coding=utf-8
from sklearn.feature_extraction.text import TfidfVectorizer
document = ["I love natural language processing.",
"I love artificial intelligence."]
tfidf_model = TfidfVectorizer().fit(document)
sparse_result = tfidf_model.transform(document)
print(sparse_result)
结果:
(0, 5) 0.534046329052269
(0, 4) 0.534046329052269
(0, 3) 0.37997836159100784
(0, 2) 0.534046329052269
(1, 3) 0.4494364165239821
(1, 1) 0.6316672017376245
(1, 0) 0.6316672017376245
三、sklearn:点互信息和互信息
1、点互信息PMI
- 机器学习相关文献里面,经常会用到点互信息PMI(Pointwise Mutual Information)这个指标来衡量两个事物之间的相关性(比如两个词)
其原理很简单,公式如下:
- 在概率论中,我们知道,如果x跟y不相关,则p(x,y)=p(x)p(y)。二者相关性越大,则p(x, y)就相比于p(x)p(y)越大。用后面的式子可能更
好理解,在y出现的情况下x出现的条件概率p(x|y)除以x本身出现的概率p(x),自然就表示x跟y的相关程度。
举个自然语言处理中的例子来说,我们想衡量like这个词的极性(正向情感还是负向情感)。我们可以预先挑选一些正向情感的词,比如good。然后我们算like跟good的PMI。
2、互信息MI
- 点互信息PMI其实就是从信息论里面的互信息这个概念里面衍生出来的。
互信息即:
- 其衡量的是两个随机变量之间的相关性,即一个随机变量中包含的关于另一个随机变量的信息量。所谓的随机变量,即随机试验结果的量的表示,可以简单理解为按照一个概率分布进行取值的变量,比如随机抽查的一个人的身高就是一个随机变量。可以看出,互信息其实就是对X和Y的所有可能的取值情况的点互信息PMI的加权和。因此,点互信息这个名字还是很形象的。
3、sklearn示例
from sklearn import metrics as mr
mr.mutual_info_score(label,x)
label、x为list或array。
计算x和label的互信息。