将单词转换为潜在语义分析(LSA)向量

时间:2017-01-10 17:11:25

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

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

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

1 个答案:

答案 0 :(得分:1)

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

wordList

可以使用相同的函数将句子或单个单词映射到向量。只需将它们传递给此功能即可。对于一个单词,["word"]的结果将是一个包含单个值的数组,如:1,然后在映射之后,结果向量将是unit vector,其中包含{{1}相关维度和其他地方的0

示例:

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's sklearn.metrics.pairwise.cosine_similarity

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