首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Sklearn的Python LSA

使用Sklearn的Python LSA
EN

Stack Overflow用户
提问于 2015-06-02 16:21:37
回答 1查看 13K关注 0票数 8

我目前正在尝试使用Sklearn实现LSA,以便在多个文档中查找同义词。以下是我的代码:

代码语言:javascript
复制
#import the essential tools for lsa
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.decomposition import TruncatedSVD
from sklearn.metrics.pairwise import cosine_similarity
#other imports
from os import listdir

#load data
datafolder = 'data/'
filenames = []
for file in listdir(datafolder):
    if file.endswith(".txt"):
        filenames.append(datafolder+file)

#Document-Term Matrix
cv = CountVectorizer(input='filename',strip_accents='ascii')
dtMatrix = cv.fit_transform(filenames).toarray()
print dtMatrix.shape
featurenames = cv.get_feature_names()
print featurenames

#Tf-idf Transformation
tfidf = TfidfTransformer()
tfidfMatrix = tfidf.fit_transform(dtMatrix).toarray()
print tfidfMatrix.shape

#SVD
#n_components is recommended to be 100 by Sklearn Documentation for LSA
#http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.TruncatedSVD.html
svd = TruncatedSVD(n_components = 100)
svdMatrix = svd.fit_transform(tfidfMatrix)

print svdMatrix

#Cosine-Similarity
#cosine = cosine_similarity(svdMatrix[1], svdMatrix)

现在是我的问题:术语文档矩阵和tf-idf矩阵的形状是相同的,即(27,3099)。27篇文档,3099字。经过单值分解后,矩阵的形状为(27,27)。我知道你可以从2行计算余弦相似度来得到相似度,但我不认为我可以用SVD矩阵来计算文档中2个单词的相似度。

有人能给我解释一下SVD矩阵代表的是什么吗?我可以用哪种方式在我的文档中找到同义词?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-02 20:15:40

SVD是一个降维工具,这意味着它将你的特征的顺序(数量)减少到更多的representative集合。

来自github上的源代码:

代码语言:javascript
复制
def fit_transform(self, X, y=None):
    """Fit LSI model to X and perform dimensionality reduction on X.
    Parameters
    ----------
    X : {array-like, sparse matrix}, shape (n_samples, n_features)
        Training data.
    Returns
    -------
    X_new : array, shape (n_samples, n_components)
        Reduced version of X. This will always be a dense array.
    """

我们可以看到,返回的矩阵包含减少了组件数量的样本。然后,您可以使用距离计算方法来确定任意两行的相似性。

Here还给出了一个通过奇异值分解的LSA的简单示例。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30590881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档