【问题标题】:sparse matrix causes Segmentation fault exit code 139稀疏矩阵导致分段错误退出代码 139
【发布时间】:2019-08-11 06:14:56
【问题描述】:

使用稀疏矩阵时,它会突然终止内核并退出代码 139。 这发生在使用稀疏矩阵格式的 Gensim 时。

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

矩阵是使用 scipy 创建的:

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

【问题讨论】:

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


    【解决方案1】:

    原来矩阵的形状 (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,你只需要检查自己的输入并确保那里没有错误。

    【讨论】:

    • 感谢您报告问题:github.com/scipy/scipy/issues/9965
    • 如果您提及或展示您使用的 gensim 代码,与 gensim 的相关性会更清楚。 (您可以向哪个类/方法提供 num_features 以避免该问题?而且,即使矩阵无法通过 check_format() 测试,这是否真的可以避免任何问题?)
    • 没错,我添加了细节以使 gensim 问题更清晰
    猜你喜欢
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多