NLTK NaiveBayesClassifier 分类器问题

NLTK NaiveBayesClassifier classifier issues

我正在试验 NaiveBayesClassifier 并且有以下训练数据:

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

然后我将以下句子归类:不好 很棒的电影,我喜欢它

这是我得到的每个单词的结果:

差:差 awesome:pos 电影,:pos i:pos liked:pos it:pos

How/why 决定将不在训练集中的单词(例如 I Liked It, Movie)分类为正数?

谢谢

训练情绪模型意味着您的模型了解词语如何影响情绪。 因此,这不是关于指定哪些词是正面的,哪些是负面的——而是关于如何训练你的模型从文本本身理解它

最简单的实现称为 "bag of words"(通常与 TF-IDF 归一化一起使用)。 Bag of words 的工作原理是:将文本按单词拆分并计算给定文本块(或评论)中每个单词的出现次数。这样,行对应不同的评论,列对应给定单词在给定评论中出现的次数。这个 table 成为你的 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