Как найти ближайшее слово к вектору с помощью word2vec

Я только начал использовать Word2vec, и мне было интересно, как мы можем найти ближайшее слово к вектору. У меня есть этот вектор, который является средним вектором для набора векторов:

array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32)

есть ли прямой способ найти наиболее похожее слово в моих данных обучения этому вектору?

или единственным решением является вычисление косинусного сходства между этим вектором и векторами каждого слова в моих данных обучения, а затем выберите ближайший один?

спасибо.

3 ответов


на gensim реализация word2vec есть most_similar() функция, которая позволяет найти слова, семантически близкие к данному слову:

>>> model.most_similar(positive=['woman', 'king'], negative=['man'])
[('queen', 0.50882536), ...]

или к его векторному представлению:

>>> your_word_vector = array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32)
>>> model.most_similar(positive=[your_word_vector], topn=1))

здесь topn определяет желаемое количество возвращаемых результатов.

тем не менее, я чувствую, что функция делает то же самое, что и вы предложили, т. е. вычисляет косинусное сходство для данного вектора и друг друга вектора в словаре (что довольно неэффективно...)


Не забудьте добавить пустой массив с отрицательными словами в значение most_similar:

import numpy as np
model_word_vector = np.array( my_vector, dtype='f')
topn = 20;
most_similar_words = model.most_similar( [ model_word_vector ], [], topn)

кроме того, модель.западная вирджиния.similar_by_vector (вектор, topn=10, restrict_vocab=нет) также в .

найти top-N наиболее похожих слов по вектору.

параметры:

  • вектор (и NumPy.array) – Вектор, из которого должны быть вычислены сходства.

  • topn ({int, False}, необязательно) - количество top-N подобных слов для возврата. Если topn равно False, similar_by_vector возвращает вектор баллы подобия.

  • restrict_vocab (int, необязательно) – необязательное целое число, которое ограничивает диапазон векторов, которые ищут наиболее похожие значения. Для например, restrict_vocab=10000 будет проверять только первые 10000 слов векторы в порядке словаря. (Это может иметь значение, если вы сортировка словаря по убыванию частоты.)

возвращает: последовательность (слово, подобие).

тип возврата: список (str, float)