使用 weka 进行文本分类

Posted

技术标签:

【中文标题】使用 weka 进行文本分类【英文标题】:Text classification with weka 【发布时间】:2012-03-27 05:41:54 【问题描述】:

我正在使用 Weka 库在 java 中构建一个文本分类器。

首先我删除停用词,然后我使用词干分析器(例如将汽车转换为汽车)。 现在我有 6 个预定义的类别。我训练分类器 每个类别 5 个文件。文档长度差不多。

待分类的文本较短时,结果还可以。但是当文字较长时 100多字结果越来越陌生。

我返回每个类别的概率如下: 概率:

[0.0015560238056109177, 0.1808919321002592, 0.6657404531908249, 0.004793498469427115, 0.13253647895234325, 0.0144816134815]4]

这是一个非常可靠的分类。

但是当我使用超过 100 个单词的文本时,我会得到如下结果:

概率:[1.2863123678314889E-5, 4.3728547754744305E-5, 0.9964710903856974, 5.539960514402068E-5, 0.002993481218084141, 4.234371

哪个好。

现在我使用朴素贝叶斯多项式对文档进行分类。我读过了 关于它,我发现我可以在较长的文本上表现得很奇怪。可能是我现在的问题?

有人知道为什么会这样吗?

【问题讨论】:

培训文件有多长?如果它们很短,那么当输入较长时,分类器可能没有足够的信息。 大约 200-400 字。但是,正如我所说,我每个类别只使用 5 个文档。我认为我应该使用更多文档来更好地分类,但我认为它不会解决问题(当然分类会更准确,但我认为错误仍然存​​在:/) 对于你的 >100 字测试用例,是不是表明分类文档是 P=0.996 的第 3 类?其他数字如此之小这一事实表明被分类的示例绝对不在这些类别中。第 3 类正确吗? 编辑:实际上这似乎是正确的,我认为问题在于培训文件很少。我会尝试添加更多文档,然后再报告。 【参考方案1】:

这种行为可能有多种因素。如果您的训练和测试文本不在同一个域中,则可能会发生这种情况。此外,我相信为每个类别添加更多文档应该会有所帮助。每个类别中的 5 个文档似乎非常少。如果你没有更多的训练文档或者很难有更多的训练文档,那么你可以在你的训练集中综合添加正负实例(详细参见 SMOTE 算法)。随时向我们发布更新。

【讨论】:

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

weka 3.7 explorer 无法对文本进行分类

使用 Weka 进行文本分类

在java中使用朴素贝叶斯(weka)进行简单的文本分类

关于使用独立数据集通过 weka 验证文本分类的问题

Java中使用Weka的基本文本分类

在 Java 中构建/运行流式 Weka 文本分类器