python - 将 gensim LDA 模型保存到 s3
问题描述
我通过使用 gensim 得到了一个 LDA 模型。我可以将其保存在本地:
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 中的模型。
有人可以帮忙吗?
解决方案
为什么不实现一个考虑到构成模型的单独文件的逻辑关系并将其视为一个的类?
例如
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):
...
(我为您留下了download
类比实现的方法upload
)。
另一种方法是实现一个 zip-wrapper,它将压缩 4 个文件并将它们作为一个文件存储在 S3 中。