首页 > 解决方案 > 使 tfidf 向量化器返回作为文档数量的特征

问题描述

我正在使用适合N个文档的 Sklearn TfidfVectorizer,并且我想根据每个文档中的 tfidf 分数获得一个单词的向量表示。

一些代码可能会有所帮助:

from sklearn.feature_extraction.text import TfidfVectorizer

model = TfidfVectorizer()

corpus = ["first corpus with words like dog and cat", "second corpus with words like car and plane"]

model.fit(corpus)

model.transform(["cat"]).toarray().shape

>> (1, 11)

为什么我得到 11 个功能?我希望有 2 个功能,因为我只为模型安装了两个文档。

所以我不会是这样的:

[0, tfidfscore]

标签: pythonscikit-learntfidfvectorizer

解决方案


我阅读了文档,对 TF-IDF 有了基本的了解,我可以得出一个结论。这不是专家意见。

根据文档,变换返回一个稀疏矩阵,其维度为 (n_samples, n_features)。

返回 X:稀疏矩阵,[n_samples, n_features]

Tf-idf 加权文档术语矩阵。

现在你的 n_samples 是 1 并且 n_features 来自模型......它计算为等于 11。

transform 返回的是 TD-IDF 加权Document-term-matrix,其中每一行对应于文档,每一列是特征。

您可以通过说“print(model.get_feature_names())”来了解您的功能。在您的情况下,它将给出以下输出。

['and', 'car', 'cat', 'corpus', 'dog', 'first', 'like', 'plane', 'second', 'with', 'words']

如您所见,有 11 个功能。现在 cat 是频率必须很高的第三个元素。如果你说 "print(model.transform(["cat"]).toarray())" 你会知道整个矩阵。如前所述,将有一行(当您传入一个文档时..“猫”和 11 列(由于上述原因)。正如您在下面的第三列中看到的那样,频率最高为 1.00。

[[0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]]

我对您的代码进行了最小的更改,目的是希望它能帮助您。

from sklearn.feature_extraction.text import TfidfVectorizer

model = TfidfVectorizer()

corpus = ["first corpus with words like dog and cat", "second corpus with words like car and plane"]

model.fit(corpus)

Returned_Features = model.get_feature_names()
Returned_TF_IDF_DTM = model.transform(["cat"]).toarray()

print(Returned_Features)
print(Returned_TF_IDF_DTM)

我希望它有所帮助。一切顺利


推荐阅读