0

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

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

4

1 回答 1

1

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

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"]然后在映射之后,结果向量将是一个单位向量,其中包含1关联维度中的 a 和0其他地方的 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)
于 2017-01-10T18:35:51.203 回答