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

标签 python scikit-learn gensim

假设我有一个(可能)大型语料库,其中大约 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 classifierPassive-Aggressive Classifier .确保至少在第一次调用 partial_fit 时传递 classes 参数。 .我建议阅读 out-of-core scaling 上的文档.

关于python - 如何有效地将 Gensim 语料库转换为 numpy 数组(或 scipy 稀疏矩阵)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34540518/

相关文章:

python - 数字列表的格式化输出

Python Youtube-dl 提取无效网址

python - 是否可以在 python 的 for 循环中自动创建变量?

python - 如何评估 scikit 学习 LogisticRegression 的成本函数?

python - 使用 python 的朴素贝叶斯分类器

Python - 数据编码向量到Word

python - 使用 're' 从字符串中提取列表

python - 为什么每次我在这个特定数据集上运行 train-test split 时我的内核都会死掉?

python - 将 Word2Vec 二进制模型从 S3 加载到 Gensim 失败

python - 如何从 gensim word2vec 中提取矩阵 WI 和 WO?