我正在使用nltk书籍-- Python(2009)中的自然语言处理(),并查看朴素的Bayes分类器。特别是在我的版本中,第228页上的例子6-3 .培训集是电影评论。
classifier = nltk.NaiveBayesClassifier.train(train_set)我看到了信息最丰富的特征-
classifier.show_most_informative_features(5)我得到了‘优秀’,‘木兰’和‘奇妙’的最高排名的句子标记为‘积极’。
所以,我尝试以下几点-
in1 = 'wonderfully mulan'
classifier.classify(document_features(in1.split()))我得到了“neg”。这没什么意义。这些应该是最重要的特征。
document_features函数直接取自这本书-
def document_features(document):
document_words = set(document)
features = {}
for word in word_features:
features['contains(%s)' % word] = (word in document_words)
return features发布于 2013-11-28 08:00:33
请注意,该示例中的特征向量由"2000在整个语料库中最频繁的单词“组成。因此,假设语料库是全面的,定期审查可能会有相当多的这些词。(在真实世界对最新电影“傻瓜”和“达拉斯买家俱乐部”的评论中,我分别获得了26/2000和28/2000的特写。)
如果您向它提供一个只包含“奇妙木兰”的评论,则生成的特征向量只有2/2000功能设置为True。基本上,你给了它一个假的视图,几乎没有它知道的信息,或者它可以做任何事情。对于这个向量,很难预测它会预测什么。
特征向量要健康地填充,向正方向倾斜,才能输出pos。也许看看信息最丰富的,比如说500个功能,看看哪些功能是正面的,然后用这些特性创建一个字符串?这可能会让你更接近pos,但不一定。
train_set中的一些特征向量被分类为pos。(有趣的是,我发现其中之一的特性相当于True)。然而,在我的测试中,没有来自neg或pos训练集分区的文档被分类为pos,因此,尽管您可能是正确的,分类器似乎做得不太好--至少pos培训示例应该分类为pos --但您给出的示例并不是很好的衡量标准。
发布于 2015-07-09 20:10:03
至少有两种不同口味的朴素贝叶斯分类器。在快速搜索中,NLTK似乎实现了Bernoulli风味:Different results between the Bernoulli Naive Bayes in NLTK and in scikit-learn。在任何情况下,朴素贝叶斯的某些风格都会注意到文档中缺少的单词和特征,就像对可见的单词一样。所以,如果你试图对一个包含一些肯定词的文档进行分类,但是当该文档丢失时,该文档也缺少许多表示负面文档的词,这是非常合理的,该文档将被归类为否定的。因此,底线是,不仅要注意可见的特性,还要注意缺少的特性(取决于朴素贝叶斯实现的细节)。
https://stackoverflow.com/questions/20256806
复制相似问题