【发布时间】:2020-08-14 02:10:23
【问题描述】:
假设我们训练了一个超过 100 万字的模型。为了找到最相似的词,我们需要计算测试词的嵌入与所有 100 万个词的嵌入之间的距离,然后找到最近的词。看来 Gensim 计算结果的速度非常快。虽然当我想计算最相似的时候,我的函数非常慢:
def euclidean_most_similars (model, word, topn = 10):
distances = {}
vec1 = model[word]
for item in model.wv.vocab:
if item!= node:
vec2 = model[item]
dist = np.linalg.norm(vec1 - vec2)
distances[(node, item)] = dist
sorted_distances = sorted(distances.items(), key=operator.itemgetter(1))
我想知道 Gensim 是如何如此快速地计算出最接近的词,以及计算最相似词的有效方法是什么。
【问题讨论】:
-
word2vec documentation 顶部附近的一件事是“确保在安装 Gensim 之前拥有 C 编译器,以使用优化的 word2vec 例程(与普通 NumPy 实现相比,速度提高了 70 倍,rare-technologies.com/parallelizing-word2vec-in-python )。”这给了你至少一些优化的提示。除此之外,source code 是免费提供的
-
至于如何提高自己代码的效率,这可能是Code Review的一个更好的问题
标签: python time-complexity gensim word2vec similarity