以下代码使用spaCy 词向量来查找与给定词最相似的 20 个词,方法是首先计算词汇表中所有词(超过一百万)的余弦相似度,然后对该最相似词的列表进行排序。
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 的向量空间中彼此最近。
在这方面的任何帮助表示赞赏。