次のコードは、spaCy 単語ベクトルを使用して、最初に語彙内のすべての単語 (100 万を超える) のコサイン類似度を計算し、次にこの最も類似した単語のリストを並べ替えることによって、特定の単語に最も類似した 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 のベクトル空間で互いに最も近いかをすばやく調べられるようにしたいと考えています。
この面での助けに感謝します。