多标签文档分类

我有一个数据库,我根据以下三个字段存储数据:id,text,{labels}。 请注意,每个文本都已分配给多个label \ tag \ class。 我想构建一个模型(weka \ rapidminer \ mahout),它可以推荐\将一堆标签\ tags \ classes分类到给定的文本。

我听说过SVM和朴素贝叶斯分类器,但不确定它们是否支持多标签分类。 任何引导我走向正确方向的东西都非常受欢迎!

基本的多标记分类方法是一对一(OvR),也称为二元相关(BR)。 基本思想是你采用现成的二元分类器,如Naive Bayes或SVM,然后创建它的K个实例来解决K个独立的分类问题。 在类似Python的伪代码中:

for each class k: learner = SVM(settings) # for example labels = [class_of(x) == k for x in samples] learner.learn(samples, labels) 

然后在预测时,您只需在样本上运行每个二元分类器并收集它们预测为正的标签。

(训练和预测显然可以并行完成,因为假设问题是独立的。请参阅Wikipedia以获取两个进行多标签分类的Java包的链接。)

SVM本质上是一个二元分类器,但是有许多替代方法允许它应用于多标签环境,基本上是通过组合SVM的多个二进制实例。

一些示例在多类部分的SVM维基百科文章中。 我不确定您是否对细节感兴趣,但它们包含在Weka和Rapidminer中。 例如, SMO分类器是将SVM应用于多标签问题的变体之一。

Naive Bayes可以直接应用于多标签环境。

可以建议你一些工具,它们是weka的扩展,可以进行多标签分类。

  1. MEKA:WEKA的多标签扩展
  2. 花木兰:用于多标签学习的Java库

还有一个SVM lib扩展SVMLib 。 如果您对python包感到满意,scikit学习也提供了一个多标签分类

此外,ICML 2013“带有多个标签的高效多标签分类”最近的这篇论文应该可以帮助您实施。 如果你想自己实现一个。