稀疏矩阵导致分段故障退出代码139

时间:2019-03-20 14:06:53

标签: scipy segmentation-fault sparse-matrix gensim exit-code

使用稀疏矩阵时,它会突然杀死内核并退出代码139。 当使用Gensim使用稀疏矩阵格式时,会发生这种情况。

将矩阵与另一个矩阵相乘甚至使用matrix.sum()都会发生失败。

矩阵是使用scipy创建的:

 matrix = scipy.sparse.csc_matrix((data, indices, indptr), shape=(num_terms, num_docs), dtype=dtype)

1 个答案:

答案 0 :(得分:0)

结果证明矩阵的形状(num_terms)与max(indices)不匹配,这导致numpy对内存地址做出错误的假设。

如果在创建矩阵后,我们可以轻松避免这种情况:

matrix.check_format()

这会对矩阵进行一些完整性检查。 如果使用gensim,只需使用高num_features。只要它不低于实际数量,就不必是您的实际功能数量。

编辑以获取更多详细信息:

使用gensim,您可能正在使用以下方法处理文档相似性:

sim_method = gensim.similarities.SparseMatrixSimilarity(documents, num_features=max_index)

如果“文档”包含的ID比max_index更高,将导致错误。

gensim仅包装scipy稀疏矩阵对象。调用check_format使用:

sim_method.index.check_format()

当您尝试在另一文档集上使用这种相似性方法以获取其相似性分数时,可能会出现更可能的错误。

sim_method[query_documents]

再次,如果query_documents包含的ID高于创建sim方法时给定的max_index-则会导致错误。

这里gensim完全隐藏了scipy矩阵,因此您不能直接调用check_format,您只需要检查自己的输入并确保其中没有错误即可。