python - 在所有测试语料库中测试模型 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
解决方案
在原始教程中,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
为单个长列表,如旧答案中所示如何从列表列表中制作平面列表
推荐阅读
- mysql - 如何排序,mysql中的一个json_object
- sql-server - 在 SQL Server 中使用 GO 语句的目的是什么?
- powerbi - PowerBI - 如何计算列中的重复次数
- python - 如何创建没有尾随空格的文件夹?
- typescript - 使用 Azure Function Core Tools 将事件中心消息写入本地文件
- python - 如何在 PyGame 上显示文本?
- vba - 将参数从 VB6 exe 程序传递到 VBA
- java - 如何修复 SpringApplication 上的 NoClassDefFoundError (Pivotal)
- javascript - Spring Boot 加上反应部署为 .war
- python - 如何在两个 GPU 上运行两个不同的神经网络?