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