将 Word2Vec 二进制模型从 S3 加载到 Gensim 失败



我已经将Word2Vec模型保存到二进制文件中。我正在尝试将其加载到改编自此博客的无服务器 API 中,并以此为基础。

这在本地工作正常:

self.model = KeyedVectors.load_word2vec_format('./models/models.bin', binary=True)

但是从 S3 调用文件时,它出错:

'IOError: [errno 2] 没有这样的文件或目录: '46659 100,|标点 \xec>\xd8>\xaf\xa8\x95'

def load_model(key):
response = S3.get_object(Bucket=BUCKET_NAME, Key=key)
model_str = response['Body'].read()
model = KeyedVectors.load_word2vec_format(model_str, binary=True)
return model

一种更干净、更快捷的方法是直接从 S3 加载模型到smart_opengensim.models.KeyedVectors.load()gensim.models.KeyedVectors.load_word2vec_format()都使用它。

AWS_ACCESS_KEY_ID = 'abc'
AWS_SECRET_ACCESS_KEY = 'abc'
url = 's3://' + AWS_ACCESS_KEY_ID + ":" + AWS_SECRET_ACCESS_KEY + "@bucket/file.model"
wv = gensim.models.KeyedVectors.load(url)

请参阅自述文件中有关smart_open的示例:https://github.com/RaRe-Technologies/smart_open

我认为将文件下载到磁盘,然后从python读取它比尝试使用get_object()将该文件直接加载到内存中更干净。如果磁盘空间是一个问题,如果可以随时删除下载的文件。

这对我来说非常有效:

session = boto3.Session()
s3 = session.resource('s3')
destination_file = 'model.bin.gz'
s3.meta.client.download_file(bucket_name, object_name, destination_file)
model = gensim.models.KeyedVectors.load_word2vec_format(destination_file, binary=True)

相关内容

  • 没有找到相关文章

最新更新