系统相关
首页 > 系统相关> > 使用gensim加载word2vec时出现内存错误

使用gensim加载word2vec时出现内存错误

作者:互联网

我正在使用gensim库从GoogleNews数据集中加载经过训练的单词向量.该数据集包含300万个维度的3000000个词向量.当我想加载GoogleNews数据集时,出现内存错误.我曾经尝试过此代码而没有内存错误,而且我不知道为什么现在会收到此错误.
我已经检查了很多网站来解决此问题,但我无法理解.
这是我加载GoogleNews的代码:

import gensim.models.keyedvectors as word2vec
model=word2vec.KeyedVectors.load_word2vec_format("GoogleNews-vectors-negative300.bin",binary=True)

这是我收到的错误:

File "/home/mahsa/PycharmProjects/tensor_env_project/word_embedding_DUC2007/inspect_word2vec-master/word_embeddings_GoogleNews.py", line 8, in <module>
    model=word2vec.KeyedVectors.load_word2vec_format("GoogleNews-vectors-negative300.bin",binary=True)
  File "/home/mahsa/anaconda3/envs/tensorflow_env/lib/python3.5/site-packages/gensim/models/keyedvectors.py", line 212, in load_word2vec_format
    result.syn0 = zeros((vocab_size, vector_size), dtype=datatype)
MemoryError

有谁能够帮助我?谢谢.

解决方法:

仅加载原始向量将需要…

3,000,000字* 300尺寸* 4字节/维= 3.6GB

…的可寻址内存(加上字键到索引位置映射的一些开销).

此外,一旦您要执行most_similar()类型的操作,就会创建矢量的单位长度归一化版本-这将需要另外3.6GB. (如果只在单位范数向量之间进行余弦相似度比较,则可以通过先执行强制显式model.init_sims(replace = True)来代替原始向量,节省额外的内存.)

因此,您通常只希望在具有至少8GB RAM的计算机上执行全部操作. (在全数组most_like()查找期间进行任何交换都会使操作非常缓慢.)

如果其他任何原因正在使用Python堆空间,则可能是造成您看到的MemoryError的原因.

load_word2vec_format()方法还具有可选的limit参数,该参数将仅加载提供的向量数量-因此您可以使用limit = 500000将内存需求减少约5/6倍. (而且,由于GoogleNews和其他向量集通常按频率从高到低的顺序排列,因此您会获得500K的频率最高的词.频率较低的词的价值通常要低得多,甚至不如矢量,因此忽略它们可能不会造成太大伤害.)

标签:word-embedding,gensim,word2vec,python,google-news
来源: https://codeday.me/bug/20191025/1926460.html