Разреженная матрица вызывает Сбой сегментации код выхода 139 - PullRequest
0 голосов
/ 20 марта 2019

При работе с разреженной матрицей происходит резкое уничтожение ядра и код выхода 139. Это произошло при работе с Gensim, который использует формат разреженной матрицы.

Ошибка возникает при умножении матрицы на другую матрицу.или даже при использовании matrix.sum ().

матрица была создана с помощью scipy:

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

1 Ответ

0 голосов
/ 20 марта 2019

Оказывается, что форма матрицы (num_terms) не совпадает с max (индексами), что приводит к ошибочному предположению numpy относительно адресов памяти.

Этого легко избежать, если после создания матрицы мы называем:

matrix.check_format()

, который делает некоторые проверки работоспособности на матрице. если вы используете gensim, просто используйте высокое num_features. Это не должно быть вашим фактическим количеством функций, если оно не меньше действительного числа.

изменить для более подробной информации:

с gensim вы можете работать над сходством документов, используя:

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

если «документы» содержат более высокий идентификатор, чем max_index, это приведет к ошибке.

gensim просто оборачивает скудный объект с разреженной матрицей. для вызова check_format по нему используйте:

sim_method.index.check_format()

Хотя более вероятная ошибка может возникать, когда вы пытаетесь использовать этот метод сходства в другом корпусе документов, чтобы получить их оценки сходства.

sim_method[query_documents]

еще раз, если query_documents содержит идентификатор выше, чем max_index, указанный во время создания метода sim - это вызовет ошибку.

Здесь gensim полностью скрывает матрицу scipy, поэтому вы не можете напрямую вызывать check_format, вам просто нужно проверить свой ввод и убедиться, что там нет ошибок.

...