如何使用训练的SVD模型获得单词的向量表示

时间:2018-06-18 18:12:29

标签: python scikit-learn svd lsa

我使用400个文档训练(拟合和转换)SVD模型,这是我构建LSA模型的一部分。这是我的代码:

tfidf_vectorizer = sklearn.feature_extraction.text.TfidfVectorizer(stop_words='english', use_idf=True, smooth_idf=True)
svd_model = TruncatedSVD(n_components=100, n_iter=10)
lsa_pipeline = Pipeline([('tfidf', tfidf_vectorizer), ('svd', svd_model)])
lsa_model = lsa_pipeline.fit_transform(all_docs)

现在,我想测量两个句子(无论是来自同一个文档集还是全新的)的相似性,我需要将这两个句子转换为向量。我想以自己的方式进行转换,我需要在句子中包含每个单词的向量。

如何使用我已经训练的 lsa_model 找到单词的向量?

而且,更广泛地说,使用一组文档构建LSA模型然后使用相同的模型来测量同一文档集合中某些句子的相似性是否有意义?

1 个答案:

答案 0 :(得分:2)

你几乎就在那里,你只需要将句子转换成向量

sentence_vector = lsa_pipeline.transform(sentence)

然后找到句子向量和文档矩阵using any metric of your choice

之间的距离
from sklearn.metrics import pairwise_distances
dist_per_doc_matrix = pairwise_distances(sentence_vector,lsa_model, metric= 'euclidean')

同样,您也可以使用cosine similarity两个句子向量。

参考