首页 > 解决方案 > FastText .bin 文件无法放入内存,即使我有足够的 RAM

问题描述

我正在尝试加载一个具有 .bin 文件形式的 FastText 预训练模型。.bin 文件的大小为 2.8GB,我有 8GB RAM 和 8GB 交换文件。不幸的是,模型开始加载并占用了将近 15GB,然后它因以下错误而中断:

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

通过观察系统监视器,我可以看到 RAM 和 swap 都被完全占用了,所以我认为它会因为内存不足而中断。

我正在尝试使用 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)

我将衷心感谢您的帮助!

标签: pythongensimfasttext

解决方案


超出磁盘大小的扩展是预期的——尤其是当您开始执行诸如most_similar(). 但是,如果您真的因为仅运行 2 行代码来加载模型而遇到该错误,则可能是其他问题。

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

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

我不知道有任何直接的方法可以缩小现有的 FastText 模型。(如果您使用自己的数据训练模型,则有许多预训练初始化选项可能会导致模型更小。但这些限制对于已训练的模型没有意义。)

如您所见,Facebook 仅对监督模型实施了“量化”技巧——即使这种转换可以应用于更多模式,支持的 gensim 代码也需要额外的更新才能理解更改后的模型。

如果您可以加载一次,在完整(非wrappers)gensim 实现中,将所有包含的向量截断为较低维度以显着节省 RAM,然后重新保存模型可能是切实可行的。但考虑到这些已经只是 100 维向量,这可能会在表现力上花费很多。


推荐阅读