Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将gensim创建的fasttext模型导出到二进制文件?_Python_Nlp_Gensim_Fasttext - Fatal编程技术网

Python 如何将gensim创建的fasttext模型导出到二进制文件?

Python 如何将gensim创建的fasttext模型导出到二进制文件?,python,nlp,gensim,fasttext,Python,Nlp,Gensim,Fasttext,我正在尝试将gensim创建的fasttext模型导出到一个二进制文件中。但这些文件不清楚如何实现这一目标。 到目前为止我所做的: model.wv.save_word2vec_format('model.bin') 但这似乎不是最好的解决方案。因为稍后我想使用以下命令加载模型: fasttext.load_facebook_model('model.bin') 我进入一个无限循环。加载由model.save('fasttext.model)创建的fasttext.model函数时,只需30

我正在尝试将gensim创建的fasttext模型导出到一个二进制文件中。但这些文件不清楚如何实现这一目标。 到目前为止我所做的:

model.wv.save_word2vec_format('model.bin')
但这似乎不是最好的解决方案。因为稍后我想使用以下命令加载模型:

fasttext.load_facebook_model('model.bin')

我进入一个无限循环。加载由
model.save('fasttext.model)
创建的
fasttext.model
函数时,只需30秒左右即可完成。

使用
.save\u word2vec\u format()。它不会保存有关完整FastText模型的独特内容。这些文件将使用匹配的
.load\u word2vec\u format()
重新加载

.load\u facebook\u format()
方法以facebook原始(非Python)FastText代码版本保存的格式加载文件。(这种方法的名称是相当错误的,因为“facebook”可能意味着除特定数据格式之外的许多不同的东西。)Gensim没有一种匹配的方法来保存到相同的格式——尽管它可能不太难实现,并且支持这种导出选项是有意义的

Gensim的模型通常实现Gensim native
.save()
.load()
选项,它们混合使用Python“pickle”序列化和原始大数组文件。如果要保存完整的模型状态,以便稍后重新加载回Gensim,这些是您的最佳选项

(其他FastText实现无法加载此类文件。)

将保存的模型移动到新位置时,请确保将此
.save()
编写的多个相关文件(所有文件都具有相同的用户提供的前缀)保存在一起


更新(2020年5月):最新版本的
gensim
,如3.8.3及更高版本,包括一个新的
FastText.save\u facebook\u model()
保存为原始Facebook FastTExt二进制格式的方法。

请阅读:您是否尝试了model.save?@Anakin87您无法使用
model.save
方法将模型保存为
.bin
文件。谢谢您的解释。那么,如果我想使我的模型文件尽可能轻,并摆脱可训练的重量,我该怎么办呢?目前还没有一个内置选项支持这一点(尽管如果有匹配的
.save\u facebook\u format()
它将符合要求)。在执行
.save()
之前,您可以尝试将一些完整模型不再需要的属性置零,但这可能会导致模型无法完成某些仍应完成的操作,或者在重新加载时出错(因此请仔细试验)。丢弃
model.trainables.syn1neg
可能会起作用并带来最大的节约-不确定是否可以丢弃
trainables
的其他部分。我们不能将模型保存为pickle文件并在需要时加载它吗?对于大小超过几GB的模型,pickle会中断-这是很常见的。而
.save()
保存的独立阵列将更快/更高效地加载,并提供只读内存映射加载选项,这在某些多进程部署场景中可以节省内存。但是你可以在小模型上试试!另外:请注意我在答案底部的更新:最近
gensim
添加了一个
FastText.save\u facebook\u model()
选项。我正在尝试使用save\u facebook\u模型,但出现了一个错误。我在gensims网页中找不到文档。你知道在哪里可以找到它吗?