我使用gensim获得了doc2vec模型,该模型经过了2000万份文档的培训。它被培训的2000万份文件也提供给我,但我不知道从文件夹中培训文件的顺序和顺序。我应该使用测试数据从训练集中找到前10名的比赛。我使用的代码是 -
model = gensim.models.doc2vec.Doc2Vec.load("doc2vec_sample.model")
test_docs=["This is the test set I want to test on."]
def read_corpus(documents, tokens_only=False):
count=0
count=count+1
for line in documents:
if tokens_only:
yield gensim.utils.simple_preprocess(line)
else:
# For training data, add tags
yield gensim.models.doc2vec.TaggedDocument(gensim.utils.simple_preprocess(line), [count])
test_corpus = list(read_corpus(test_docs, tokens_only=True))
doc_id=0
inferred_vector = model.infer_vector(test_corpus[doc_id])
maxx=10
sims = model.docvecs.most_similar([inferred_vector], topn=maxx)
for match in sims:
print match
` 我得到的输出是 -
(1913, 0.4589531719684601)
(3250, 0.4300411343574524)
(1741, 0.42669129371643066)
(1, 0.4023148715496063)
(1740, 0.3929900527000427)
(1509, 0.39229822158813477)
(3189, 0.387174129486084)
(3145, 0.3842133581638336)
(1707, 0.3813004493713379)
(3200, 0.3754497170448303)
我如何知道哪个文件的文件编号为" 1913"参考?如何从这10个工作ID中访问经过培训的数据集的文档?
答案 0 :(得分:3)
最好的方法是询问培训模型的人如何将ID(Doc2Vec用语中的“标签”)分配给文档。
如果没有,请查看培训语料库,看看是否有适用于文档的自然命名或排序。 (它们是每个文件一个吗?那么也许排序顺序的文件名映射到升序ID。每个文档是一行中的一行吗?那么行号可能是ID标签。
当你有一个理论时,如果模型是一个有用的训练模型,那么你可以通过查看most_similar()
结果是否与ID标签解释有意义来测试它。
您可以以临时方式执行此操作 - 查询文档的结果或随机探测对您来说是否合适?
或者您可以尝试将其形式化,例如通过重新推断已知在训练集中的文档的向量,然后查找与这些向量最相似的文档。 如果模型是好的,如果推理工作正常(可能需要调整infer_vector()
参数,那么矢量的“顶部命中”,或其中一个热门歌曲,应该是完全相同的文件。
但实际上,如果模型文档记录太差,您无法将文档与ID相关联,并且原始人员不可用,您可能希望将其丢弃并重新培训文档,并提供更好的文档程序。
答案 1 :(得分:0)
只需将文档打印到列表中并查询2000万个列表。当然,您不想打印(文档)并在屏幕上获得2000万个向量。将文档中的列表插入数据库表可能更有效。当您打印文档向量(即gensim doc2vec教程中的train_corpus)时,结果是以下格式的列表: [TaggedDocument(words = [' token1',' token2',...,' tokenn'],tags = [凭证编号])。 您可以查询此结果以查找列表中的第1913个文档。