我将Word2Vec模型保存到二进制文件中。我正在尝试将其加载到从此blog改编的无服务器API中,并使用this作为基础。
这在本地工作正常:
self.model = KeyedVectors.load_word2vec_format('./models/models.bin', binary=True)
但是从S3调用文件时出现错误:
' IOError:[Errno 2]没有这样的文件或目录:' 46659 100 \ n,| PUNCT \ XEC> \&XD8 GT; \ 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
答案 0 :(得分:2)
一种更干净,更快捷的方法是直接通过smart_open
和gensim.models.KeyedVectors.load()
使用的gensim.models.KeyedVectors.load_word2vec_format()
从S3加载模型。
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
答案 1 :(得分:1)
我认为将文件下载到磁盘,然后从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)