Unpickling ваш classifier
объект будет заново создать его в том же состоянии, что это было, когда вы маринованные, поэтому вы можете продолжить, чтобы обновить его со свежими данными из набора данных. И в конце запуска программы вы снова замачиваете classifier
и снова сохраняете его в файле. Хорошая идея не перезаписывать один и тот же файл, а сохранять резервную копию (или, что еще лучше, серию резервных копий), если вы что-то испортили. Таким образом, вы можете легко вернуться к известному хорошему состоянию вашего classifier
.
Вам следует поэкспериментировать с травлением, используя простую программу и простой объект для разборки и разбрасывания, пока вы не будете полностью уверены в том, как все это работает.
Вот грубый набросок того, как обновить маринованные classifier
данные.
import pickle
import os
from os.path import exists
# other imports required for nltk ...
picklename = "naivebayes.pickle"
# stuff to set up featuresets ...
featuresets = [(find_features(rev), category) for (rev, category) in documents]
numtrain = int(len(documents) * 90/100)
training_set = featuresets[:numtrain]
testing_set = featuresets[numtrain:]
# Load or create a classifier and apply training set to it
if exists(picklename):
# Update existing classifier
with open(picklename, "rb") as f:
classifier = pickle.load(f)
classifier.train(training_set)
else:
# Create a brand new classifier
classifier = nltk.NaiveBayesClassifier.train(training_set)
# Create backup
if exists(picklename):
backupname = picklename + '.bak'
if exists(backupname):
os.remove(backupname)
os.rename(picklename, backupname)
# Save
with open(picklename, "wb") as f:
pickle.dump(classifier, f)
Первый раз, когда вы запустите эту программу, она будет создавать новый classifier
, обучить его с данными в training_set
, затем замариновать classifier
к «naivebayes.pickle». Каждый последующий раз, когда вы запускаете эту программу, он загружает старый classifier
и применяет к нему дополнительные учебные данные.
Кстати, если вы делаете это в Python 2, вы должны использовать намного быстрее cPickle
модуль; Вы можете сделать это путем замены
import pickle
с
import cPickle as pickle
Ничего не происходит автоматически. Следующий запуск программы должен открыть файл, загрузить рассол в него обратно в обычный объект Python, изменить этот объект, а затем сохранить его обратно так же, как вы сделали выше. –
@KirkStrauser Вот что я говорю. Я должен оставить свой код, как это, только правильно? Для следующего прогона. Уже созданный файл naivebayes.pickle будет обновлен правильно? – Arqam
Включает ли классификатор в ОЗУ без ущерба для остальной части ваших расчетов? – sobek