gensim 作者主题模型内存问题

8qgya5xd  于 4个月前  发布在  其他
关注(0)|答案(1)|浏览(59)

简介

最近,我经常收到关于ATM的负面反馈。
主要原因是内存问题(消耗过多的内存),相关的邮件列表线程(最新):

  • https://groups.google.com/forum/#!searchin/gensim/author|sort:date/gensim/gG7aiNI1v-Y/SWPMuP8BAwAJ
  • https://groups.google.com/forum/#!topic/gensim/wI3x1fqR5wk

我决定找出发生了什么。

调查

我基于https://groups.google.com/forum/#!searchin/gensim/author|sort:date/gensim/gG7aiNI1v-Y/SWPMuP8BAwAJ的作者提供的数据运行ATM(目前我无法发布它,我正在等待其所有者的许可)。
数据的基本统计信息:

  • 字典大小:12211
  • author2docMap的大小:106133
  • author2docMap的大小:73248

我使用调试器运行它,发现最耗内存的地方在这里:
https://github.com/RaRe-Technologies/gensim/blob/f9669bb8a0b5b4b45fa8ff58d951a11d3178116d/gensim/models/atmodel.py#L680-L684
当进程已经消耗了8GB的RAM时,我停止了它,并在表格中呈现了一些有用的统计信息。
| expr | value | comment |
| ------------ | ------------ | ------------ |
| len(author2doc.keys()) | 106133 | |
| author2doc.keys().index(_) | 3649 | 当前处理元素的索引,即106133中的3649(约占总数的3%) |
| len(train_corpus_idx) | 1119955735 | train_corpus_idx 是最大的内存消耗者。在这里,我们实际上将整个语料库加载到内存中(这并不是“在线”或“批处理”处理) |
通过简单的计算,当循环完成时,过程将消耗~232GB of RAM
这绝对是不可接受的,甚至不允许在某些学习任务上使用模型(我甚至不谈论“真正的”任务)。
@olavurmortensen,你能调查一下这个问题吗?这是非常关键的?
相关PR - #893

dfddblmv

dfddblmv1#

更新:

  1. 不幸的是,Olavur没有时间解决这个问题
  2. 关于ATM的更多信息可以在这里找到:http://www2.imm.dtu.dk/pubdb/views/edoc_download.php/6971/pdf/imm6971.pdf

相关问题