gpt4 book ai didi

vocabulary - 我可以在 spaCy 中修剪解析器的词汇表吗?

转载 作者:行者123 更新时间:2023-12-04 17:54:59 30 4
gpt4 key购买 nike

以下代码使用spaCy word vectors通过首先计算词汇表(超过一百万)中所有单词的余弦相似度,然后对最相似单词列表进行排序,找到与给定单词最相似的 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 的向量空间中彼此最接近。

在此方面的任何帮助表示赞赏。

最佳答案

SpaCy 文档说:

The default English model installs vectors for one million vocabulary entries, using the 300-dimensional vectors trained on the Common Crawl corpus using the GloVe algorithm. The GloVe common crawl vectors have become a de facto standard for practical NLP.

所以你可以只加载 GloVe vectors使用 Gensim。我不确定你是否可以直接加载它们,或者你是否必须使用 this script .

如果您已经将词向量加载到 Gensim 中作为 model,您可以简单地使用 word_vectors.similarity('woman', 'man') 来获得两者之间的相似度两个字。如果你有一个单词列表,你可以这样做:

def most_similar(word, candidates, model, n=20):
"Get N most similar words from a list of candidates"
similarities = [(model.similarity(word,candidate), candidate)
for candidate in candidates]
most_similar_words = sorted(similarities, reverse=True)[:n]
only_words = [w for sim,w in most_similar_words]
return only_words

关于vocabulary - 我可以在 spaCy 中修剪解析器的词汇表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41090288/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com