我正在尝试NaiveBayesClassifier,并具有以下训练数据:
positive_vocab = [ 'awesome' ]
negative_vocab = [ 'bad']
neutral_vocab = [ 'so-so' ]
...
classifier = NaiveBayesClassifier.train(train_set)
然后我对以下句子进行分类:糟糕的电影,我喜欢它
这是我对每个单词的理解:
bad:neg 很棒:pos 电影,:pos i:pos 喜欢:pos 它:pos
如何/为什么决定将不在训练集中的单词(例如我喜欢它,电影)归为肯定?
谢谢
答案 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