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

Posted

技术标签:

【中文标题】在 Java 中构建/运行流式 Weka 文本分类器【英文标题】:Building/Running a Streaming Weka Text Classifer in Java 【发布时间】:2011-11-05 00:02:25 【问题描述】:

我们一直在使用 Weka Explorer GUI 来构建一些分类器模型。现在测试已经完成,我们想在 Java 应用程序中实现这个模型,以便它可以接收新消息。

所以对于新消息,我们需要对消息进行标记,将消息中的标记与用于为模型构建词向量的标记匹配,然后将这个词向量解析到模型。

我们应该如何进行这个过程?有没有可用的例子?

我们如何处理新标记(即出现在新文本消息中的单词,它们不属于用于构建模型的单词向量的一部分)?

对于分类器预处理/分词,我们使用 NGram 分词器、词干提取器和 IDF 变换。因此,我们需要弄清楚如何执行这些步骤,然后才能根据要分类的文本创建新实例。

作为一个方面 在资源管理器中构建分类器时,在更多选项下有一个按钮可以选择“输出分类器代码”,这听起来像是输出 Java 源代码来构建和使用模型,但是此选项被禁用。用许多不同的分类器(RF,NB)测试,它没有改变。我猜它没有为这些实现?

干杯!

【问题讨论】:

【参考方案1】:

据我所知,当新的训练样本到来时,您需要重新训练 weka 分类器。我不知道 Wekka 中有在线分类算法。

ps。 Weka 是基于 Java 的,因此您可以在应用程序中使用它的库。这是一个很好的例子:http://weka.wikispaces.com/Use+WEKA+in+your+Java+code。

【讨论】:

谢谢。我知道没有重新训练就无法添加新的训练样本(尽管某些分类器模型是可更新的)。但是对未标记的新消息进行分类(即没有标签的测试集)。对于分类器,我们使用 NGram Tokenizer、Stemmer 和 IDF Transform。因此,我们需要弄清楚如何执行这些步骤,然后才能根据要分类的文本创建新实例。 对我来说不是很清楚,你的问题是什么。据我了解,您有一个用于处理新消息的文本处理管道。你知道 wekka 是如何工作的,你可以将它嵌入到你的 java 应用程序中。所以现在,您正在寻找一种方法来处理新消息中不可预见的令牌。我理解正确吗?

以上是关于在 Java 中构建/运行流式 Weka 文本分类器的主要内容,如果未能解决你的问题,请参考以下文章

使用 weka 进行文本分类

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

weka 文本分类

weka中的一元类文本分类?

使用 Weka 进行文本分类

如何在 Weka 构建的决策树中找到特征重要性