我想用gensim从fasttext库中加载预先训练的多语言单词嵌入;这里是嵌入的链接:
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')
- 从Facebook的原生快速文本加载输入隐藏的权重矩阵 .bin输出文件。
- load_facebook_model(( 加载完整模型,而不仅仅是 词嵌入,并使您能够继续模型训练。
-
gensim.models.fasttext.load_facebook_vectors(path, encoding='utf-8')
- 从以 Facebook 原生快速文本.bin格式保存的模型中加载单词嵌入。
- load_facebook_vectors(( 仅加载词嵌入。它更快,但不能让你继续训练。
源 Gensim 文档: https://radimrehurek.com/gensim/models/fasttext.html#gensim.models.fasttext.load_facebook_model
由于我的笔记本电脑只有 8 GB RAM,因此我继续收到内存错误或加载需要很长时间(最多几分钟(。
是否有选项可以从磁盘加载这些大型模型,以提高内存效率?
由于矢量通常至少占用与其磁盘存储一样多的可寻址内存,因此将这些矢量的全功能版本加载到只有 8GB RAM 的机器中将具有挑战性。特别:
-
一旦你开始对这样的向量进行最常见的操作——查找目标词/向量
。most_similar()
词的列表——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)
由于此类向量通常被排序为将更频繁出现的单词放在首位,因此通常丢弃低频单词的长尾并不是一个很大的损失。