即使我有足够的RAM,FastText .bin文件也无法容纳在内存中

时间:2019-10-16 07:10:25

标签: python gensim fasttext

我正在尝试加载具有.bin文件形式的FastText预训练模型之一。 .bin文件的大小为2.8GB,我有8GB RAM和8GB交换文件。不幸的是,该模型开始加载,几乎占据了15GB的空间,然后由于以下错误而中断:

Process finished with exit code 137 (interrupted by signal 9: SIGKILL)

通过观察系统监视器,我可以看到RAM和交换空间已被完全占用,因此我认为它已中断,因为它内存不足。

我正在尝试使用Gensim包装器为FastText加载文件

from gensim.models.wrappers import FastText model = FastText.load_fasttext_format('../model/java_ftskip_dim100_ws5')


我的问题如下:

1)有什么方法可以在我系统的当前内存中拟合此模型?

2)是否可以减小此型号的尺寸?我尝试使用以下代码进行量化

./fasttext quantize -output java_ftskip_dim100_ws5 -input unused_argument.txt

我收到以下错误:

terminate called after throwing an instance of 'std::invalid_argument' what(): For now we only support quantization of supervised models Aborted (core dumped)

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

预计会超出磁盘大小进行某些扩展,尤其是一旦开始执行most_similar()之类的操作后。但是,如果您仅通过运行2条线来加载模型就确实遇到了该错误,则可能还有其他问题。

在最新的gensim中,您可能要尝试使用非wrappers gensim FastText的实现– from gensim.models import FastText,以防万一您使用的版本存在额外的内存问题。

(您可能还想检查是否使用原始的经过编译的Facebook FastText实现可以加载文件,并显示相似的内存使用情况。)

我不知道有什么简单的方法可以缩小现有的FastText模型。 (如果您是根据自己的数据来训练模型的,那么有许多训练前的初始化选项可能会导致模型更小。但是这些限制对于应用到已经训练的模型没有意义。)

如您所见,Facebook仅对受监管的模型实施了“量化”技巧–即使该转换可以应用于更多模式,支持的gensim代码也将需要额外的更新来了解已更改的模型

如果您可以在完整的(非{wrappers)gensim实现中一次加载它,则将所有包含的矢量截短为较低维以节省大量RAM可能是可行的,然后重新保存模型。但是鉴于这些已经只是100维向量,因此在表达能力上可能会花费很多。