解决gensim训练word2vec模型时,出现的MemoryError问题

最近在看52nlp大神的“我爱自然语言处理”,学习用gensim对中文维基百科训练Word2Vec模型,并进行词语相似度测试实验。(52nlp 原文链接)
但是在学习过程中,出现了两次MemoryError问题

第一次出现MemoryError错误

是在完成语料处理后,进行Word2Vec模型训练时。百度了下,原因是因为内存不足造成的。因为我下载的中文维基百科的语料库有1.6G,在gensim训练过程中,会把语料库一次性全部加载进内存,再进行训练。这样导致了我的内存泄漏。

  1. 一种解决方法是增大内存。
    我是在win10上VMware 虚拟机上安装的Ubuntu 16.04跑数据的。起初分给虚拟机的内存是2G。于是,我关闭虚拟机,在虚拟机的内存设置上,重新设置,给了它4G内存。重新训练,结果成功了。
    解决gensim训练word2vec模型时,出现的MemoryError问题_第1张图片
  2. 另一种方法是进行增量式训练。
    在训练过程中,为防止将语料库全部一次性加载进内存,可以进行“增量训练”,详细方法请见(增量式训练方法)

第二次出现MemoryError错误

是在完成Word2Vec训练后,进行词语相似度测试时。
词语相似度测试输入:

result = model.most_similar(u"足球")

提示报错:


Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/local/lib/python2.7/dist-packages/gensim/utils.py", line 1422, in new_func1
    return func(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/gensim/models/base_any2vec.py", line 1397, in most_similar
    return self.wv.most_similar(positive, negative, topn, restrict_vocab, indexer)
  File "/usr/local/lib/python2.7/dist-packages/gensim/models/keyedvectors.py", line 509, in most_similar
    self.init_sims()
  File "/usr/local/lib/python2.7/dist-packages/gensim/models/keyedvectors.py", line 1366, in init_sims
    self.vectors_norm = (self.vectors / sqrt((self.vectors ** 2).sum(-1))[..., newaxis]).astype(REAL)
MemoryError

最后在Stack Overflow上找到了解决方法,详细原因请看原文链接
在加载完Word2Vec模型后,接着输入这一行命令:

model.init_sims(replace = True)

再进行后面的词语相似度测试即可。

import gensim
model = gensim.models.Word2Vec.load("wiki.zh.text.model")
model.init_sims(replace = True)
result = model.most_similar(u"足球")
for e in result:
... print e[0], e[1]
... 
篮球 0.547997295856
国际足球 0.54090988636
足球队 0.534509539604
排球 0.530300378799
足球运动 0.510217189789
男子篮球 0.509523808956
体育 0.492776930332
国家足球队 0.487021923065
橄榄球 0.483965396881
板球 0.478946506977

你可能感兴趣的:(gensim,MemoryError,Word2Vec,NLP)