Python 如何有效地将Gensim语料库转换为numpy数组(或scipy稀疏矩阵)?

Python 如何有效地将Gensim语料库转换为numpy数组(或scipy稀疏矩阵)?,python,scikit-learn,gensim,Python,Scikit Learn,Gensim,假设我有一个(可能的)大型语料库,其中大约有250万个拥有500个特征(在使用gensim对原始数据运行LSI之后)。我需要语料库来训练我的分类器使用scikit学习。但是,我需要首先将语料库转换为numpy数组。语料库创建和分类器训练器是在两个不同的脚本中完成的 所以问题是,我的集合大小预计会增长,而在这个阶段,我已经没有足够的内存(机器上的32GB)来一次性转换所有内容(使用gensim.matutils.corpus2dense)。为了解决这个问题,我一次转换一个又一个向量,但速度非常慢

假设我有一个(可能的)大型语料库,其中大约有250万个拥有500个特征(在使用gensim对原始数据运行LSI之后)。我需要语料库来训练我的分类器使用scikit学习。但是,我需要首先将语料库转换为numpy数组。语料库创建和分类器训练器是在两个不同的脚本中完成的

所以问题是,我的集合大小预计会增长,而在这个阶段,我已经没有足够的内存(机器上的32GB)来一次性转换所有内容(使用
gensim.matutils.corpus2dense
)。为了解决这个问题,我一次转换一个又一个向量,但速度非常慢

我考虑过将语料库转储为svmlight格式,并让scikit学习使用
sklearn.datasets.load_svmlight_文件加载它。但这可能意味着我需要立即将所有内容加载到内存中


有没有什么方法可以有效地将gensim语料库转换为numpy数组(或scipy稀疏矩阵)?

我对gensim不是很了解,所以我不太愿意回答,但下面是:


您的数据不适合内存,因此您必须对其进行流式处理(基本上就是您现在正在做的事情)或将其分块处理。在我看来,像是
gensim.utils.chunkize
为您将其分块,并且您应该能够使用
获得所需的密集numpy数组,如_numpy=True
。您必须使用支持
partial\u-fit
的sklearn型号。这些都是迭代训练的,一次一批。好的是好的和坏的。确保至少在第一次调用
partial\u fit
时传递class参数。我建议您阅读上的文档。

LOL,我昨天在试验chunkize,但我完全忽略了as_numpy facepalm,是的,它已经在使用partial_fit(正在替换scikit learn->gensim中的一些组件)。请注意:既然您已经执行了LSI,您现在就拥有了密集的数据。因此,使用scipy.sparse矩阵输出没有多大意义。一个numpy数组将使用更少的内存来存储完全密集的数据。是的,如果可能的话,需要找到一种快速实现的方法(我现在很头痛,因为在转换整个语料库时我无法重现内存不足的问题)