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

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

第一次出现MemoryError错误

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

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

第二次出现MemoryError错误

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

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

提示报错:


Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  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
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值