Оказывается, что форма матрицы (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, вам просто нужно проверить свой ввод и убедиться, что там нет ошибок.