为什么一个文档的 tfidf 不为零?

数据挖掘 nlp tfidf
2022-03-06 07:22:30

我是 nlp 的新手。最近想做一些小的nlp任务,遇到了奇怪的事情。那就是我已经运行了以下代码

from sklearn.feature_extraction.text import TfidfVectorizer

docs = ["strange event"]
tfIdf_vectorizer = TfidfVectorizer(analyzer='word', tokenizer=word_tokenize,
                                   stop_words=stopwords, ngram_range=(1, 2), use_idf=True,
                                   norm='l2')
tfidf = tfIdf_vectorizer.fit_transform(docs)
print(tfidf)

并查看以下结果

  (0, 2)    0.5773502691896258
  (0, 0)    0.5773502691896258
  (0, 1)    0.5773502691896258

一个文档的 tfidf 不应该为零吗?(因为 IDF=log(1/1)=0)

1个回答

这是因为,默认情况下 sklearn 的 TF-IDF 矢量化器将对结果进行归一化。请参阅用户指南的Tf-IDF 术语权重部分。对于你的例子,

n = 1
tf = 3
df = 1
idf = np.log(n/df)+1 = 1

您有 3 个频率相同的术语。因此,L2 归一化 tf-idf 计算为

abs(1)/sqrt(1+1+1) = 0.577