Python 如何使用经过训练的SVD模型获取单词的向量表示

Python 如何使用经过训练的SVD模型获取单词的向量表示,python,scikit-learn,svd,lsa,Python,Scikit Learn,Svd,Lsa,作为构建LSA模型工作的一部分,我已经使用400个文档对SVD模型进行了培训(拟合和转换)。这是我的密码: 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 = Pipelin

作为构建LSA模型工作的一部分,我已经使用400个文档对SVD模型进行了培训(拟合和转换)。这是我的密码:

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_模型找到单词的向量


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

你几乎做到了,你只需要将句子转换成向量

sentence_vector = lsa_pipeline.transform(sentence)
然后求出句子向量与文档矩阵之间的距离

同样,你也可以使用两个句子向量

参考资料


您将要查看
lsa\u模型组件
。另外,你好,来自DC.:-)@埃里普,你好,来自华盛顿巴德!我认为lsa_模型是一个数组,它没有一个名为“components_u”的属性哦,我看错了!我还以为你有
fit
模型,而不是
fit\u transform
。谢谢穆罕默德。这个答案从技术上解决了我的问题,但可能不是问题的确切答案。我仍然试图分别找到每个单词的向量。有时,您可能希望以不同的方式将句子转换为向量。欢迎:)但如果您希望使用相同的模型进行预测,您可能希望以相同的方式更改句子,否则结果将是错误的。我的意思是,如果你不像创建模型时那样将单词转换成向量,那么它在算法上是错误的。我认为word2vec、glove、fasttext可能比LSA更适合这份工作,如果你想继续你的想法的话。如果这个答案对你有帮助,请随意投票或将其标记为正确答案:)
from sklearn.metrics import pairwise_distances
dist_per_doc_matrix = pairwise_distances(sentence_vector,lsa_model, metric= 'euclidean')