pattern - python naive bayes text classification
Guarde el clasificador capacitado de Naive Bayes en NLTK (3)
Estoy un poco confundido con respecto a cómo guardo un clasificador entrenado. Como en, volver a entrenar un clasificador cada vez que quiero usarlo es obviamente muy malo y lento, ¿cómo lo guardo y lo cargo nuevamente cuando lo necesito? El código está abajo, gracias de antemano por su ayuda. Estoy usando Python con 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)
Ahorrar:
import pickle
f = open(''my_classifier.pickle'', ''wb'')
pickle.dump(classifier, f)
f.close()
Para cargar más tarde:
import pickle
f = open(''my_classifier.pickle'', ''rb'')
classifier = pickle.load(f)
f.close()
Para restablecer el clasificador en escabeche:
f = open(''originalnaivebayes5k.pickle'',''rb'')
classifier = pickle.load(f)
classifier.train(training_set)
print(''Accuracy:'',nltk.classify.accuracy(classifier,testing_set)*100)
f.close()
Pasé por el mismo problema, y no puede guardar el objeto ya que es una clase ELEFreqDistr NLTK. De todos modos NLTK es infierno lento. La capacitación duró 45 minutos en un conjunto decente y decidí implementar mi propia versión del algoritmo (ejecutarlo con pypy o cambiarle el nombre a .pyx e instalar cython). Lleva aproximadamente 3 minutos con el mismo conjunto y simplemente puede guardar datos como json (implementaré pickle que es más rápido / mejor).
Empecé un proyecto simple de Github, mira el código here