如何通过保存训练模型来减少使用泡菜的编译时间?

时间:2017-03-17 04:46:29

标签: python machine-learning nltk text-classification naivebayes

这是一个情感分析代码,每次我更改输入时,编译需要10-15分钟。有什么方法可以减少它?通过保存分类器或任何其他方法来使用pickle更可取? 这里没有提到其他功能。

inpTweets = csv.reader(open('training_neatfile_4.csv', 'r' ,encoding='ISO-8859-1'), delimiter=',')
stopWords = getStopWordList('stopwords.txt')
count = 0;
featureList = []
tweets = []
for row in inpTweets:
    sentiment = row[0]
    tweet = row[1]
    processedTweet = processTweet(tweet)
    featureVector = getFeatureVector(processedTweet, stopWords)
    featureList.extend(featureVector)
    tweets.append((featureVector, sentiment));
#end loop

# Remove featureList duplicates
featureList = list(set(featureList))

# Generate the training set
training_set = nltk.classify.util.apply_features(extract_features, tweets)

# Train the Naive Bayes classifier
nb_classifier = nltk.NaiveBayesClassifier.train(training_set)

# Test the classifier
testTweet = 'He is a brainless kid'
processedTestTweet = processTweet(testTweet)
sentiment = nb_classifier.classify(extract_features(getFeatureVector(processedTestTweet, stopWords)))
print ("testTweet = %s, sentiment = %s\n" % (testTweet, sentiment))

1 个答案:

答案 0 :(得分:4)

训练NaiveBayesClassifier(或任何)需要花费大量时间(取决于训练数据的输入),如果您通过省略re来训练它以节省时间,则保存分类器(NBClassifier)对象会变得更容易 - 训练。

以下是使用pickle保存对象的方法,您可以在代码中使用它来保存列车或加载分类器。

import pickle
pickle.dump(object, file)

您可以通过保存其对象(nb_classifier)来保存NaiveBayesClassifier,如下所示。

with open('model.pkl', 'wb') as nb_classifier_model:
    pickle.dump(nb_classifier, nb_classifier_model)

然后,您可以将其检索为:

with open('model.pkl', 'rb') as nb_classifier_model:
    nb_classifier = pickle.load(nb_classifier_model)

这就是通过相应的方式实现目标的方法。

希望它有所帮助!