Как найти ближайшее слово к вектору с помощью 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)