我正在开发一个项目,使用 python nltk 模块和 naivebayes 分类器对文本片段进行分类。我能够对语料库数据进行训练并对另一组数据进行分类,但希望在初始训练后将额外的训练信息输入分类器。
如果我没记错的话,似乎没有办法做到这一点,因为 NaiveBayesClassifier.train 方法需要一组完整的训练数据。有没有办法在不输入原始特征集的情况下添加到训练数据中?
我愿意接受包括其他分类器在内的建议,这些分类器可以随着时间的推移接受新的训练数据。
我知道有两种选择:
1)定期在新数据上重新训练分类器。您将在语料库中积累新的训练数据(已经包含原始训练数据),然后每隔几个小时重新训练并重新加载分类器。这可能是最简单的解决方案。
2)外部化内部模型,然后手动更新。NaiveBayesClassifier
可以通过给它 a和label_prodist
a来直接创建feature_probdist
。您可以单独创建它们,将它们传递给 a NaiveBayesClassifier
,然后在新数据进入时更新它们。分类器将立即使用这些新数据。您必须查看该train
方法以获取有关如何更新概率分布的详细信息。
我只是在学习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
正如雅各布所说,第二种方法是正确的方法希望有人写代码
看
https://baali.wordpress.com/2012/01/25/incrementally-training-nltk-classifier/