[英]How can I classify big text data with scikit-learn?
我有一个容量为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()
)。
有关正在使用的模型的信息,请参见此处的文档,其中分别描述了该参数和函数。
基本上,您一次只加载一部分数据,通过管道运行它,然后在循环中调用partial_fit。 这将降低内存需求,同时还允许您对所有数据进行训练,无论数量如何。
编辑
如评论中所述,上述循环仅适用于预测模型,因此数据预处理将需要单独进行。
该问题包含一个TFIDF实现,该实现不需要将所有数据都加载到内存中。
因此,最终的解决方案是分两个阶段对数据进行预处理。 第一个用于CountVectorizer,第二个用于TFIDF加权。
然后,要训练模型,请遵循与最初建议的过程相同的过程,但是没有管道,因为不再需要管道。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.