Memory 根西姆:泡菜还是不泡菜?
我有一个关于gensim的问题。我想知道在保存或加载一个模型(或多个模型)时是否建议或有必要使用pickle,正如我在GitHub上发现的脚本所做的那样Memory 根西姆:泡菜还是不泡菜?,memory,model,pickle,gensim,Memory,Model,Pickle,Gensim,我有一个关于gensim的问题。我想知道在保存或加载一个模型(或多个模型)时是否建议或有必要使用pickle,正如我在GitHub上发现的脚本所做的那样 mymodel = Doc2Vec(documents, size=100, window=8, min_count=5, workers=4) mymodel.delete_temporary_training_data(keep_doctags_vectors=True, keep_inference=True) 看 变体1:
mymodel = Doc2Vec(documents, size=100, window=8, min_count=5, workers=4)
mymodel.delete_temporary_training_data(keep_doctags_vectors=True, keep_inference=True)
看
变体1:
import pickle
# Save
mymodel.save("mymodel.pkl") # Stores *.pkl file
# Load
mymodel = pickle.load("mymodel.pkl")
# Save
model.save(mymodel) # Stores *.model file
# Load
model = Doc2Vec.load(mymodel)
变体2:
import pickle
# Save
mymodel.save("mymodel.pkl") # Stores *.pkl file
# Load
mymodel = pickle.load("mymodel.pkl")
# Save
model.save(mymodel) # Stores *.model file
# Load
model = Doc2Vec.load(mymodel)
在gensim.utils
中,我觉得有一个pickle函数嵌入其中:
def保存
...
尝试:
_pickle.dump(self,fname\u或\u handle,protocol=pickle\u protocol)
我问题的目标:
我很高兴了解1)我是否需要pickle(用于更好的内存管理)和2)万一,为什么它比加载*.model文件更好
谢谢大家! 这取决于您的要求 当您打算在Python中使用数据并且不需要在Python版本之间进行更改时(我在使用pickle模型从Python 2移植到Python 3时遇到了一些问题),二进制格式将是一个不错的选择
如果您需要互操作性,或者此模型可用于其他项目或其他程序员,我将使用gensim的保存方法。每当您使用内置的gensim函数
save()
存储模型时,无论文件扩展名如何,都会使用pickle。报告告诉我们:
类gensim.utils.SaveLoad
Bases: object
Class which inherit from this class have save/load functions, which un/pickle them to disk.
Warning
This uses pickle for de/serializing, so objects must not contain unpicklable attributes, such as lambda functions etc.
因此,只要模型类继承自gensim.utils.SaveLoad
类,gensim就会使用pickle保存任何模型。在您的例子中,gensim.models.doc2vec.doc2vec
继承自gensim.models.base\u any2vec.basewordembeddedingsmodel
,后者又继承自gensim.utils.SaveLoad
,后者提供实际的save()
函数
回答您的问题:
save()
函数您可以选择任何文件扩展名:*.model、*.pkl、*.p、,
*.泡菜。保存的文件将被pickle在变体1中,使用
pickle.load
加载保存的Doc2Vec模型失败,因为使用模型的save
方法存储的文件没有readline属性。它真的对你有用吗?在变体2中,我假设a)mymodel
是指向扩展名为“model”的文件的路径,而不是先前创建的Doc2Vec模型,b)model
是Doc2Vec模型。这些假设正确吗?