Python:加载的NLTK分类器无法正常工作

时间:2016-04-19 18:49:43

标签: python nltk pickle sentiment-analysis naivebayes

我试图训练NLTK分类器进行情绪分析,然后使用pickle保存分类器。 训练有素的分类器工作正常。但是,如果我加载一个已保存的分类器,分类器将输出“正面”或“负面”#39;对于所有例子。

我使用

保存分类器
classifier = nltk.NaiveBayesClassifier.train(training_set)
classifier.classify(words_in_tweet)
f = open('classifier.pickle', 'wb')
pickle.dump(classifier, f)
f.close()

并使用

加载分类器
f = open('classifier.pickle', 'rb')
classifier = pickle.load(f)
f.close()
classifier.classify(words_in_tweet)

我没有收到任何错误。 知道问题可能是什么,或者如何正确调试?

1 个答案:

答案 0 :(得分:1)

酸洗分类器最容易出错的地方是特征提取功能。这必须用于生成分类器使用的特征向量。

NaiveBayesClassifier期望训练和分类的特征向量;您的代码看起来就像是将原始单词传递给分类器(但可能只是在取消渲染之后,否则您将无法在unpickling之前和之后获得不同的行为)。您应该将特征提取代码存储在单独的文件中,并在训练和分类(或测试)脚本中import

我怀疑这适用于OP,但是一些NLTK分类器将特征提取函数作为构造函数的参数。当您有用于训练和分类的单独脚本时,确保unpickled分类器成功找到相同的函数可能很棘手。这是因为pickle的工作方式:酸洗只保存数据,而不是代码。要使其工作,只需将提取功能放在脚本导入的单独文件(模块)中。如果您输入“主”脚本,pickle.load将在错误的位置查找。

相关问题