使用 python 和 nltk 进行多类文本分类

Posted

技术标签:

【中文标题】使用 python 和 nltk 进行多类文本分类【英文标题】:Multiclass text classification with python and nltk 【发布时间】:2018-05-13 13:43:36 【问题描述】:

我的任务是将给定的新闻文本数据分类为以下 5 个类别之一 - 商业、体育、娱乐、科技和政治 关于我正在使用的数据: 由标记为 5 种新闻声明之一的文本数据组成(密件抄送新闻数据) 我目前正在使用带有 nltk 模块的 NLP 来计算训练数据中每个单词相对于每个类别(停用词除外)的频率分布。 然后我通过计算所有单词相对于这 5 个类别中的每一个的权重总和来对新数据进行分类。权重最大的类作为输出返回。 这是实际的code。 该算法确实可以准确地预测新数据,但我有兴趣了解我可以实施的其他一些简单算法以实现更好的结果。我使用朴素贝叶斯算法将数据分为两类(垃圾邮件或非垃圾邮件等),如果这是一个可行的解决方案,我想知道如何实现它以进行多类分类。 谢谢。

【问题讨论】:

【参考方案1】:

在分类中,尤其是在文本分类中,选择正确的机器学习算法通常是在选择正确的特征之后。特征依赖于领域,需要有关数据的知识,但与调整或选择算法和参数相比,良好的质量会带来更好的系统。

在您的情况下,您可以像已经说过的那样使用词嵌入,但您也可以设计自己的自定义功能,您认为这些功能将有助于区分类(无论类的数量是多少)。例如,您认为垃圾邮件通常是如何呈现的?很多错误,句法倒置,糟糕的翻译,标点符号,俚语......很多可能性!尝试从体育、商业、新闻等方面考虑您的案例。

您应该尝试一些创建/组合特征的新方法,然后选择最佳算法。另外,请查看词频以外的其他加权方法,例如 tf-idf。

【讨论】:

【参考方案2】:

由于您处理单词,我建议使用单词嵌入,这可以让您更深入地了解单词 W.R.T 数据集的关系/含义,从而更好地进行分类。

如果您正在寻找分类的其他实现,请查看我的示例代码 here,这些来自 scikit-learn 的模型可以轻松处理多类,请查看 here 的 scikit-learn 文档。

如果你想要一个易于使用的围绕这些分类的框架,你可以查看我的 rasa-nlu,它使用 spacy_sklearn 模型,示例实现代码是here。您所要做的就是以给定的格式准备数据集并训练模型。

如果您想要更多智能,可以查看我的 keras 实现 here,它使用 CNN 进行文本分类。

希望这会有所帮助。

【讨论】:

以上是关于使用 python 和 nltk 进行多类文本分类的主要内容,如果未能解决你的问题,请参考以下文章

SVM 多类文本分类

使用预先训练的BERT模型对多类文本分类进行错误分类

scikits learn 和 nltk:朴素贝叶斯分类器性能差异很大

在 NLTK/Python 中使用电影评论语料库进行分类

使用 PHP 进行文本挖掘 [关闭]

python [NLTK实现TF-IDF]#TF-IDF#算法#数据挖掘#文本挖掘#文本分类