我正在研究使用python nltk模塊和naivebayes分類器對文本片段進行分類的項目。我能夠對語料庫數據進行訓練並對另一組數據進行分類,但希望在初始訓練後向分類器中提供額外的訓練信息。如何增量訓練nltk分類器
如果我沒有弄錯,似乎沒有辦法做到這一點,因爲NaiveBayesClassifier.train方法需要一整套訓練數據。有沒有方法可以添加到訓練數據而不需要添加原始特徵集?
我願意接受包括其他可以接受新培訓數據的分類器的建議。
我正在研究使用python nltk模塊和naivebayes分類器對文本片段進行分類的項目。我能夠對語料庫數據進行訓練並對另一組數據進行分類,但希望在初始訓練後向分類器中提供額外的訓練信息。如何增量訓練nltk分類器
如果我沒有弄錯,似乎沒有辦法做到這一點,因爲NaiveBayesClassifier.train方法需要一整套訓練數據。有沒有方法可以添加到訓練數據而不需要添加原始特徵集?
我願意接受包括其他可以接受新培訓數據的分類器的建議。
有2個選擇,我知道的:
1)定期再培訓的新的數據分類。您將在語料庫(已包含原始訓練數據)中累積新的訓練數據,然後每隔幾小時,重新加載分類器。這可能是最簡單的解決方案。
2)外部化內部模型,然後手動更新它。 NaiveBayesClassifier
可以通過給它label_prodist
和feature_probdist
直接創建。您可以分別創建這些數據,將它們傳遞給NaiveBayesClassifier
,然後在新數據進來時更新它們。分類器會立即使用這些新數據。您必須查看train
方法以瞭解如何更新概率分佈的詳細信息。
我剛剛學習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
正如雅各說,第二種方法是正確的方式 並希望有人寫一個代碼
看
https://baali.wordpress.com/2012/01/25/incrementally-training-nltk-classifier/
您是否終於找到了解決此問題的解決方案? – w2lame 2014-02-05 17:55:37
我對分類器內部進行了一些攻擊,以提供新的培訓數據而無需再培訓。現在已經很久以前,所以我不能完全記得,但我認爲這是可行的。那之後我沒有太多的瞭解這個項目,所以它並沒有提供積極的服務。 – Rog 2014-02-07 05:55:20
好的,謝謝你的回覆@rog :) – w2lame 2014-02-08 06:55:08