ПРЕДПОСЫЛКА
Проблема, с которой я работаю, заключается в следующем:
В рамках эксперимента, который я проектирую для своегоисследования, я создаю большое количество больших (длиной 4M) массивов, которые несколько разрежены и, таким образом, могут храниться как scipy.sparse.lil_matrix
экземпляров, или просто как scipy.array
экземпляров (здесь выигрыш / потеря пространства не проблема).
Каждый из этих массивов должен быть соединен со строкой (а именно словом), чтобы данные имели смысл, поскольку они являются семантическими векторами, представляющими значение этой строки. Мне нужно сохранить это соединение.
Векторы для каждого слова в списке строятся один за другим и сохраняются на диске перед переходом кследующее слово.
Они должны храниться на диске таким образом, чтобы их можно было затем извлечь с использованием словарного синтаксиса.Например, если все слова хранятся в DB-подобном файле, я должен иметь возможность открыть этот файл и делать такие вещи, как vector = wordDB[word]
.
CURRENT APPROACH
Что я сейчас делаю:
Использование shelve
для открытия полки с именем wordDB
Каждый раз, когда вектор (в настоящее время используется lil_matrix
из scipy.sparse
) для слова строится, сохраняя вектор на полке: wordDB[word] = vector
Когда мне нужно использоватьвекторы во время оценки, я сделаю наоборот: откройте полку, а затем вызовите векторы, выполнив vector = wordDB[word]
для каждого слова, так как они необходимы, чтобы не все векторы были сохранены в ОЗУ (что было бы невозможно).
Приведенное выше «решение» соответствует моим потребностям с точки зрения решения указанной проблемы.Дело просто в том, что когда я хочу использовать этот метод для построения и хранения векторов для большого количества слов, у меня просто заканчивается свободное место на диске.
Это, насколько я могу судить, потому что shelve
выбирает сохраняемые данные, что не является эффективным способом хранения больших массивов, что делает эту проблему хранения неразрешимой с shelve
для количества слов, с которыми мне нужно иметь дело.
ПРОБЛЕМА
Вопрос заключается в следующем: существует ли способ сериализации моего набора массивов, который будет:
Сохранять сами массивы в сжатом двоичном формате, аналогично.npy
файлов, сгенерированных с помощью scipy.save
?
Соответствует моему требованию, чтобы данные можно было читать с диска в виде словаря, поддерживая связь между словами и массивами?