訓練された分類子を保存する方法について、少し混乱しています。同様に、使用するたびに分類子を再トレーニングすることは明らかに非常に遅くて遅いです。必要なときに分類子を保存して再度読み込むにはどうすればよいですか?コードは以下のとおりです。事前にご協力いただきありがとうございます。 Python= NLTK Naive Bayes Classifierを使用しています。
classifier = nltk.NaiveBayesClassifier.train(training_set)
# look inside the classifier train method in the source code of the NLTK library
def train(labeled_featuresets, estimator=nltk.probability.ELEProbDist):
# Create the P(label) distribution
label_probdist = estimator(label_freqdist)
# Create the P(fval|label, fname) distribution
feature_probdist = {}
return NaiveBayesClassifier(label_probdist, feature_probdist)
保存する:
import pickle
f = open('my_classifier.pickle', 'wb')
pickle.dump(classifier, f)
f.close()
後でロードするには:
import pickle
f = open('my_classifier.pickle', 'rb')
classifier = pickle.load(f)
f.close()
ELEFreqDistr NLTKクラスなので、同じ問題を解決しましたが、オブジェクトを保存できません。とにかく、NLTKは非常に遅いです。トレーニングはまともなセットで45分かかり、独自のバージョンのアルゴリズムを実装することにしました(pypyで実行するか、.pyxに名前を変更してcythonをインストールします)。同じセットで約3分かかり、jsonとしてデータを保存できます(より高速で優れたpickleを実装します)。
私は簡単なgithubプロジェクトを始めました、コードをチェックしてください here
漬物分類器を再トレーニングするには:
f = open('originalnaivebayes5k.pickle','rb')
classifier = pickle.load(f)
classifier.train(training_set)
print('Accuracy:',nltk.classify.accuracy(classifier,testing_set)*100)
f.close()