Python:加载的NLTK分类器无法正常工作
作者:互联网
我正在尝试训练NLTK分类器进行情绪分析,然后使用pickle保存分类器.
训练有素的分类器工作正常.但是,如果我加载一个保存的分类器,分类器将为所有示例输出’positive’或’negative’.
我正在使用保存分类器
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)
我没有收到任何错误.
知道问题可能是什么,或者如何正确调试?
解决方法:
酸洗分类器最容易出错的地方是特征提取功能.这必须用于生成分类器使用的特征向量.
NaiveBayesClassifier期望训练和分类的特征向量;您的代码看起来就像是将原始单词传递给分类器(但可能只是在取消渲染之后,否则您将无法在unpickling之前和之后获得不同的行为).您应该将特征提取代码存储在单独的文件中,并将其导入训练和分类(或测试)脚本中.
我怀疑这适用于OP,但是一些NLTK分类器将特征提取函数作为构造函数的参数.当您有用于训练和分类的单独脚本时,确保unpickled分类器成功找到相同的函数可能很棘手.这是因为pickle的工作方式:pickling只保存数据,而不是代码.要使其工作,只需将提取功能放在脚本导入的单独文件(模块)中.如果您输入“main”脚本,pickle.load将在错误的位置查找它.
标签:python,nltk,pickle,sentiment-analysis,naivebayes 来源: https://codeday.me/bug/20190706/1395763.html