如何从gensim模型中的Doc2Vec相似性分数中访问文档详细信息?

时间:2017-11-20 06:28:05

标签: python gensim doc2vec sentence-similarity

我使用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中访问经过培训的数据集的文档?

2 个答案:

答案 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个文档。