文本分类分类器

Posted

技术标签:

【中文标题】文本分类分类器【英文标题】:text categorization classifiers 【发布时间】:2013-02-22 20:43:11 【问题描述】:

有人知道好的开源文本分类模型吗?我知道 Stanford Classifier、Weka、Mallet 等,但它们都需要培训。

我需要将新闻文章分类为体育/政治/健康/游戏/等。有没有预训练好的模型?

Alchemy、OpenCalais 等不是选项。我需要开源工具(最好是 Java)。

【问题讨论】:

【参考方案1】:

拥有预训练模型假设用于训练的语料库与您尝试分类的文档来自完全相同的域。通常,这不会给您想要的结果,因为您没有原始语料库。机器学习不是静态的,当你训练一个分类器时,你需要在新的特征/信息可用时更新模型。

例如在体育/政治/健康/游戏/等领域对新闻文章进行分类。

首先是什么语言?我们只是在谈论英语吗?原始语料库是如何标记的?而最大的未知数是 etc. 类别。

训练你自己的分类器真的很容易。如果要对文本进行分类,MALLET 是最佳选择。您可以在 10 分钟内启动并运行。您可以在 1 小时内将 MALLET 添加到您自己的应用程序中。

如果您想对新闻文章进行分类,可以使用很多开源语料库作为开始培训的基础。我将从 Reuters-21578 或 RCV-1 开始。

【讨论】:

非常感谢 Shane 的回答。我一定会调查你提到的数据集!但是,是的,我只研究英语数据和新闻文章的一般领域(类似于 Alchemy 和 OpenCalais 分类的那些)。我会给 MALLET 一个机会。 如果您有任何问题,请告诉我!【参考方案2】:

根据您的需要,有很多分类器。首先,我认为您可能想缩小您想对分类器做什么。

而训练是分类步骤的一部分,我认为您不会找到太多预先训练好的分类器。此外,训练几乎总是分类的简单部分。

话虽如此,实际上您可以查看很多资源。我不能假装承认这一点,但这是其中一个例子:

Weka - 是机器的集合 数据挖掘的学习算法。它是最受欢迎的之一 文本分类框架。它包含广泛的实现 各种算法,包括朴素贝叶斯和支持向量 机器(SVM,列在 SMO 下)[注:其他常用的非 Java SVM 实现是 SVM-Light、LibSVM 和 SVMTorch]。一个相关的 项目是 Kea (Keyphrase Extraction Algorithm) 的一种算法 从文本文档中提取关键词。

Apache Lucene Mahout - 创建高度可扩展的孵化器项目 常见机器学习算法的分布式实现 Hadoop map-reduce 框架的顶部。

来源:http://www.searchenginecaffe.com/2007/03/java-open-source-text-mining-and.html

【讨论】:

谢谢你的回答。【参考方案3】:

你所说的分类是非常重要的。

分类是一项监督任务,它需要预先标记好的语料库。从已经标记的语料库开始,您必须使用多种方法和方法创建模型,最后您可以使用该模型对未标记的测试语料库进行分类。如果是这种情况,您可以使用多类分类器,这通常是二元分类器的二叉树应用程序。此类任务的最先进方法是使用机器学习的一个分支,SVM。两个最好的 SVM 分类器是 LibSVMSVMlight。这些是开源的、易于使用的并且包括多类分类工具。最后,您必须进行文献调查,以了解除了获得良好结果之外还需要做什么,因为仅使用这些分类器是不够的。您必须操作/预处理您的语料库,以提取包含信息的部分(例如 unigrams)并排除噪声部分。一般来说,你很可能还有很长的路要走,但 NLP 是一个非常有趣的话题,值得研究。

但是,如果您所说的分类是聚类,那么问题会更加复杂。聚类是一项无监督任务,这意味着您不会在您正在使用的程序中包含有关哪个示例属于哪个组/主题/类的信息。也有关于混合半监督方法的学术工作,但它们与聚类问题的真正目的有点不同。在处理语料库时需要使用的预处理与在分类问题中必须做的事情具有相似的性质,因此我不再赘述。要进行聚类,您必须遵循几种方法。首先,您可以使用 LDA (Latent Dirichlet Allocation) 方法来降低语料库的维数(特征空间的维数),这将有助于提高效率和从特征中获取信息。在 LDA 旁边或之后,您可以使用 Hierarchical Clustering 或类似的其他方法,例如 K-Means 来对未标记的语料库进行聚类。您可以使用 GensimScikit-Learn 作为集群的开源工具。两者都是功能强大、文档齐全且易于使用的工具。

在所有情况下,都要进行大量的学术阅读,并尝试理解这些任务和问题背后的理论。通过这种方式,您可以针对您具体处理的问题提出创新且有效的解决方案,因为 NLP 中的问题通常依赖于语料库,并且您在处理特定问题时通常是靠自己的。很难找到通用且即用型的解决方案,我也不建议依赖这样的选择。

我可能过度回答了你的问题,对于不相关的部分,我深表歉意。

祝你好运=)

【讨论】:

很好的答案!非常感谢。我很清楚分类。我正在寻找一种有监督的方法,但使用的是预训练模型 模型是你分类工作的主要成果;所有其他事情都是为了创建一个适合您需求的好模型。从这个意义上说,试图找到一个现成的模型是无关紧要的,而且很可能是不可能的。这主要是因为您要完成的任务、您正在处理的语料库、您需要的效率以及所有其他方面对于您和您的案例都是独一无二的;因此,找到满足您目标的模型纯属运气问题。我的建议是尽快弄脏你的手,祝你好运=)【参考方案4】:

OpenNLP 有很多预训练模型

http://opennlp.sourceforge.net/models-1.5/

【讨论】:

非常感谢,但他们都不做文本分类 不确定这是否适合您的需求cwiki.apache.org/MAHOUT/bayesian.html 还引用了一个随其来源一起提供的示例。 cwiki.apache.org/MAHOUT/wikipedia-bayes-example.html

以上是关于文本分类分类器的主要内容,如果未能解决你的问题,请参考以下文章

文本分类任务的最佳 scikit 分类器

如何使用分类器算法对单个文本进行分类

朴素贝叶斯文本分类器 - 确定何时应将文档标记为“未分类”

使用 scikit-learn 进行多标签文本分类,使用哪些分类器?

使用gensim和sklearn搭建一个文本分类器:文档向量化

如何评估我自己的文本分类器