У меня есть модель на основе doc2vec
, обученная на нескольких документах. Я хотел бы использовать эту модель для вывода векторов другого документа, который я хочу использовать в качестве корпуса для сравнения. Поэтому, когда я ищу наиболее похожее предложение, которое я ввел, оно использует новые векторы документов вместо обученного корпуса.
В настоящее время я использую infer_vector()
для вычисления вектора для каждого из предложений нового документа, но я не могу использовать функцию most_similar()
со списком получаемых мной векторов, он должен быть KeyedVectors
.
Я хотел бы знать, могу ли я как-то вычислить эти векторы для нового документа, который позволит использовать функцию most_similar()
, или мне нужно вычислить сходство между каждым из предложений предложения новый документ и предложение, которое я привожу индивидуально (в этом случае, есть ли какая-либо реализация в Gensim, которая позволяет мне вычислять косинусное сходство между 2 векторами?).
Я новичок в Gensim и NLP, и я открыт для ваших предложений.
Я не могу предоставить полный код, поскольку это проект для университета, но вот основные части, в которых у меня возникают проблемы.
После некоторой предварительной обработки данных я обучаю свою модель следующим образом:
documents = [TaggedDocument(doc, [i]) for i, doc in enumerate(train_data)]
assert gensim.models.doc2vec.FAST_VERSION > -1
cores = multiprocessing.cpu_count()
doc2vec_model = Doc2Vec(vector_size=200, window=5, workers=cores)
doc2vec_model.build_vocab(documents)
doc2vec_model.train(documents, total_examples=doc2vec_model.corpus_count, epochs=30)
Я пытаюсь вычислить векторы для нового документа следующим образом:
questions = [doc2vec_model.infer_vector(line) for line in lines_4]
А затем я пытаюсь вычислить сходство между новыми векторами документа и входной фразой:
text = str(input('Me: '))
tokens = text.split()
new_vector = doc2vec_model.infer_vector(tokens)
index = questions[i].most_similar([new_vector])