nltk naivebayes分类器,用于文本分类

耶稣_fc33

在下面的代码中,我知道我的naivebayes分类器正确运行,因为它在trainset1上正确运行,但是为什么它不能在trainset2上运行?我什至在两个分类器上尝试过,一个来自TextBlob,另一个直接来自nltk。

from textblob.classifiers import NaiveBayesClassifier
from textblob import TextBlob
from nltk.tokenize import word_tokenize
import nltk

trainset1 = [('I love this sandwich.', 'pos'),
('This is an amazing place!', 'pos'),
('I feel very good about these beers.', 'pos'),
('This is my best work.', 'pos'),
("What an awesome view", 'pos'),
('I do not like this restaurant', 'neg'),
('I am tired of this stuff.', 'neg'),
("I can't deal with this", 'neg'),
('He is my sworn enemy!', 'neg'),
('My boss is horrible.', 'neg')]

trainset2 = [('hide all brazil and everything plan limps to anniversary inflation plan initiallyis limping its first anniversary amid soaring prices', 'class1'),
         ('hello i was there and no one came', 'class2'),
         ('all negative terms like sad angry etc', 'class2')]

def nltk_naivebayes(trainset, test_sentence):
    all_words = set(word.lower() for passage in trainset for word in word_tokenize(passage[0]))
    t = [({word: (word in word_tokenize(x[0])) for word in all_words}, x[1]) for x in trainset]
    classifier = nltk.NaiveBayesClassifier.train(t)
    test_sent_features = {word.lower(): (word in word_tokenize(test_sentence.lower())) for word in all_words}
    return classifier.classify(test_sent_features)

def textblob_naivebayes(trainset, test_sentence):
    cl = NaiveBayesClassifier(trainset)
    blob = TextBlob(test_sentence,classifier=cl)
    return blob.classify() 

test_sentence1 = "he is my horrible enemy"
test_sentence2 = "inflation soaring limps to anniversary"

print nltk_naivebayes(trainset1, test_sentence1)
print nltk_naivebayes(trainset2, test_sentence2)
print textblob_naivebayes(trainset1, test_sentence1)
print textblob_naivebayes(trainset2, test_sentence2)

输出:

neg
class2
neg
class2

尽管test_sentence2显然属于class1。

帕斯卡·苏西(Pascal Soucy)

我将假设您理解,您不能指望分类器仅用3个示例来学习一个好的模型,而您的问题更多是要理解为什么在此特定示例中它会这样做。

这样做的可能原因是朴素贝叶斯分类器使用了先验类概率。也就是说,与文本无关,否定vs pos的概率。在您的情况下,示例的2/3是负数,因此,负数的先验值为66%,正数的为33%。您的单个肯定实例中的肯定词是“周年”和“飞涨”,这不足以补偿此先验类别概率。

尤其要注意,单词概率的计算涉及各种“平滑”函数(例如,每个类别中的log10(术语频率+1),而不是log10(术语频率),以防止低频单词影响过多分类结果,除以零等。因此,不同于您的预期,“周年”和“飙升”的概率,对于neg而言不是0.0,对于pos而言不是1.0。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

文本分类 NaiveBayes

来自分类Dev

Python NLTK和熊猫-文本分类器-(newbie)-以类似于提供的示例的格式导入数据

来自分类Dev

NLTK分类器对象

来自分类Dev

火车结束后,nltk naivebayes分类器如何学习更多功能集?

来自分类Dev

在nltk文本蕴含分类器上获取AttributeError

来自分类Dev

Python NLTK朴素贝叶斯分类器:此分类器用于对输入进行分类的基础计算是什么?

来自分类Dev

NLTK 2.0分类器批次分类器方法

来自分类Dev

在特定文件上测试NLTK分类器

来自分类Dev

Python NLTK朴素贝叶斯分类器

来自分类Dev

NLTK-多标签分类

来自分类Dev

NLTK-多标签分类

来自分类Dev

NLTK分类器在情感分析中仅给出否定答案

来自分类Dev

Python:已加载的NLTK分类器不起作用

来自分类Dev

NLTK分类器在情感分析中仅给出否定答案

来自分类Dev

SVM用于R中的文本分类

来自分类Dev

SVM用于R中的文本分类

来自分类Dev

运行 BigDL 文本分类器失败

来自分类Dev

文本分类问题

来自分类Dev

R中用于文本分类的特征哈希

来自分类Dev

构建用于标记级别文本分类的n-gram

来自分类Dev

R中用于文本分类的特征哈希

来自分类Dev

用于文本分类的机器学习算法我得到 pb

来自分类Dev

如何以仅训练分类器一次的方式调整NLTK Python代码

来自分类Dev

如何以仅训练分类器一次的方式调整NLTK Python代码

来自分类Dev

如何在maxent分类器中更改NLTK中的POS标记的迭代次数?

来自分类Dev

AttributeError: 'NoneType' 对象没有分类器的属性 'items' = nltk.NaiveBayesClassifier.train(training_set)

来自分类Dev

多个标签的文本分类

来自分类Dev

Weka进行文本分类器:如何正确训练分类器问题

来自分类Dev

N-gram与文本分类中的其他分类器

Related 相关文章

热门标签

归档