我创建了一个 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)]
最佳答案
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()
清楚。)
基本Doc2Vec
示例,例如在docs/notebooks
目录中使用gensim
安装的笔记本 doc2vec-lee.ipynb
,包含有用的示例。
关于python - 使用 word2vec 确定最相似的短语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55949196/