如何增量训练nltk分类器

17 投票
3 回答
3720 浏览
提问于 2025-04-16 11:16

我正在做一个项目,目的是用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_prodistfeature_probdist来直接创建。你可以单独创建这些,然后传递给NaiveBayesClassifier,每当有新数据进来时就更新它们。这样分类器就能立即使用这些新数据。你需要查看train方法,了解如何更新概率分布的具体细节。

撰写回答