我使用teh gensim框架中的doc2vec模型来表示15 500 000个短文档(最多300个单词)的语料库:
gensim.models.Doc2Vec(sentences, size=400, window=10, min_count=1, workers=8 )
Run Code Online (Sandbox Code Playgroud)
在创建向量之后,有超过18 000 000个向量代表单词和文档.
我想找到给定项目最相似的项目(单词或文档):
similarities = model.most_similar(‘uid_10693076’)
Run Code Online (Sandbox Code Playgroud)
但是在计算相似度时我得到一个MemoryError:
Traceback (most recent call last):
File "article/test_vectors.py", line 31, in <module>
similarities = model.most_similar(item)
File "/usr/local/lib/python2.7/dist-packages/gensim/models/word2vec.py", line 639, in most_similar
self.init_sims()
File "/usr/local/lib/python2.7/dist-packages/gensim/models/word2vec.py", line 827, in init_sims
self.syn0norm = (self.syn0 / sqrt((self.syn0 ** 2).sum(-1))[..., newaxis]).astype(REAL)
Run Code Online (Sandbox Code Playgroud)
我有一台配备60GB Ram和70GB交换机的Ubuntu机器.我检查了内存分配(在htop中),我发现永远不会完全使用内存.我还设置了无限的可能在python中锁定在内存中的最大地址空间:
resource.getrlimit(resource.RLIMIT_MEMLOCK)
Run Code Online (Sandbox Code Playgroud)
有人可以解释这个MemoryError的原因吗?在我看来,可用的内存应该足以进行这种计算.可能是python或OS中的一些内存限制?
提前致谢!