如何通过训练参数降低Gensim FastText模型的内存占用?
影响Gensim FastText模型内存占用的核心参数(按影响程度从高到低排序)
- 词汇量控制参数
这是对内存影响最大的一类参数,直接决定了需要存储的独立词向量数量:min_count:词汇收录阈值,低于该出现频次的词会被直接丢弃不加入词汇表,调高该值可以大幅砍掉低频词、压缩词汇表规模max_vocab_size:直接限制词汇表的最大容量,超过容量时会自动丢弃出现频次最低的词,适合硬卡内存上限的场景
- 向量维度参数
vector_size
每个词向量、子词ngram向量的维度长度,和内存占用呈完全线性相关,比如维度从300降到150,向量部分的内存直接缩减一半 - ngram相关参数
这是FastText区别于Word2Vec的额外内存开销来源,你提到的ngram范围确实会显著影响模型大小:bucket:ngram哈希桶的总容量,所有生成的字符ngram都会哈希映射到这个桶内存储对应的向量,默认值为2000000,调小该值可以直接压缩ngram部分的内存占用min_n/max_n:字符ngram的长度范围,默认值为3到6,缩小该范围(比如调整为2到4)可以减少生成的ngram总量,进而降低实际占用的桶空间;如果设置min_n=0且max_n=0,会直接关闭ngram功能,完全消除这部分内存开销
- 其他次要影响参数
对内存的影响远低于上面三类,一般不需要为了内存特意调整:hs:如果设置为1启用层级softmax代替默认的负采样,每个词需要额外存储霍夫曼树编码相关信息,会小幅增加内存占用negative:负采样的样本数量,调整该值对内存的影响极小,主要影响训练速度和效果
如果需要在训练过程中压缩模型体积,除了降低vector_size之外,优先选择调高min_count压缩词汇表,其次调小bucket容量、缩小ngram范围,内存压缩的收益最高。
内容的提问来源于stack exchange,提问作者dasWesen
相关产品推荐
相关产品推荐

