Предположим, у меня есть (возможно) большой корпус, около 2,5 М из них с 500 функциями (после запуска LSI по исходным данным с gensim). Мне нужен корпус для обучения моих классификаторов с помощью scikit-learn. Тем не менее, мне нужно сначала преобразовать корпус в массив numpy. Тренер создания и классификатора корпуса выполняется в двух разных сценариях.Как эффективно преобразовать Gensim corpus в массив numpy (или scipy разреженной матрицы)?
Таким образом, проблема заключается в том, что размер моей коллекции, как ожидается, будет расти, и на этом этапе у меня уже недостаточно памяти (32 ГБ на машине), чтобы конвертировать все сразу (с gensim.matutils.corpus2dense
). Чтобы обойти проблему, я конвертирую один вектор за другим одновременно, но он очень медленный.
Я рассмотрел вопрос о сдаче корпуса в формате svmlight, а также scikit-learn загрузить его sklearn.datasets.load_svmlight_file
. Но тогда это, вероятно, означало бы, что мне нужно будет сразу загрузить все в память?
В любом случае я могу эффективно конвертировать из gensim corpus в массив numpy (или scipy редкую матрицу)?
Одно быстрое примечание: поскольку вы выполнили LSI, теперь у вас плотные данные. Таким образом, не так много смысла для вывода матрицы scipy.sparse. Массив numpy будет использовать меньше памяти для данных, которые являются полностью плотными. – Dthal
да, нужно найти способ сделать это быстро, если это возможно (и я почесываю голову сейчас, потому что я не мог воспроизвести проблему с памятью при преобразовании всего корпуса) – Jeffrey04