我正在尝试加载具有.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)
非常感谢您的帮助!
答案 0 :(得分:1)
预计会超出磁盘大小进行某些扩展,尤其是一旦开始执行most_similar()
之类的操作后。但是,如果您仅通过运行2条线来加载模型就确实遇到了该错误,则可能还有其他问题。
在最新的gensim中,您可能要尝试使用非wrappers
gensim FastText
的实现– from gensim.models import FastText
,以防万一您使用的版本存在额外的内存问题。
(您可能还想检查是否使用原始的经过编译的Facebook FastText实现可以加载文件,并显示相似的内存使用情况。)
我不知道有什么简单的方法可以缩小现有的FastText模型。 (如果您是根据自己的数据来训练模型的,那么有许多训练前的初始化选项可能会导致模型更小。但是这些限制对于应用到已经训练的模型没有意义。)
如您所见,Facebook仅对受监管的模型实施了“量化”技巧–即使该转换可以应用于更多模式,支持的gensim代码也将需要额外的更新来了解已更改的模型
如果您可以在完整的(非{wrappers
)gensim实现中一次加载它,则将所有包含的矢量截短为较低维以节省大量RAM可能是可行的,然后重新保存模型。但是鉴于这些已经只是100维向量,因此在表达能力上可能会花费很多。