我想用gensim从快速文本库中加载经过预训练的多语言单词嵌入;这里是嵌入链接:
https://fasttext.cc/docs/en/crawl-vectors.html
特别是,我希望加载以下单词嵌入:
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的本机fasttext .bin格式保存的模型中加载单词嵌入。
- load_facebook_vectors()仅加载单词嵌入。它的速度更快,但不能使您继续训练。
Source Gensim文档:https://radimrehurek.com/gensim/models/fasttext.html#gensim.models.fasttext.load_facebook_model
由于我的笔记本电脑只有8 GB的RAM,所以我继续遇到MemoryErrors或加载需要很长时间(最多几分钟)。
是否可以选择从磁盘加载这些大型模型以提高内存效率?
由于矢量通常需要至少与其磁盘存储一样多的可寻址内存,因此将这些矢量的全功能版本加载到仅具有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)
因为通常对此类向量进行排序,以将出现频率较高的词排在首位,所以经常丢弃低频词的长尾巴并不是很大的损失。