sklearn 中来自 TfIdfTransformer 的 TF-IDF 分数在相同频率的两个句子中的相同单词
TF-IDF score from TfIdfTransformer in sklearn on same word in two sentences with same frequency
如果我有两个句子包含同一个词,并且这个词在两个句子中出现的次数(频率)相同,为什么我得到的 Tf-Idf 分数不同?
考虑这个文本列表:
data = [
'Jumper in knit.',
'A sweater in knit, black sweater.',
]
并考虑我在其上安装和转换 CountVectorizer
和 TfIdfTransformer
,如
count_vec = CountVectorizer(stop_words='english')
tf_transformer = TfidfTransformer(use_idf=True)
X_counts = count_vec.fit_transform(x_data_manual)
X_tfidf = tf_transformer.fit_transform(X_counts)
然后我打印特征及其 IDF 分数:
print zip(count_vec.get_feature_names(), tf_transformer.idf_)
获得
[(u'black', 1.4054651081081644), (u'jumper', 1.4054651081081644), (u'knit', 1.0), (u'sweater', 1.4054651081081644)]
所以我们可以看到除了'knit'之外所有的代币都有相同的IDF,都是合法的。
如果我现在要求打印计数矩阵和 TF-IDF 矩阵,
print X_counts.todense()
print X_tfidf.todense()
我得到的分别是
[[0 1 1 0]
[1 0 1 2]]
(这是合法的),
[[ 0. 0.815 0.58 0. ]
[ 0.426 0. 0.303 0.852]]
现在,我认为 TF-IDF 分数将是词频(但是根据 count/raw 频率计算)和 IDF 的乘积,但我看到 'knit'尽管频率相同,但两个句子中的得分不同。
那我是什么missing/misunderstanding?
如果我有两个句子包含同一个词,并且这个词在两个句子中出现的次数(频率)相同,为什么我得到的 Tf-Idf 分数不同?
考虑这个文本列表:
data = [
'Jumper in knit.',
'A sweater in knit, black sweater.',
]
并考虑我在其上安装和转换 CountVectorizer
和 TfIdfTransformer
,如
count_vec = CountVectorizer(stop_words='english')
tf_transformer = TfidfTransformer(use_idf=True)
X_counts = count_vec.fit_transform(x_data_manual)
X_tfidf = tf_transformer.fit_transform(X_counts)
然后我打印特征及其 IDF 分数:
print zip(count_vec.get_feature_names(), tf_transformer.idf_)
获得
[(u'black', 1.4054651081081644), (u'jumper', 1.4054651081081644), (u'knit', 1.0), (u'sweater', 1.4054651081081644)]
所以我们可以看到除了'knit'之外所有的代币都有相同的IDF,都是合法的。
如果我现在要求打印计数矩阵和 TF-IDF 矩阵,
print X_counts.todense()
print X_tfidf.todense()
我得到的分别是
[[0 1 1 0]
[1 0 1 2]]
(这是合法的),
[[ 0. 0.815 0.58 0. ]
[ 0.426 0. 0.303 0.852]]
现在,我认为 TF-IDF 分数将是词频(但是根据 count/raw 频率计算)和 IDF 的乘积,但我看到 'knit'尽管频率相同,但两个句子中的得分不同。
那我是什么missing/misunderstanding?