如何增量训练nltk分类器
我正在做一个项目,目的是用Python的nltk模块和朴素贝叶斯分类器来对文本片段进行分类。我已经能够用一些语料库数据进行训练,并对另一组数据进行分类,但我希望在初次训练后能继续给分类器输入更多的训练信息。
如果我没记错的话,似乎没有办法做到这一点,因为NaiveBayesClassifier.train方法需要一整套完整的训练数据。那么,有没有办法在不重新输入原始特征集的情况下,向训练数据中添加新的数据呢?
我也欢迎其他建议,比如可以随着时间接受新训练数据的其他分类器。
3 个回答
0
正如雅各布所说,第二种方法是正确的做法。希望有人能写出代码来。
看看这个链接:
https://baali.wordpress.com/2012/01/25/incrementally-training-nltk-classifier/
0
我刚开始学习NLTK,如果我说错了请纠正我。这是使用Python 3版本的NLTK,可能会有不兼容的问题。
在NaiveBayesClassifier
这个实例中,有一个update()
方法,看起来是用来增加训练数据的:
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
8
我知道有两种方法:
1) 定期用新数据重新训练分类器。你可以把新收集到的训练数据和原来的数据放在一起,每隔几个小时就重新训练并更新分类器。这可能是最简单的解决办法。
2) 将内部模型外部化,然后手动更新。NaiveBayesClassifier
可以通过提供label_prodist
和feature_probdist
来直接创建。你可以单独创建这些,然后传递给NaiveBayesClassifier
,每当有新数据进来时就更新它们。这样分类器就能立即使用这些新数据。你需要查看train
方法,了解如何更新概率分布的具体细节。