17

我正在开发一个项目,使用 python nltk 模块和 naivebayes 分类器对文本片段进行分类。我能够对语料库数据进行训练并对另一组数据进行分类,但希望在初始训练后将额外的训练信息输入分类器。

如果我没记错的话,似乎没有办法做到这一点,因为 NaiveBayesClassifier.train 方法需要一组完整的训练数据。有没有办法在不输入原始特征集的情况下添加到训练数据中?

我愿意接受包括其他分类器在内的建议,这些分类器可以随着时间的推移接受新的训练数据。

4

3 回答 3

8

我知道有两种选择:

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

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

于 2011-02-05T18:58:58.383 回答
0

我只是在学习NLTK,所以如果我错了,请纠正我。这是使用 NLTK 的 Python 3 分支,它可能不兼容。

该实例有一个update()方法NaiveBayesClassifier,它似乎可以添加到训练数据中:

from textblob.classifiers import NaiveBayesClassifier

train = [
    ('training test totally tubular', 't'),
]

cl = NaiveBayesClassifier(train)
cl.update([('super speeding special sport', 's')])

print('t', cl.classify('tubular test'))
print('s', cl.classify('super special'))

这打印出来:

t t
s s
于 2014-03-24T03:57:28.453 回答
0

正如雅各布所说,第二种方法是正确的方法希望有人写代码

https://baali.wordpress.com/2012/01/25/incrementally-training-nltk-classifier/

于 2014-12-05T11:23:53.793 回答