gpt4 book ai didi

nlp - scikit-learn TfidfVectorizer 是如何计算 TF-IDF 的

转载 作者:行者123 更新时间:2023-12-02 10:08:53 26 4
gpt4 key购买 nike

我运行以下代码将文本矩阵转换为 TF-IDF 矩阵。

text = ['This is a string','This is another string','TFIDF computation calculation','TfIDF is the product of TF and IDF']

from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(max_df=1.0, min_df=1, stop_words='english',norm = None)

X = vectorizer.fit_transform(text)
X_vovab = vectorizer.get_feature_names()
X_mat = X.todense()
X_idf = vectorizer.idf_

我得到以下输出

X_vovab =

[u'calculation',
u'computation',
u'idf',
u'product',
u'string',
u'tf',
u'tfidf']

和 X_mat =

  ([[ 0.        ,  0.        ,  0.        ,  0.        ,  1.51082562,
0. , 0. ],
[ 0. , 0. , 0. , 0. , 1.51082562,
0. , 0. ],
[ 1.91629073, 1.91629073, 0. , 0. , 0. ,
0. , 1.51082562],
[ 0. , 0. , 1.91629073, 1.91629073, 0. ,
1.91629073, 1.51082562]])

现在我不明白这些分数是如何计算的。我的想法是,对于文本[0],仅计算“字符串”的分数,并且第五列中有一个分数。但由于 TF_IDF 是词频 2 和 IDF log(4/2) 的乘积,因此是 1.39 而不是矩阵所示的 1.51。 scikit-learn 中的 TF-IDF 分数是如何计算的。

最佳答案

TF-IDF 是由 Scikit Learn 的 TfidfVectorizer 分多个步骤完成的,它实际上使用了 TfidfTransformer 并继承了 CountVectorizer。

让我总结一下它所执行的步骤,以使其更加简单:

  1. tfs由CountVectorizer的fit_transform()计算
  2. idfs由TfidfTransformer的fit()计算
  3. tfidfs由TfidfTransformer的transform()计算

可以查看源码here .

回到你的例子。以下是对词汇表第 5 个术语、第一个文档 (X_mat[0,4]) 的 tfidf 权重进行的计算:

首先,第一个文档中“字符串”的 tf:

tf = 1

第二,“字符串”的 idf,启用平滑(默认行为):

df = 2
N = 4
idf = ln(N + 1 / df + 1) + 1 = ln (5 / 3) + 1 = 1.5108256238

最后,(文档 0,特征 4)的 tfidf 权重:

tfidf(0,4) = tf * idf = 1 * 1.5108256238 = 1.5108256238

我注意到您选择不标准化 tfidf 矩阵。请记住,标准化 tfidf 矩阵是一种常见且通常推荐的方法,因为大多数模型都需要对特征矩阵(或设计矩阵)进行标准化。

TfidfVectorizer 默认情况下会对输出矩阵进行 L-2 归一化,作为计算的最后一步。对其进行归一化意味着其权重将仅在 0 到 1 之间。

关于nlp - scikit-learn TfidfVectorizer 是如何计算 TF-IDF 的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36966019/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com