将单词转换为潜在语义分析 (LSA) 向量
Transforming words into Latent Semantic Analysis (LSA) Vectors
有人对如何使用 Python 和 scikit-learn 将文档中的单词转换为 LSA 向量有任何建议吗?我发现这些网站 here and here 描述了如何将整个文档转换为 lsa 向量,但我对转换单个单词本身很感兴趣。
最终结果是对每个句子的所有向量(代表每个单词)求和,然后比较连续的句子以评估语义相似性。
把一个句子或一个词变成一个向量和用文档做没有什么不同,一个句子就像一个简短的文档,一个词就像一个非常非常短的文档。从第一个 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"]
然后在映射之后,结果向量将是一个包含 [=16] 的 unit vector =] 在关联的维度和 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)
有人对如何使用 Python 和 scikit-learn 将文档中的单词转换为 LSA 向量有任何建议吗?我发现这些网站 here and here 描述了如何将整个文档转换为 lsa 向量,但我对转换单个单词本身很感兴趣。
最终结果是对每个句子的所有向量(代表每个单词)求和,然后比较连续的句子以评估语义相似性。
把一个句子或一个词变成一个向量和用文档做没有什么不同,一个句子就像一个简短的文档,一个词就像一个非常非常短的文档。从第一个 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"]
然后在映射之后,结果向量将是一个包含 [=16] 的 unit vector =] 在关联的维度和 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)