Я работаю над алгоритмом подобия предложений со следующим вариантом использования: учитывая новое предложение, я хочу получить его n наиболее похожих предложений из заданного набора.Я использую Gensim v.3.7.1, и я обучил обе модели word2vec и doc2vec.Результаты последних превосходят результаты word2vec, но у меня возникают проблемы при выполнении эффективных запросов с моей моделью Doc2Vec.Эта модель использует реализацию распределенного пакета слов (dm = 0).
Я использовал для вывода сходства встроенный метод model.most_similar()
, но это было невозможно, когда я начал тренироваться с большим количеством данных, чем тотЯ хочу запросить против.То есть, Я хочу найти самое похожее предложение среди подмножества моего учебного набора данных .Я быстро исправил это, сравнив вектор нового предложения с каждым вектором в моем наборе, используя косинусное сходство, но, очевидно, это не масштабируется, так как мне приходится вычислять множество вложений и проводить множество сравнений.
Я успешно использую расстояние перемещения слов для word2vec и doc2vec, но получаю лучшие результаты для doc2vec при использовании косинусного сходства.Как эффективно запросить новый документ к моему набору, используя модель PV-DBOW Doc2Vec и метод из class Схожесть ?
Я ищу подход, аналогичный тому, что я делаю сОМУ, но для сходства косинусов doc2vec:
# set_to_query contains ~10% of the training data + some future updates
set_to_query_tokenized = [sentence.split() for sentence in set_to_query]
w2v_model = gensim.models.Word2Vec.load("my_w2v_model")
w2v_to_query = gensim.similarities.WmdSimilarity(
corpus = set_to_query_tokenized,
w2v_model = w2v_model,
num_best=10
)
new_query = "I want to find the most similar sentence to this one".split()
most_similar = w2v_to_query[new_query]