Сохраните модель Gensim LDA в s3 - PullRequest
0 голосов
/ 06 мая 2020

У меня есть модель LDA через gensim. Я могу сохранить его локально:

ldamodel.save('models/lda/lda.model')

В результате в указанном месте будет четыре файла:

lda.model
lda.model.expElogbeta.npy
lda.model.id2word
lda.model.state

Загрузить их обратно так же просто, как

ldamodel =  models.LdaModel.load('models/lda/lda.model')

Однако хочется сохранить эту модель на s3. Я могу придумать, как сохранять отдельные биты, например:

s3.meta.client.upload_file('models/lda/lda.model', 'bucket-name', 'lda.model')

Но я не могу понять, как на самом деле осмысленно читать их обратно, чтобы они функционировали должным образом как согласованная модель. Идея заключалась в том, что кто-то другой, кроме меня, мог взять файлы из s3 и использовать их в качестве модели в Python.

Кто-нибудь может помочь?

1 Ответ

1 голос
/ 07 мая 2020

Почему бы вам не реализовать класс, который учитывает логические отношения отдельных файлов, составляющих модель, и рассматривать его как один?

например,

class LdaModel:
   def __init__(self, lda_local_path, s3bucket_name, s3bucket_obj_prefix):
       self.local_path = lda_local_path
       self.s3bucket = s3bucket_name
       self.s3bucket_obj_pre = s3bucket_obj_prefix

    def upload(self):
        for fl in os.listdir(self.local_path):
            fl_local = os.path.join(self.local_path, fl)
            s3.meta.client.upload_file(fl_local, self.s3bucket, self.s3bucket_obj_pre + '__' + fl_local)

    def download(self): 
        ...

(я оставил out download, который вы можете реализовать по аналогии с upload one).

Другой подход - реализовать zip-оболочку, которая сжимает 4 файла и сохраняет их как один в S3.

...