【问题标题】:Make tfidf vectorizer returns as features as the number of documents使 tfidf 向量化器返回作为文档数量的特征
【发布时间】:2023-03-14 13:15:02
【问题描述】:

我正在使用适合 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]

【问题讨论】:

  • 你的词汇量是 11。这就是为什么你会得到 11 特征的特征向量。为什么你期望有 2 个功能? TF-IDF 特征是按单词计算的,而不是按文档计算的。

标签: python scikit-learn tfidfvectorizer


【解决方案1】:

似乎你想做这样的事情

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"]

X = model.fit_transform(corpus)

words = model.get_feature_names()
word2idx = dict(zip(words, range(len(words))))

print(X[:, word2idx['cat']].todense())

这口井给了你tf-idf矩阵中“猫”这个词的对应原始

【讨论】:

    【解决方案2】:

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

    根据documentation,transform 返回一个稀疏矩阵,其维度为 (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())" 你会知道整个矩阵。如前所述,将有一行(当您传入一个文档时..“cat”和 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)
    

    我希望它有所帮助。万事如意

    【讨论】:

      猜你喜欢
      • 2016-01-01
      • 2019-08-01
      • 2021-05-12
      • 2017-11-17
      • 2012-08-16
      • 1970-01-01
      • 2023-04-04
      • 2017-11-10
      • 1970-01-01
      相关资源
      最近更新 更多