使用 gensim 从 fasttext 库中高效地加载预训练词嵌入的内存
Memory efficiently loading of pretrained word embeddings from fasttext library with gensim
我想使用 gensim 从 fasttext 库加载预训练的多语言词嵌入;这里 link 到嵌入:
https://fasttext.cc/docs/en/crawl-vectors.html
特别是,我想加载以下词嵌入:
- cc.de.300.vec (4.4 GB)
- cc.de.300.bin (7 GB)
Gensim 提供了以下两种加载快速文本文件的选项:
gensim.models.fasttext.load_facebook_model(path, encoding='utf-8')
- Load the input-hidden weight matrix from Facebook’s native fasttext
.bin output file.
- load_facebook_model() loads the full model, not just
word embeddings, and enables you to continue model training.
gensim.models.fasttext.load_facebook_vectors(path, encoding='utf-8')
- Load word embeddings from a model saved in Facebook’s native fasttext .bin format.
- load_facebook_vectors() loads the word embeddings only. Its faster, but does not enable you to continue training.
来源 Gensim 文档:
https://radimrehurek.com/gensim/models/fasttext.html#gensim.models.fasttext.load_facebook_model
由于我的笔记本电脑只有 8 GB 内存,我继续收到 MemoryErrors 或加载需要很长时间(最多几分钟)。
是否有选项可以更有效地从磁盘加载这些大型模型?
由于向量通常至少需要与其磁盘存储一样多的可寻址内存,因此将这些向量的全功能版本加载到只有 8GB RAM 的机器中将是一项挑战。特别是:
一旦你开始对这些向量进行最常见的操作——找到目标 most_similar()
单词的列表 word/vector——gensim 实现也会想要缓存一个一组已归一化为单位长度的词向量——这几乎是所需内存的两倍
gensim 的 FastText 支持的当前版本(至少通过 3.8.1)也在一些不必要的分配上浪费了一些内存(尤其是在全模型情况下)
如果您只使用向量而不进行进一步训练,您肯定只想使用 load_facebook_vectors()
选项。
如果您愿意放弃模型为词汇外单词合成新向量的能力,在训练期间没有看到,那么您可以选择只加载来自纯文本 .vec
文件。例如,只加载第一个 500K 向量:
from gensim.models.keyedvectors import KeyedVectors
KeyedVectors.load_word2vec_format('cc.de.300.vec', limit=500000)
因为通常对此类向量进行排序以将更频繁出现的词放在最前面,所以通常丢弃低频词的长尾并不是什么大损失。
我想使用 gensim 从 fasttext 库加载预训练的多语言词嵌入;这里 link 到嵌入:
https://fasttext.cc/docs/en/crawl-vectors.html
特别是,我想加载以下词嵌入:
- cc.de.300.vec (4.4 GB)
- cc.de.300.bin (7 GB)
Gensim 提供了以下两种加载快速文本文件的选项:
gensim.models.fasttext.load_facebook_model(path, encoding='utf-8')
- Load the input-hidden weight matrix from Facebook’s native fasttext .bin output file.
- load_facebook_model() loads the full model, not just word embeddings, and enables you to continue model training.
gensim.models.fasttext.load_facebook_vectors(path, encoding='utf-8')
- Load word embeddings from a model saved in Facebook’s native fasttext .bin format.
- load_facebook_vectors() loads the word embeddings only. Its faster, but does not enable you to continue training.
来源 Gensim 文档: https://radimrehurek.com/gensim/models/fasttext.html#gensim.models.fasttext.load_facebook_model
由于我的笔记本电脑只有 8 GB 内存,我继续收到 MemoryErrors 或加载需要很长时间(最多几分钟)。
是否有选项可以更有效地从磁盘加载这些大型模型?
由于向量通常至少需要与其磁盘存储一样多的可寻址内存,因此将这些向量的全功能版本加载到只有 8GB RAM 的机器中将是一项挑战。特别是:
一旦你开始对这些向量进行最常见的操作——找到目标
most_similar()
单词的列表 word/vector——gensim 实现也会想要缓存一个一组已归一化为单位长度的词向量——这几乎是所需内存的两倍gensim 的 FastText 支持的当前版本(至少通过 3.8.1)也在一些不必要的分配上浪费了一些内存(尤其是在全模型情况下)
如果您只使用向量而不进行进一步训练,您肯定只想使用 load_facebook_vectors()
选项。
如果您愿意放弃模型为词汇外单词合成新向量的能力,在训练期间没有看到,那么您可以选择只加载来自纯文本 .vec
文件。例如,只加载第一个 500K 向量:
from gensim.models.keyedvectors import KeyedVectors
KeyedVectors.load_word2vec_format('cc.de.300.vec', limit=500000)
因为通常对此类向量进行排序以将更频繁出现的词放在最前面,所以通常丢弃低频词的长尾并不是什么大损失。