NLTK NaiveBayesClassifier分类器问题

时间:2018-08-09 21:11:18

标签: python nltk text-classification naivebayes

我正在尝试NaiveBayesClassifier,并具有以下训练数据:

positive_vocab = [ 'awesome' ]
negative_vocab = [ 'bad']
neutral_vocab = [ 'so-so' ]
...
classifier = NaiveBayesClassifier.train(train_set) 

然后我对以下句子进行分类:糟糕的电影,我喜欢它

这是我对每个单词的理解:

bad:neg 很棒:pos 电影,:pos i:pos 喜欢:pos 它:pos

如何/为什么决定将不在训练集中的单词(例如我喜欢它,电影)归为肯定?

谢谢

1 个答案:

答案 0 :(得分:1)

训练情感模型意味着您的模型学习单词如何影响情感。 因此,这并不是要指定哪些词是肯定的,哪些是否定的–而是关于如何训练模型从文本本身来理解它的

最简单的实现称为“单词袋”(通常与TF-IDF标准化一起使用)。一揽子单词是这样工作的:您将单词按单词拆分,并计算给定文本块(或复查)中每个单词的出现次数。这样,行对应于不同的评论,而列对应于给定评论中给定单词出现的次数。该表将成为您的X,预测的目标情感将成为您的Y(例如0表示否定,1表示肯定)。

然后您训练分类器:

from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer

reviews, Y = your_load_function()

vectorizer = TfidfVectorizer()  # or CountVectorizer()
X = vectorizer.fit_transform(reviews)  # convert text to words counts

model = MultinomialNB()
model.fit(X, Y)

训练模型后,您可以进行预测:

new_reviews = your_load_function2()
new_X = vectorizer.transform(new_reviews)
predicted_Y = model.predict(new_X)

进一步阅读:
https://en.wikipedia.org/wiki/Bag-of-words_model
https://en.wikipedia.org/wiki/Tf-idf
http://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.MultinomialNB.html
http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html