【问题标题】:Transforming words into Latent Semantic Analysis (LSA) Vectors将单词转换为潜在语义分析 (LSA) 向量
【发布时间】:2017-01-10 17:11:25
【问题描述】:

有人对如何使用 Python 和 scikit-learn 将文档中的单词转换为 LSA 向量有任何建议吗?我发现这些网站 herehere 描述了如何将整个文档转换为 lsa 向量,但我对转换单个单词本身感兴趣。

最终结果是将每个句子的所有向量(代表每个单词)相加,然后比较连续的句子以评估语义相似度。

【问题讨论】:

    标签: python vector scikit-learn tf-idf lsa


    【解决方案1】:

    将句子或单词转换为向量与将文档转换为向量没有什么不同,一个句子就像一个短文档,一个单词就像一个非常非常短的文档。从第一个 link 开始,我们就有了将文档映射到向量的代码:

    def makeVector(self, wordString):
            """ @pre: unique(vectorIndex) """
    
            #Initialise vector with 0's
            vector = [0] * len(self.vectorKeywordIndex)
            wordList = self.parser.tokenise(wordString)
            wordList = self.parser.removeStopWords(wordList)
            for word in wordList:
                    vector[self.vectorKeywordIndex[word]] += 1; #Use simple Term Count Model
            return vector
    

    同样的函数可用于将一个句子或单个单词映射到一个向量。只需将它们传递给这个函数。一句话,wordList 的结果将是一个包含单个值的数组,例如:["word"],然后在映射之后,结果向量将是一个 unit vector,其中包含关联维度中的 1 和 @987654328 @s 其他地方。

    例子:

    vectorKeywordIndex(代表词汇表中的所有单词):

    {"hello" : 0, "world" : 1, "this" : 2, "is" : 3, "me" : 4, "answer" : 5}
    

    文档"this is me":[0, 0, 1, 1, 1, 0]

    文档"hello answer me"[1, 0, 0, 0, 1, 1]

    "hello"[1, 0, 0, 0, 0, 0]

    "me"[0, 0, 0, 0, 1, 0]

    之后,可以使用以下代码通过余弦相似度等几个标准评估相似度:

    def cosine(vector1, vector2):
            """ related documents j and q are in the concept space by comparing the vectors using the code:
                    cosine  = ( V1 * V2 ) / ||V1|| x ||V2|| """
            return float(dot(vector1,vector2) / (norm(vector1) * norm(vector2)))
    

    或使用 scikit-learn 的 sklearn.metrics.pairwise.cosine_similarity

    from sklearn.metrics.pairwise import cosine_similarity
    sim = cosine_similarity(x, y)
    

    【讨论】:

      猜你喜欢
      • 2013-01-19
      • 2017-08-05
      • 2014-01-26
      • 1970-01-01
      • 2019-07-02
      • 2019-02-11
      • 2011-10-26
      • 1970-01-01
      • 2016-10-15
      相关资源
      最近更新 更多