5

我正在使用 gensim 库从 GoogleNews 数据集中加载预训练的词向量。该数据集包含 3000000 个词向量,每个词向量 300 个维度。当我想加载 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

有谁能够帮我?谢谢。

4

4 回答 4

7

仅加载原始向量将需要...

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

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

此外,只要您想要执行most_similar()-type 操作,就会创建向量的单位长度标准化版本——这将需要另外 3.6GB。(如果您只在单位范数向量之间进行余弦相似性比较,则可以改为将原始向量破坏到位,从而节省额外的内存,首先执行强制显式model.init_sims(replace=True).)

因此,您通常只想在至少有 8GB RAM 的机器上执行完整操作。(在全数组most_similar()查找期间进行任何交换都会使操作变得非常缓慢。)

如果其他任何东西都在使用 Python 堆空间,那可能是MemoryError您看到的原因。

load_word2vec_format()方法还有一个可选limit参数,它只会加载提供的向量数量——因此您可以使用它limit=500000来减少大约 5/6 的内存需求。(而且,由于 theGoogleNews和其他向量集通常是从最频繁的词到最不频繁的词排序的,所以你会得到 500K 最频繁的词。低频词的价值通常要小得多,甚至不是那么好的向量,所以忽略它们可能不会有太大的伤害。)

于 2018-05-23T20:10:25.490 回答
1

要加载整个模型,需要更大的 RAM。

您可以使用以下代码。设置系统可以接受的限制。它将加载文件顶部的向量。

from gensim import models

w = models.KeyedVectors.load_word2vec_format(r"GoogleNews-vectors-negative300.bin.gz", binary=True, limit = 100000)

我将限制设置为 100,000。它适用于我的 4GB RAM 笔记本电脑。

于 2020-12-07T10:24:19.870 回答
0

尝试关闭所有浏览器选项卡和其他所有占用 RAM 的内容。对我来说,这很有效。

于 2020-03-24T15:58:41.190 回答
0

你应该增加它可以工作的RAM

于 2020-04-17T06:08:03.107 回答