我刚刚训练了我的快速文本模型,我试图使用pins、 https://pypi.org/project/pins/和vetiver https://pypi.org/project/vetiver/来控制版本。
但是,要做到这一点,我需要选择快速文本对象/模型。那就是我一直在挣扎的地方。
PS:当我将快速文本模型保存到磁盘时,它将保存为.bin或二进制文件。下面是使用pins时代码的外观
import pins
import fasttext
board = pins.board_temp(allow_pickle_read = True)
board.pin_write(ft_model, "ft_model", type="joblib") #ft_model is a fasttext model I already trained运行这^行的错误代码是:cannot pickle 'fasttext_pybind.fasttext' object
同样的情况发生在我使用vetiver时。
import vetiver
import fasttext
import pins
class FasttextHandler(BaseHandler):
def __init__(self, model, ptype_data):
super().__init__(model, ptype_data)
handled_model = FasttextHandler(model = ft_model, ptype_data = None )
vetiver_fasttext_model = vetiver.VetiverModel(model = handled_model, model_name = "model")
ft_board = board_temp(allow_pickle_read = True)
vetiver.vetiver_pin_write(ft_board, vetiver_fasttext_model)同样,我为这个代码片段获得的错误代码是cannot pickle 'fasttext_pybind.fasttext' object。
我很感谢你的帮助和建议,
谢谢你好心!
贾马尔
发布于 2022-08-16 17:24:38
官方的Facebook fasttext模块依赖于Facebook的非Python实现和存储格式,所以这很可能是你遇到的防酸洗障碍。
如果您没有使用--supervised分类模式,那么完整的Python&CythonGensim库包含一个FastText模型类,它可以完成除该模式之外的所有事情。它还可以加载/保存Facebook格式的模型。
虽然Gensim自己的原生.save()操作使用泡菜和原始numpy数组文件的混合,但出于历史和效率的原因,它的模型也应该能够完成酸洗(如果使用最近的Pythons &否则您的项目就可以承担全部开销)。
如果您仍然需要Facebook fasttext的特性(如监督模式),您可能需要将它们的本机对象包装在不可挑选的部件上,使用代理对象来拦截泡菜序列化尝试,并以某种方式利用它们的自定义格式来模拟泡菜能力。
例如,在序列化时,请包装对象以其通常的方式编写自己,然后将整个原始本机文件作为包装器对象的一个序列化原始数据字段进行酸洗。在反序列化时,显式地接受这个巨大的原始文件字段,将其写入磁盘,然后使用包装类的本机加载。
这将是相当缓慢和丑陋的,并且在两种序列化格式之间的编组过程中涉及大量额外的临时可寻址内存使用--但也许如果您没有其他选择&您的系统对延迟/内存的使用有足够的容忍度--它将允许您在所需的fasttext /vetiver-based体系结构中使用本机pins模型。
https://stackoverflow.com/questions/73374214
复制相似问题