Как ускорить расчет подобия word2ve c? - PullRequest
0 голосов
/ 08 марта 2020

Я обучил модель Word2Ve c с помощью Gensim, и у меня есть два набора слов:

S1 = {'','','' ...}
S2 = {'','','' ...}

для каждого слова w1 в S1, я хочу найти 5 лучших слов, которые наиболее похожи на w1. В настоящее время я делаю это так:

model = w2v_model
 word_similarities = {}
 for w1 in S1:
    similarities = {}
    for w2 in S2:
       if w1 in model.wv and w2 in model.wv:
           similarity = model.similarity(w1, w2)
           similarities[w2] = similarity
    word_similarties[w1] = similarities

Затем для каждого слова в word_similities я могу получить верхний N из его значений dict. Если S1 и S2 велики, это становится очень медленным.

Существует ли более быстрый способ вычисления больших пар слов в Word2Ve c, будь то в генизме или тензорном потоке?

1 Ответ

0 голосов
/ 11 марта 2020

В зависимости от относительных размеров вашей модели, S1, & S2, вы можете использовать метод most_similar() различных классов слов-векторов gensim, который будет использовать объемные оптимизированные операции сравнения векторов. сравнить с всеми векторами в вашей модели, а затем отфильтровать до результатов только в S2.

В качестве альтернативы, если S2 намного меньше, чем полный размер model.wv, и особенно если вы будете многократно использовать один и тот же набор S2 слов-векторов, вы могли бы рассмотреть создать свой собственный KeyedVectors экземпляр с просто S2 словами в нем, сначала создав пустое KeyedVectors, затем добавив в него все S2 слова, затем используя s2.most_similar(positive=[target_word_vector], topn=5).

...