gensim word2vec 非常大,有什么方法可以减小文件大小?

gensim word2vec extremely big and what are the methods to make file size smaller?

我有一个使用 skipgram 预训练的 word2vec bin 文件。该文件非常大(矢量维度为 200 ),超过 2GB。我正在考虑一些使文件大小更小的方法。这个 bin 文件包含标点符号向量,一些停用词。所以,我想知道有哪些选项可以减少这个 word2vec 的文件大小。删除那些标点符号和停用词行是否安全,什么是最有效的方法?

最明显的方法是使用较小的词汇量进行训练,this repo 就是这样做的。 "The final slim model has 299,567 words, saved in a 270 MB compressed word2vec format file, and loads in 20 seconds on my laptop."

或者,您应该考虑使用 fasttext. Fasttext supports model quantization, which can significantly shrink the final model size - the example they give in their blog post 量化演示将 350MB 模型压缩到小于 1MB。

完整 Word2Vec 模型的大小主要由所选的向量大小和词汇表的大小决定。

因此,要节省大量资金,您的主要选择是训练更小的向量或更小的词汇表。

丢弃几百个停用词或标点符号不会对模型大小产生明显影响。

丢弃许多最不常用的词会对模型大小产生很大的影响——而且通常那些不那么常用的词并不像您想象的那么重要。 (虽然它们总数很多,但每一个都很少出现。而且因为它们在训练数据中很少见,所以它们通常往往没有很好的向量,无论如何——基于很少的例子,它们的训练影响被淹没了受更频繁单词的影响。)

限制词汇量的最简单方法是在训练期间使用更高的 min_count 值(忽略所有出现次数较少的词),或固定 max_final_vocab 上限(这将仅保留许多最常用的词)。

另请注意,如果您是 saving/reloading 完整的 Word2Vec 模型(通过 gensim 内部 .save()/.load() 方法),您将保留模型仅在持续训练时需要的内部权重,将几乎使磁盘上的模型大小增加一倍或重新加载。

您可能只想在 .wv 属性 中保存原始词向量(通过 gensim-internal .save().save_word2vec_format() 方法) .

我将补充@sam-h 的答案:如果你想要一个小而准确的嵌入模型,fastText 是一个不错的选择,因为词汇外的单词可以用它们的字符 n-gram 来表示,所以你可以避免建立一个非常大的词汇量。

然而,原生的 fastText 库只支持监督(分类器)模型的压缩,所以如果你想要一个通用的词嵌入模型,这是行不通的。但是,我创建了一个包 compress-fasttext that can compress a 7GB model to 21MB with only small loss in the quality. This post 更详细地描述了包。