首要问题:
我认为在fit_transform
上TruncatedSVD
上的模型SparseVectors
上运行TfidfVectorizer
会产生具有维度的组件(n_samples,n_components),如上所述here(跳下来)到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
让它返回一个矩阵,其中行是文档,列是缩小空间中的要素?
答案 0 :(得分:1)
如果您想要在变换空间中表示输入,那么fit_transform将返回该对象。目前您正在调用它而不将结果分配给变量。 model.components_属性仅描述了如何将tfidf向量空间转换为svd空间。
def svd_tfidf_matrix(matrix):
svd = TruncatedSVD(n_components=3)
return svd.fit_transform(matrix)