2011-02-05 139 views
17

我正在研究使用python nltk模块和naivebayes分类器对文本片段进行分类的项目。我能够对语料库数据进行训练并对另一组数据进行分类,但希望在初始训练后向分类器中提供额外的训练信息。如何增量训练nltk分类器

如果我没有弄错,似乎没有办法做到这一点,因为NaiveBayesClassifier.train方法需要一整套训练数据。有没有方法可以添加到训练数据而不需要添加原始特征集?

我愿意接受包括其他可以接受新培训数据的分类器的建议。

+1

您是否终于找到了解决此问题的解决方案? – w2lame 2014-02-05 17:55:37

+0

我对分类器内部进行了一些攻击,以提供新的培训数据而无需再培训。现在已经很久以前,所以我不能完全记得,但我认为这是可行的。那之后我没有太多的了解这个项目,所以它并没有提供积极的服务。 – Rog 2014-02-07 05:55:20

+0

好的,谢谢你的回复@rog :) – w2lame 2014-02-08 06:55:08

回答

9

有2个选择,我知道的:

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

2)外部化内部模型,然后手动更新它。 NaiveBayesClassifier可以通过给它label_prodistfeature_probdist直接创建。您可以分别创建这些数据,将它们传递给NaiveBayesClassifier,然后在新数据进来时更新它们。分类器会立即使用这些新数据。您必须查看train方法以了解如何更新概率分布的详细信息。

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