我正在试验朴素贝叶斯分类器,并有以下训练数据:
positive_vocab = [ 'awesome' ]
negative_vocab = [ 'bad']
neutral_vocab = [ 'so-so' ]
...
classifier = NaiveBayesClassifier.train(train_set)
然后我对以下句子进行分类:糟糕的真棒电影,我喜欢它
以下是我得到的每个单词:
坏:负 真棒:POS 电影,:p i:POS 喜欢:POS 它:POS
如何/为什么决定将不在训练集中的单词(例如我喜欢它,电影(分类为正数?
谢谢
训练情绪模型意味着模型了解单词如何影响情绪。因此,这不是关于指定哪些单词是积极的,哪些是消极的 - 而是关于如何训练你的模型从文本本身理解这一点。
最简单的实现称为"词袋"(通常与 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