gpt4 book ai didi

python - 列出预训练模型中 spaCy 中最相似的词

转载 作者:行者123 更新时间:2023-12-03 18:20:58 26 4
gpt4 key购买 nike

使用 Gensim,在我训练自己的模型后,我可以使用 model.wv.most_similar('cat', topn=5)并获取最接近 cat 的 5 个单词的列表在向量空间。例如:

from gensim.models import Word2Vec
model = Word2Vec.load('mymodel.model')

In: model.wv.most_similar('cat', topn=5)
Out: ('kitten', .99)
('dog', .98)
...
使用 spaCy,根据 documentation , 我可以:
import spacy

nlp = spacy.load('en_core_web_md')
tokens = nlp(u'dog cat banana')

for token1 in tokens:
for token2 in tokens:
print(token1.text, token2.text, token1.similarity(token2))
它给出了指定字符串中标记的相似性。但是通过文档和搜索,我无法弄清楚是否有一种 gensim 类型的方式来列出带有 nlp = spacy.load('en_core_web_lg') 的预加载模型的所有相似词。或 nlp = spacy.load('en_vectors_web_lg') .有没有办法做到这一点?

最佳答案

我使用了安迪的回应,它工作正常但速度很慢。为了解决这个问题,我采用了下面的方法。
SpaCy 在后端使用余弦相似度来计算 .similarity .因此,我决定更换word.similarity(w)与其优化的对应物。我使用的优化方法是 cosine_similarity_numba(w.vector, word.vector) ,如下所示,它使用 Numba 库来加速计算。您应该用下面的行替换 most_similar 方法中的第 12 行。

by_similarity = sorted(queries, key=lambda w: cosine_similarity_numba(w.vector, word.vector), reverse=True)
该方法的速度提高了 2-3 倍 这对我来说是必不可少的。
from numba import jit

@jit(nopython=True)
def cosine_similarity_numba(u:np.ndarray, v:np.ndarray):
assert(u.shape[0] == v.shape[0])
uv = 0
uu = 0
vv = 0
for i in range(u.shape[0]):
uv += u[i]*v[i]
uu += u[i]*u[i]
vv += v[i]*v[i]
cos_theta = 1
if uu != 0 and vv != 0:
cos_theta = uv/np.sqrt(uu*vv)
return cos_theta
我在这篇文章中更详细地解释了它: How to Build a Fast “Most-Similar Words” Method in SpaCy

关于python - 列出预训练模型中 spaCy 中最相似的词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57697374/

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