我正在使用 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
有人能帮帮我吗?谢谢。
最佳答案
仅加载原始向量需要...
3,000,000 个单词 * 300 个维度 * 4 个字节/维度 = 3.6GB
...可寻址内存(加上单词键到索引位置映射的一些开销)。
此外,只要您想要执行 most_similar()
类型的操作,就会创建向量的单位长度规范化版本——这将需要另外 3.6GB。 (如果您只在单位范数向量之间进行余弦相似性比较,则可以通过首先执行强制显式 model.init_sims(replace=True )
。)
因此,您通常只想在内存至少为 8GB 的机器上执行全部操作。 (在全数组 most_similar()
查找期间的任何交换都会使操作非常缓慢。)
如果有其他东西在使用 Python 堆空间,那可能就是您看到的 MemoryError
的原因。
load_word2vec_format()
方法还有一个可选的 limit
参数,它只会加载提供的向量数量——因此您可以使用 limit=500000
将内存需求减少大约 5/6。 (而且,由于 GoogleNews
和其他向量集通常是从最常用词到最不常用词排序的,因此您将获得 500K 个最常用词。频率较低的词通常值(value)较低,即使是不太好的向量,所以忽略它们可能不会造成太大伤害。)
关于python - 使用gensim加载word2vec时出现内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50478046/