繁体   English   中英

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

[英]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。 这将降低内存需求,同时还允许您对所有数据进行训练,无论数量如何。

编辑

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

这是迭代训练CountVectorizer的解决方案。

该问题包含一个TFIDF实现,该实现不需要将所有数据都加载到内存中。

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

然后,要训练模型,请遵循与最初建议的过程相同的过程,但是没有管道,因为不再需要管道。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM