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

标签 python word2vec gensim word-embedding google-news

我正在使用 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/

相关文章:

java - python 与 java 运行时足迹

python - 在 Python 中从 BaseHTTPServer 下载带有 unicode 字符的文件

machine-learning - 如何以不同的方式使用词嵌入/word2vec ..?使用实际的物理词典

python - Gensim:如何将 LDA 模型生成的主题保存为可读格式(csv、txt 等)?

python gensim 从 doc2vec taggedlinedocument 中检索原始句子

python - 确定三角形内的所有离散点

python - 使用标量的 SymPy 替换不起作用?

python - 如何找到有意义的词来表示从 word2vec 向量派生的每个 k-means 聚类?

python - 为什么 tf.random.log_uniform_candidate_sampler 给出真正的类?

python - 类似 Siri 的应用程序 : calculating similarities between a query and a predefined set of control phrases