首页 > 解决方案 > 在所有测试语料库中测试模型 doc2vec

问题描述

我正在尝试应用 doc2vec教程,而不是在随机测试语料库文档上进行测试,而是在整个测试语料库上进行测试

我刚刚修改了以下行:

代码:

# Pick a random document from the test corpus and infer a vector from the model

#doc_id = random.randint(0, len(test_corpus) - 1)
doc_id = [index for index, text in enumerate(test_corpus)]

inferred_vector = model.infer_vector(test_corpus[doc_id])
sims = model.docvecs.most_similar([inferred_vector], topn=len(model.docvecs))

# Compare and print the most/median/least similar documents from the train corpus
print('Test Document ({}): «{}»\n'.format(doc_id, ' '.join(test_corpus[doc_id])))
print(u'SIMILAR/DISSIMILAR DOCS PER MODEL %s:\n' % model)
for label, index in [('MOST', 0), ('MEDIAN', len(sims)//2), ('LEAST', len(sims) - 1)]:
    print(u'%s %s: «%s»\n' % (label, sims[index], ' '.join(train_corpus[sims[index][0]].words)))

错误:

TypeError: list indices must be integers or slices, not list

标签: pythongensimdoc2vec

解决方案


在原始教程中,test_corpus 是列表的列表,doc_id 是单个随机整数,因此在语句中

inferred_vector = model.infer_vector(test_corpus[doc_id])

参数是一个带有整数索引 doc_id 的列表。

在您的修改版本中,

doc_id = [index for index, text in enumerate(test_corpus)]

将产生一个整数列表,而不是单个整数。

所以在test_corpus[doc_id], doc_id 现在是一个列表,所以你试图用一个列表来索引一个列表

这会导致您看到的错误:

TypeError:列表索引必须是整数或切片,而不是列表

要执行您想做的事情,您可能希望将列表列表转换test_corpus为单个长列表,如旧答案中所示如何从列表列表中制作平面列表


推荐阅读