一、原理
TF-IDF,也就是“词频-逆文本频率”,是文本挖掘中做分词、向量化之后的一个操作,它由两部分组成:
1、词频:某个词在当前文本中出现的次数。
T
F
i
,
j
=
n
i
,
j
∑
k
n
i
,
k
TF_{i,j}=\frac{n_{i,j}}{\sum_kn_{i,k}}
TFi,j=∑kni,kni,j
其中,i 代表第 i 个文档,分子表示的是第 i 个文档的第 j 个词在该文档中出现的次数,分母表示在该文档中所有关键词出现的次数之和。
2、IDF:有些词语虽然词频很高,但是并不重要,IDF衡量的就是一个词的重要度。IDF的基本公式:
I
D
F
(
x
)
=
l
o
g
N
N
(
x
)
IDF(x) = log\frac {N}{N(x)}
IDF(x)=logN(x)N
其中,N代表训练集中document的总数,而N(x)代表训练集中包含词x的document总数。也就是说,如果出现词x的文档越多,IDF值越小,这个词越不重要。
如果某一个生僻词没有在训练集中出现,就会导致分母为0,所以我们需要做一些平滑:
I
D
F
(
x
)
=
l
o
g
N
+
1
N
(
x
)
+
1
+
1
IDF(x) = log\frac{N+1}{N(x)+1} + 1
IDF(x)=logN(x)+1N+1+1
TF-IDF的公式为:
T
F
−
I
D
F
(
x
)
=
T
F
(
x
)
∗
I
D
F
(
x
)
TF-IDF(x) = TF(x) * IDF(x)
TF−IDF(x)=TF(x)∗IDF(x)
二、sklearn调用
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer()
re = tfidf.fit_transform(corpus)
常用参数:
ngram_range=(min_n, max_n):要提取的n-gram的n-values的下限和上限范围。
stop_words:string {‘english’}, list, or None(default),停用词
max_df: float in range [0.0, 1.0] or int, optional, 1.0 by default
min_df:float in range [0.0, 1.0] or int, optional, 1.0 by default
max_features: optional, None by default
norm:‘l1’, ‘l2’, or None,optional。范数用于标准化词条向量。None为不归一化