2011-02-05 144 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