假设我有一个(可能)大型语料库,其中约有2.5M具有500个功能(在使用gensim在原始数据上运行LSI之后)。我需要语料库来训练我的分类器使用scikit-learn。但是,我需要先将语料库转换为numpy数组。语料库创建和分类器培训师使用两种不同的脚本完成。
所以问题是,我的收藏量预计会增长,而且在这个阶段我已经没有足够的内存(机器上有32GB)来同时转换所有内容(使用gensim.matutils.corpus2dense
) 。为了解决这个问题,我一次又一次地转换一个矢量,但速度非常慢。
我考虑过将语料库转储为svmlight格式,并且scikit-learn用sklearn.datasets.load_svmlight_file
加载它。但那可能意味着我需要立即将所有内容加载到内存中?
无论如何我能有效地从gensim语料库转换为numpy数组(或scipy稀疏矩阵)吗?
答案 0 :(得分:1)
我对Gensim不是很了解,所以我不愿意回答,但是这里有:
您的数据不适合内存,因此您必须将其流式传输(基本上就是您现在正在执行的操作)或将其分块。它看起来像gensim.utils.chunkize
为你挑出它,你应该能够通过as_numpy=True
获得所需的密集numpy数组。您必须使用支持partial_fit
的sklearn模型。这些是迭代训练的,一次一批。好的是SGD classifier和Passive-Aggressive Classifier。确保至少在第一次调用partial_fit
时传递classes参数。我建议您阅读out-of-core scaling上的文档。