TFIDF 矩阵上的 SVD 返回一个奇怪的形状



首要问题:我认为在模型上运行fit_transform TruncatedSVDTfidfVectorizerSparseVectors上运行将产生维度(n_samples,n_components)的组件,如此处所述(跳转到fit_transform部分)。

但是,我得到了一个形状矩阵(n_components,n_words)。

下面是重现问题的简单示例:

def build_tfidf_model(corpus):
    transformer = TfidfVectorizer(analyzer='word')
    matrix = transformer.fit_transform(corpus)
    return matrix
def svd_tfidf_matrix(matrix):
    svd = TruncatedSVD(n_components=3)
    svd.fit_transform(matrix)
    return svd.components_

corpus = ['sentence one', 'sentence two', 'another one', 'another sentence', 'two sentence', 'one sentence']
tfidf_model = build_tfidf_model(corpus)
reduced_vectors = svd_tfidf_matrix(matrix=tfidf_model)

因此,tfidf_model.shape产生(6, 4).这对我来说是有道理的。我有一个包含六个文档的语料库,总共包含 4 个不同的单词。

但是,reduced_vectors.shape产生(3,4)。我期待它的形状是(6,3).

我一定误解了fit_transform应该返回什么召唤。我可以调用什么SVD让它返回一个矩阵,其中行是文档,列是缩减空间中的要素?

如果您希望在

转换空间中表示输入,则fit_transform将返回该对象。当前,您正在调用它而不将结果分配给变量。model.components_属性仅描述如何将 tfidf 向量空间转换为 svd 空间。

def svd_tfidf_matrix(matrix):
    svd = TruncatedSVD(n_components=3)
    return svd.fit_transform(matrix)

相关内容

  • 没有找到相关文章

最新更新