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