Python:加载的 NLTK 分类器不工作
Python: Loaded NLTK Classifier not working
我正在尝试训练 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)
我没有收到任何错误。
知道问题出在哪里,或者如何正确调试吗?
pickled 分类器最有可能出错的地方是特征提取功能。这必须用于生成分类器使用的特征向量。
NaiveBayesClassifier
需要用于训练和分类的特征向量;您的代码看起来好像您将原始单词传递给了分类器(但大概只是在取消酸洗之后,否则在取消酸洗之前和之后您不会得到不同的行为)。您应该将特征提取代码存储在单独的文件中,并且 import
它在训练和分类(或测试)脚本中。
我怀疑这是否适用于 OP,但一些 NLTK 分类器将特征提取函数作为构造函数的参数。当您有单独的训练和分类脚本时,要确保 unpickled 分类器成功找到相同的函数可能会很棘手。这是因为 pickle
的工作方式:pickling 只保存数据,不保存代码。要让它工作,只需将提取函数放在脚本导入的单独文件(模块)中。如果您在 "main" 脚本中输入,pickle.load
将在错误的位置查找它。
我正在尝试训练 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)
我没有收到任何错误。 知道问题出在哪里,或者如何正确调试吗?
pickled 分类器最有可能出错的地方是特征提取功能。这必须用于生成分类器使用的特征向量。
NaiveBayesClassifier
需要用于训练和分类的特征向量;您的代码看起来好像您将原始单词传递给了分类器(但大概只是在取消酸洗之后,否则在取消酸洗之前和之后您不会得到不同的行为)。您应该将特征提取代码存储在单独的文件中,并且 import
它在训练和分类(或测试)脚本中。
我怀疑这是否适用于 OP,但一些 NLTK 分类器将特征提取函数作为构造函数的参数。当您有单独的训练和分类脚本时,要确保 unpickled 分类器成功找到相同的函数可能会很棘手。这是因为 pickle
的工作方式:pickling 只保存数据,不保存代码。要让它工作,只需将提取函数放在脚本导入的单独文件(模块)中。如果您在 "main" 脚本中输入,pickle.load
将在错误的位置查找它。