#scipy #segmentation-fault #sparse-matrix #gensim #exit-code
#scipy #ошибка сегментации #разреженная матрица #gensim #код выхода
Вопрос:
При работе с разреженной матрицей он резко завершает работу ядра и завершает код 139. Это произошло при работе с Gensim, который использует формат разреженной матрицы.
Сбой происходит при умножении матрицы на другую матрицу или даже при использовании matrix.sum()
.
матрица была создана с использованием scipy:
matrix = scipy.sparse.csc_matrix((data, indices, indptr), shape=(num_terms, num_docs), dtype=dtype)
Ответ №1:
Оказывается, форма матрицы (num_terms) не соответствует максимальному значению (индексам), что заставляет numpy делать ошибочные предположения об адресах памяти.
Этого можно легко избежать, если после создания матрицы мы вызываем:
matrix.check_format()
который выполняет некоторые проверки работоспособности матрицы.
при использовании gensim просто используйте высокое значение num_features. Это не обязательно должно быть ваше фактическое количество функций, если оно не меньше фактического числа.
отредактируйте для получения более подробной информации:
с gensim вы можете работать над сходством документов, используя:
sim_method = gensim.similarities.SparseMatrixSimilarity(documents, num_features=max_index)
если «документы» содержат идентификатор выше, чем max_index, это вызовет ошибку.
gensim просто оборачивает объект scipy sparse matrix. для вызова check_format для нее используйте:
sim_method.index.check_format()
Хотя более вероятная ошибка может возникнуть, когда вы пытаетесь использовать этот метод подобия в другом корпусе документов, чтобы получить их оценки подобия.
sim_method[query_documents]
опять же, если query_documents содержит идентификатор выше, чем max_index, указанный во время создания метода sim — это вызовет ошибку.
Здесь gensim полностью скрывает scipy-матрицу, поэтому вы не можете напрямую вызвать check_format, вам просто нужно проверить свой собственный ввод и убедиться, что там нет ошибки.
Комментарии:
1. Спасибо, что сообщили о проблеме: github.com/scipy/scipy/issues/9965
2. Актуальность для gensim была бы понятнее, если бы вы упомянули или показали, какой код gensim вы использовали. (Какому классу / методу вы можете предоставить
num_features
, чтобы избежать проблемы? И действительно ли это позволяет избежать каких-либо проблем, даже если матрица не пройдетcheck_format()
тест?)3. Верно, я добавил детали, чтобы прояснить проблему с gensim