python - 如何使用 scikit-learn 对大文本数据进行分类?

标签 python machine-learning scikit-learn text-classification

我有一个50GB的大型数据库,其中包含780个专业的486,000篇论文的摘录。 出于科学目的,有必要根据这些数据进行训练。但遗憾的是,资源仅限于移动处理器、16 GB 内存(+ 16Gb SWAP)

使用一组 40,000 个项目(基础的 10%)(4.5 GB)和 SGDClassifier 分类器进行分析,内存消耗约为 16-17 GB。

因此,我向社区寻求这方面的帮助。

目前我的代码类似

text_clf = Pipeline([
     ('count', CountVectorizer()),
     ('tfidf', TfidfTransformer()),
     ('clf', SGDClassifier(n_jobs=8),)
 ],
 )
texts_train, texts_test, cat_train, cat_test = train_test_split(texts, categories_ids, test_size=0.2)
text_clf.fit(texts_train, cat_train)

因此,我寻求有关如何优化此过程的建议,以便我可以处理整个数据库。

最佳答案

您可以利用warm_start=True并调用.partial_fit()(而不是.fit())。

请参阅文档 here对于您正在使用的模型,它分别描述了该参数和函数。

基本上,您一次仅加载一部分数据,通过管道运行它并在循环中调用partial_fit。这将降低内存需求,同时还允许您对所有数据进行训练,无论数据量有多少。

编辑

正如评论中所述,上述循环仅适用于预测模型,因此数据预处理需要单独进行。

Here is a solution for training the CountVectorizer iteratively.

This question contains a TFIDF implementation that doesn't require all of the data to be loaded into memory.

所以最终的解决方案是分两个阶段预处理数据。第一个用于 CountVectorizer,第二个用于 TFIDF 加权。

然后,为了训练模型,您可以按照最初建议的相同流程进行训练,但不使用 Pipeline,因为不再需要 Pipeline。

关于python - 如何使用 scikit-learn 对大文本数据进行分类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56243043/

相关文章:

machine-learning - 如何获得逻辑回归特征对于特定预测的相对重要性?

python - 在Python中读取格式化的多行

python - 如何创建一个模型,每次更改学习率时都从头开始优化?

machine-learning - 卷积神经网络中的过度拟合

以 svmlight 格式导出 numpy/列表的 python 程序

python - roc_auc_score() 和 auc() 的结果不同

python - 使用 matplotlib 同时绘制两个直方图时的不透明度误导

python - OpenAI Gym - 如何打造独热观察空间?

python - 神经网络训练平台中的梯度下降

python - 多标签分类交叉验证错误