Определить наиболее похожую фразу с word2vec - PullRequest
0 голосов
/ 02 мая 2019

Я создаю скрипт Python для обучения и выведения векторов тестовых документов, используя doc2vec.

Моя проблема в том, что, когда я пытаюсь определить наиболее похожую фразу, например («мир»), она отображается только в списке наиболее похожих слов. Список наиболее похожих фраз не отображается.

Я что-то упустил в своем коде?

#python example to infer document vectors from trained doc2vec model
import gensim.models as g
import codecs

#parameters
model="toy_data/model.bin"
test_docs="toy_data/test_docs.txt"
output_file="toy_data/test_vectors.txt"

#inference hyper-parameters
start_alpha=0.01
infer_epoch=1000

#load model
m = g.Doc2Vec.load(model)
test_docs = [ x.strip().split() for x in codecs.open(test_docs, "r", "utf-8").readlines() ]

#infer test vectors
output = open(output_file, "w")
for d in test_docs:
    output.write( " ".join([str(x) for x in m.infer_vector(d, alpha=start_alpha, steps=infer_epoch)]) + "\n" )
output.flush()
output.close()


m.most_similar('the word'.split())

Я получаю этот список:

[('refutations', 0.9990279078483582),
 ('volume', 0.9989271759986877),
 ('italic', 0.9988381266593933),
 ('syllogisms', 0.998751699924469),
 ('power', 0.9987285137176514),
 ('alibamu', 0.9985184669494629),
 ("''", 0.99847412109375),
 ('roman', 0.9984466433525085),
 ('soil', 0.9984269738197327),
 ('plants', 0.9984176754951477)]

1 Ответ

0 голосов
/ 03 мая 2019

Модель Doc2Vec собирает свои векторы документов для последующего поиска или поиска в свойстве .docvecs. Чтобы получить результаты векторного документа, вы должны выполнить most_similar() для этого свойства. Если ваш экземпляр Doc2Vec содержится в переменной d2v_model, а doc_id содержит один из известных тегов документа из обучения, это может быть:

d2v_model.docvecs.most_similar(doc_id)

Если вы вывели вектор для нового документа и искали учебные документы, похожие на этот вывод, ваш код может выглядеть следующим образом:

new_dv = d2v_model.infer_vector('some new document'.split())
d2v_model.docvecs.most_similar(positive=[new_dv])

(Класс модели Doc2Vec является производным от очень похожего класса Word2Vec и, таким образом, наследует most_similar(), который по умолчанию обращается только к внутренним векторам слов. Эти векторы могут быть полезны, в некоторых Режимы Doc2Vec или случайные - но для ясности лучше использовать либо d2v_model.wv.most_similar(), либо d2v_model.docvecs.most_similar(). *

Basic Doc2Vec примеры, например, ноутбук, установленный с gensim в каталоге docs/notebooks doc2vec-lee.ipynb, содержат полезные примеры.

...