首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于gensim的快速文本库中预训练词嵌入的有效存储

基于gensim的快速文本库中预训练词嵌入的有效存储
EN

Stack Overflow用户
提问于 2019-12-11 09:29:46
回答 1查看 4.5K关注 0票数 3

我想用gensim从快速文本库加载经过预先训练的多语种单词嵌入;在这里,链接到嵌入:

https://fasttext.cc/docs/en/crawl-vectors.html

特别是,我想加载以下单词嵌入:

  • cc.de.300.vec (4.4 GB)
  • cc.de.300.bin (7 GB)

Gensim提供了以下两个加载快速文本文件的选项:

  1. gensim.models.fasttext.load_facebook_model(path, encoding='utf-8')

代码语言:javascript
运行
复制
- _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._

  1. gensim.models.fasttext.load_facebook_vectors(path, encoding='utf-8')

代码语言:javascript
运行
复制
- _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

因为我的笔记本只有8GB内存,所以我继续获得MemoryErrors,或者加载需要很长时间(最多几分钟)。

是否有一个选项可以从磁盘加载这些大型模型,以提高内存效率?

EN

Stack Overflow用户

回答已采纳

发布于 2019-12-11 19:54:18

由于向量通常需要的可寻址内存至少与其磁盘上存储的内存一样多,因此将这些矢量的全功能版本加载到只有8GB RAM的机器上是很困难的。特别是:

一旦您开始对这些向量执行最常见的操作--找到目标单词/向量的most_similar()单词列表-- gensim实现还需要缓存一组已标准化为单位长度的单词向量,这几乎使gensim当前版本的

  • 当前版本的FastText支持(至少通过3.8.1)增加了一倍,而且在一些不必要的分配(特别是在完全模型的情况下)上浪费了一些内存(特别是在完全模型的情况下)-

如果您只使用向量,而不进行进一步的培训,那么您肯定希望只使用load_facebook_vectors()选项。

如果您愿意放弃模型的能力来合成新的向量,而不是在训练中看到的,那么您可以选择从纯文本.vec文件中只加载一个完整单词向量的子集。例如,仅加载第1 500 K向量:

代码语言:javascript
运行
复制
from gensim.models.keyedvectors import KeyedVectors
KeyedVectors.load_word2vec_format('cc.de.300.vec', limit=500000)

由于这类向量通常被排序为将频繁出现的单词放在第一位,所以经常丢弃低频单词的长尾并不是很大的损失。

票数 5
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59282572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档