以下代码使用 spaCy词向量,通过首先计算词汇表中所有单词的余弦相似度,然后对最相似单词列表进行排序,找到给定单词的前20个最相似单词。
我想知道的是,是否有一种方法可以将spaCy的词汇仅限于给定列表中出现的单词,我希望这样可以极大地减少排序操作的成本。
明确一点,我想传入仅有几个单词的列表,或者是给定文本中的单词,并能够快速查找在spaCy向量空间中最接近彼此的这些单词。
对此方面的任何帮助都将不胜感激。
parser = English()
# access known words from the parser's vocabulary
current_word = parser.vocab[word]
# cosine similarity
cosine = lambda v1, v2: dot(v1, v2) / (norm(v1) * norm(v2))
# gather all known words, take only the lowercased versions
allWords = list({w for w in parser.vocab if w.has_vector and w.orth_.islower() and w.lower_ != word})
# sort by similarity
allWords.sort(key=lambda w: cosine(w.vector, current_word.vector))
allWords.reverse()
print("Top 20 most similar words to %s:") % word
for word in allWords[:20]:
print(word.orth_)
我想知道的是,是否有一种方法可以将spaCy的词汇仅限于给定列表中出现的单词,我希望这样可以极大地减少排序操作的成本。
明确一点,我想传入仅有几个单词的列表,或者是给定文本中的单词,并能够快速查找在spaCy向量空间中最接近彼此的这些单词。
对此方面的任何帮助都将不胜感激。