3

我有很多文本数据,我想进行分类。我按块递增地获取这些数据(例如 500 个示例)。我想用这些块在 NLTK 中训练 NaiveBayesClassifier,但要进行零碎的训练。

我可以用一个夹头执行训练 NaiveBayesClassifier,然后用于训练下一个块等吗?

我在文档中找不到这个问题的答案。

4

3 回答 3

1

您可能应该使用 scikit-learn 的 NLTK 包装器并使用 scikit-learn 提供的朴素贝叶斯实现。这个支持进行部分拟合,这正是你想要的:一次只训练一部分数据。

参考资料:http ://www.nltk.org/_modules/nltk/classify/scikitlearn.html和http://scikit-learn.org/stable/modules/naive_bayes.html

于 2014-03-16T14:17:09.987 回答
0

我能想到2个选项:

  1. 定期根据新数据重新训练分类器。您将在语料库中积累新的训练数据(已经包含原始训练数据),然后每当您获得下一个块时,重新训练并重新加载分类器。这可能是最简单的解决方案。

  2. 外部化内部模型,然后手动更新。NaiveBayesClassifier可以通过给它 a 和 label_prodista来直接创建feature_probdist。您可以单独创建它们,将它们传递给 a NaiveBayesClassifier,然后在新数据进入时更新它们。分类器将立即使用这些新数据。您必须查看 train 方法以获取有关如何更新特定案例/需求的概率分布的详细信息。

如果您使用选项 2 ,并且不介意为了水平可扩展性而牺牲一点ProbDistI速度,则可以通过创建一个使用 Redis 哈希进行存储/查找的子类将模型持久保存在 Redis 中。然后你不必对语料库做任何酸洗,分类器总是“打开”的。

于 2014-03-15T20:37:28.853 回答
-1

Weka 有一个可更新的朴素贝叶斯实现。

于 2014-03-23T22:27:45.623 回答