我正在尝试使用gensim来训练Doc2Vec模型,它有114M个独特的文档/标签和大约3M个单词的voab大小。我在Azure上有115gbramlinux机器。 当我运行build_vocab时,迭代器解析所有文件,然后抛出内存错误,如下所示。在
Traceback (most recent call last):
File "doc_2_vec.py", line 63, in <module>
model.build_vocab(sentences.to_array())
File "/home/meghana/.local/lib/python2.7/site-packages/gensim/models/word2vec.py", line 579, in build_vocab
self.finalize_vocab(update=update) # build tables & arrays
File "/home/meghana/.local/lib/python2.7/site-packages/gensim/models/word2vec.py", line 752, in finalize_vocab
self.reset_weights()
File "/home/meghana/.local/lib/python2.7/site-packages/gensim/models/doc2vec.py", line 662, in reset_weights
self.docvecs.reset_weights(self)
File "/home/meghana/.local/lib/python2.7/site-packages/gensim/models/doc2vec.py", line 390, in reset_weights
self.doctag_syn0 = empty((length, model.vector_size), dtype=REAL)
MemoryError
我的代码-
^{pr2}$按top计算的内存使用量为-
有人能告诉我预期内存是多少吗?什么是更好的选择-添加交换空间并减慢进程或添加更多内存,这样集群的成本最终可能相等。 gensim在内存中存储什么向量?我在内存效率使用中丢失的任何标志。在
1.14亿个doctag至少需要
114,000,000 doctags * 300 dimensions * 4 bytes/float = 136GB
来存储训练期间的原始doctag向量。在(如果doctag键
row['Id']
是字符串,那么记住字符串到int索引映射dict会有额外的开销。如果doctag键是0到1.14亿的原始整数,这将避免填充该dict。如果doctag键是原始int,但包含任何大于1.14亿的int,模型将尝试分配一个足够大的数组,以包含一行最大的int–即使许多其他较低的int未使用)原始单词向量和模型输出层(
model.syn1
)将需要大约8GB的空间,而词汇词典需要另外几个GB。在因此,理想情况下,您需要更多的可寻址内存,或者更小的doctag集。在
您提到了一个“集群”,但是gensim
Doc2Vec
不支持多机分发。在对于这些算法来说,使用交换空间通常不是一个好主意,因为这些算法可能涉及大量的随机访问,因此在交换过程中变得非常缓慢。但是对于Doc2Vec,您可以使用
Doc2Vec.__init__()
可选参数docvecs_mapfile
,将其doctags数组设置为由内存映射文件提供服务。如果每个文档都有一个标记,并且这些标记在每次重复扫描培训文本时以相同的升序出现,则性能可以接受。在单独:
你对训练迭代和
alpha
学习率的管理是有缺陷的。您将在数据上实现2次传递,值分别为0.025和0.023,即使每个train()
调用都尝试默认的5次传递,但只从不可重新启动的sentences.to_array()
对象获取一次迭代。在您应该争取更多的传递,模型用更少的代码行来管理
alpha
从最初的高值到默认的最终微小值min_alpha
值。您只需要调用train()
一次,除非您绝对确定需要在多个调用之间执行额外的步骤。(此处显示的内容不需要此功能。)通过将
to_array()
更改为__iter__()
,然后将sentences
单独传递给模型,从而使sentences
成为可以多次迭代的真正的iterable对象。在然后用这个multiply-iterable对象调用一次
train()
,并让它用从高到低的平滑alpha
更新来完成指定次数的迭代。(从Word2Vec
继承的默认值是5次迭代,但是在已发布的Doc2Vec
工作中通常使用10到20次迭代。0.0001的默认值min_alpha
几乎不应更改。)相关问题 更多 >
编程相关推荐