当使用稀疏矩阵时,它突然杀死内核并退出代码139.这与使用稀疏矩阵格式的Gensim一起工作时发生。
当矩阵与另一个矩阵相乘时,甚至在使用matrix.sum()时,都会发生故障。
矩阵是用scipy创建的:
matrix = scipy.sparse.csc_matrix((data, indices, indptr), shape=(num_terms, num_docs), dtype=dtype)
原来矩阵的形状(num_terms)与max(indices)不匹配,这导致numpy对内存地址做出错误的假设。
如果在创建我们调用的矩阵后,这很容易避免:
matrix.check_format()
这对矩阵进行了一些健全性检查。如果使用gensim,只需使用高num_features。它不必是您实际的功能数量,只要它不低于实际数量即可。
编辑更多详细信息:
使用gensim,您可能正在使用以下方法处理文档相似性:
sim_method = gensim.similarities.SparseMatrixSimilarity(documents, num_features=max_index)
如果“文档”包含比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,你只需检查自己的输入并确保那里没有bug。