文本分类分类器

7

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

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

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

4个回答

5
拥有一个预先训练过的模型意味着用于训练的语料库与您试图分类的文档来自完全相同的领域。通常,这不会给您想要的结果,因为您没有原始语料库。机器学习不是静态的,当您训练分类器时,需要在新功能/信息可用时更新模型。
以新闻文章分类为例,您可能希望在体育/政治/健康/游戏等领域进行分类。首先,是什么语言?我们只谈论英语吗?原始语料库如何标记?最大的未知数是“等等”类别。
训练自己的分类器非常容易。如果您正在对文本进行分类,则MALLET是最佳选择。您可以在不到10分钟的时间内开始使用。您可以在不到1小时的时间内将MALLET添加到自己的应用程序中。
如果您想对新闻文章进行分类,有很多开源语料库可用作基础进行训练。我建议从Reuters-21578或RCV-1开始。

非常感谢你的回答,Shane。我一定会研究你提到的数据集!但是,我只处理英文数据,并且是新闻文章的通用领域(类似于Alchemy和OpenCalais所分类的)。我会尝试使用MALLET。 - MFARID
好的,请告诉我如果您有任何问题! - Shane

2
有很多分类器可供选择,具体取决于您的需求。首先,我认为您可能希望缩小一下使用分类器的范围。
训练是分类步骤的一部分,我不认为您会找到很多预训练的分类器。此外,训练几乎总是分类的简单部分。
话虽如此,实际上有很多资源可以查看。我不能假装这是我的功劳,但这是其中一个例子:
Weka - 是用于数据挖掘的机器学习算法集合。它是最受欢迎的文本分类框架之一。它包含了各种算法的实现,包括朴素贝叶斯和支持向量机(SVM,在SMO下列出)[注:其他常用的非Java SVM实现包括SVM-Light、LibSVM和SVMTorch]。一个相关的项目是Kea(关键短语提取算法),它是一种从文本文档中提取关键短语的算法。
Apache Lucene Mahout - 一个孵化器项目,旨在在Hadoop MapReduce框架之上创建高度可扩展的常见机器学习算法的分布式实现。
来源:http://www.searchenginecaffe.com/2007/03/java-open-source-text-mining-and.html

谢谢你的回答,Hearty。 - MFARID

2
你所说的分类非常重要。分类是一项监督任务,需要预先标记好的语料库。从已标记的语料库中,您需要使用多种方法和方法创建模型,最后可以使用该模型对未标记的测试语料库进行分类。如果是这种情况,您可以使用多类分类器,通常是二进制分类器的二叉树应用程序。这种任务的最先进方法是使用机器学习的一个分支SVM。两个最好的SVM分类器是LibSVM和SVMlight。它们是开源的,易于使用,并包括多类分类工具。最后,您需要进行文献调查,以了解如何获得良好的结果,因为仅使用这些分类器是不够的。您需要在处理语料库时操作/预处理以提取信息承载部分(例如unigrams)并排除噪声部分。总的来说,您可能还有很长的路要走,但自然语言处理是一个非常有趣和值得研究的主题。
但是,如果您所说的分类是聚类,则问题会更加复杂。聚类是一项无监督任务,这意味着您将不向使用的程序提供关于哪个示例属于哪个组/主题/类的信息。还有关于混合半监督方法的学术工作,但它们与聚类问题的真实目的有些分歧。您需要在操作语料库时使用的预处理与分类问题中所需的内容具有相似的性质,因此我不会再次提及它。为了进行聚类,您必须遵循几种方法。首先,您可以使用LDA(潜在狄利克雷分配)方法来降低语料库的维数(特征空间的维数),这将有助于效率和从特征中获取信息。在或之后,您可以使用层次聚类或类似的其他方法,例如K-Means,对未标记的语料库进行聚类。您可以使用Gensim或Scikit-Learn作为开源工具进行聚类。两者都是功能强大,文档完善且易于使用的工具。
在所有情况下,请阅读大量学术论文并尝试理解这些任务和问题背后的理论。通过这种方式,您可以针对您正在处理的特定问题提出创新和有效的解决方案,因为NLP中的问题通常依赖于语料库,并且在处理特定问题时通常处于孤立状态。很难找到通用和即用型的解决方案,我也不建议依赖这样的选项。
祝你好运=)

非常好的答案!非常感谢。 我很清楚分类的概念。我正在寻找一种监督式方法,但希望使用预训练模型。 - MFARID
1
模型是分类工作的主要成果;所有其他事项都是为了创建符合您需求的好模型。在这个意义上,试图寻找一个可即用的模型是没有意义的,而且很可能不可能实现。这主要是因为您所尝试实现的任务、您正在处理的语料库、您需要的效率以及所有其他方面都将是独特的,与您和您的情况有关;因此,找到一个能够满足您目标的模型纯属运气问题。我的建议是尽快动手尝试,祝你好运 =) - clancularius

0

1
非常感谢,但它们都不进行文本分类。 - MFARID
不确定这是否适合您的需求: https://cwiki.apache.org/MAHOUT/bayesian.html 同时引用一个与其源代码一同提供的例子。 https://cwiki.apache.org/MAHOUT/wikipedia-bayes-example.html - Arun A K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接