Допустим, мы обучаем модель более чем 1 миллиону слов. Чтобы найти наиболее похожие слова, нам нужно вычислить расстояние между вложением тестового слова и вложениями всех слов из миллиона слов, а затем найти ближайшие слова. Похоже, Генсим очень быстро вычисляет результаты. Хотя, когда я хочу вычислить самое похожее, моя функция очень медленная:
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 удается так быстро вычислить самые близкие слова и как эффективный способ вычислить большинство подобных.