从 s3 加载 FastText 模型而不在本地保存
Loading a FastText Model from s3 without Saving Locally
我希望在 ML 管道中使用 FastText 模型,我在 s3 上创建并保存为 .bin
文件。我希望将这一切保存在基于云的管道中,所以我不想要本地文件。我觉得我真的很接近,但我不知道如何制作临时 .bin
文件。我也不确定我是否以最有效的方式保存和读取 FastText 模型。下面的代码有效,但它在本地保存了我想避免的文件。
import smart_open
file = smart_open.smart_open(s3 location of .bin model)
listed = b''.join([i for i in file])
with open("ml_model.bin", "wb") as binary_file:
binary_file.write(listed)
model = fasttext.load_model("ml_model.bin")
如果您想使用官方 Facebook FastText 代码的 fasttext
包装器,您可能需要创建一个本地临时副本 - 您的麻烦使该代码看起来依赖于打开本地文件路径。
您也可以尝试 Gensim
包的单独 FastText
支持,它应该通过其 load_facebook_model()
函数接受 S3 路径:
https://radimrehurek.com/gensim/models/fasttext.html#gensim.models.fasttext.load_facebook_model
(但请注意,Gensim 不支持所有 FastText 功能,例如 supervised
模式。)
正如上述回复的部分回答,需要一个临时文件。但最重要的是,临时文件需要作为字符串对象传递,这有点奇怪。工作代码如下:
import tempfile
import fasttext
import smart_open
from pathlib import Path
file = smart_open.smart_open(f's3://{bucket_name}/{key}')
listed = b''.join([i for i in file])
with tempfile.TemporaryDirectory() as tdir:
tfile = Path(tdir).joinpath('tempfile.bin')
tfile.write_bytes(listed)
model = fasttext.load_model(str(tfile))
我希望在 ML 管道中使用 FastText 模型,我在 s3 上创建并保存为 .bin
文件。我希望将这一切保存在基于云的管道中,所以我不想要本地文件。我觉得我真的很接近,但我不知道如何制作临时 .bin
文件。我也不确定我是否以最有效的方式保存和读取 FastText 模型。下面的代码有效,但它在本地保存了我想避免的文件。
import smart_open
file = smart_open.smart_open(s3 location of .bin model)
listed = b''.join([i for i in file])
with open("ml_model.bin", "wb") as binary_file:
binary_file.write(listed)
model = fasttext.load_model("ml_model.bin")
如果您想使用官方 Facebook FastText 代码的 fasttext
包装器,您可能需要创建一个本地临时副本 - 您的麻烦使该代码看起来依赖于打开本地文件路径。
您也可以尝试 Gensim
包的单独 FastText
支持,它应该通过其 load_facebook_model()
函数接受 S3 路径:
https://radimrehurek.com/gensim/models/fasttext.html#gensim.models.fasttext.load_facebook_model
(但请注意,Gensim 不支持所有 FastText 功能,例如 supervised
模式。)
正如上述回复的部分回答,需要一个临时文件。但最重要的是,临时文件需要作为字符串对象传递,这有点奇怪。工作代码如下:
import tempfile
import fasttext
import smart_open
from pathlib import Path
file = smart_open.smart_open(f's3://{bucket_name}/{key}')
listed = b''.join([i for i in file])
with tempfile.TemporaryDirectory() as tdir:
tfile = Path(tdir).joinpath('tempfile.bin')
tfile.write_bytes(listed)
model = fasttext.load_model(str(tfile))