原来矩阵的形状 (num_terms) 与 max(indices) 不匹配,这导致 numpy 对内存地址做出错误假设。
如果在创建我们调用的矩阵之后,这很容易避免:
matrix.check_format()
这会对矩阵进行一些完整性检查。
如果使用 gensim,只需使用高 num_features。不一定是您的实际功能数量,只要不低于实际数量即可。
编辑以获取更多详细信息:
使用 gensim,您可能正在使用以下方法处理文档相似性:
sim_method = gensim.similarities.SparseMatrixSimilarity(documents, num_features=max_index)
如果 "documents" 包含比 max_index 更高的 id,则会导致错误。
gensim 简单地包装了 scipy 稀疏矩阵对象。调用它的 check_format 使用:
sim_method.index.check_format()
当您尝试在另一个文档语料库上使用这种相似度方法来获取它们的相似度分数时,可能会出现更可能的错误。
sim_method[query_documents]
同样,如果 query_documents 包含的 id 高于创建 sim 方法时给出的 max_index - 这将导致错误。
这里 gensim 完全隐藏了 scipy 矩阵,所以你不能直接调用 check_format,你只需要检查自己的输入并确保那里没有错误。