将 gensim LDA 模型保存到 s3
Save a gensim LDA model to 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 来考虑组成模型的单独文件的逻辑关系并将其视为一个文件?
例如
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 中。
我通过使用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 来考虑组成模型的单独文件的逻辑关系并将其视为一个文件?
例如
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 中。