Python nltk Naive Bayes不';好像不行

Python nltk Naive Bayes不';好像不行,python,text,classification,nltk,Python,Text,Classification,Nltk,我正在使用nltk书籍《Python的自然语言处理》(2009)并研究朴素贝叶斯分类器。特别是我的版本第228页上的示例6-3。 培训内容是电影评论 classifier = nltk.NaiveBayesClassifier.train(train_set) 我看到了最具信息量的功能- classifier.show_most_informative_features(5) 我得到了“杰出”、“木兰”和“奇妙”的排名,因为这句话被标记为“积极” 因此,我尝试以下方法- in1 = 'won

我正在使用nltk书籍《Python的自然语言处理》(2009)并研究朴素贝叶斯分类器。特别是我的版本第228页上的示例6-3。 培训内容是电影评论

classifier = nltk.NaiveBayesClassifier.train(train_set)
我看到了最具信息量的功能-

classifier.show_most_informative_features(5)
我得到了“杰出”、“木兰”和“奇妙”的排名,因为这句话被标记为“积极”

因此,我尝试以下方法-

in1 = 'wonderfully mulan'
classifier.classify(document_features(in1.split()))
我得到了“阴性”。现在这毫无意义。这些应该是最重要的功能

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

请注意,该示例中的特征向量由“整个语料库中2000个最常见的单词”组成。因此,假设语料库是全面的,定期审查可能会有相当多的单词。(在对最新的《傻瓜》电影和《达拉斯买家俱乐部》的真实评论中,我分别获得了26/2000和28/2000的特写。)

如果你给它一个只包含“奇妙的木兰”的评论,那么得到的特征向量只有2/2000个特征被设置为True。基本上,你给它一个伪评论,几乎没有它知道的或者它可以做任何事情的信息。对于这个向量,很难说它会预测什么

特征向量应以正向倾斜的向量健康填充,以便输出
pos
。也许看看信息量最大的功能,比如说500个功能,看看哪些功能是积极的,然后用这些功能创建一个字符串?这可能会让您更接近
pos
,但不一定


序列集中的一些特征向量分类为
pos
。(有趣的是,我发现其中一个具有417个特性,相当于
True
)。但是,在我的测试中,
neg
pos
训练集分区中没有分类为
pos
的文档,因此,虽然您可能认为分类器的工作似乎不太出色——至少
pos
培训示例应该分类为
pos
——但您给出的示例并不能很好地衡量这一点

朴素贝叶斯分类器至少有两种不同的风格。在快速搜索中,NLTK似乎实现了伯努利风格:。在任何情况下,一些朴素贝叶斯会像关注可见词一样关注文档中缺少的词/特征。因此,如果您试图对一个包含一些肯定词的文档进行分类,但该文档也缺少许多表示否定文档的词,那么将该文档归类为否定文档是非常合理的。因此,底线是,不仅要注意可见的特性,还要注意缺失的特性(取决于朴素贝叶斯实现的细节)