情感分析器设计
情感分析是NLP最受欢迎之一,其主要目的就是判断一段文字是否是积极的。当然,有些是中性的。情感分析在营销活动、社交媒体、电子商务客户分析等应用广泛,而这些都间接反馈很多问题,而当数据量很大时,人工无法完成分类,这时机器学习大显身手!
下面,我们来看看如何来进行情感分析器设计:
这里,我们用nltk.corpus下moive_reviews关于电影影评包作为数据标注,当然,首先要下载数据。
然后,将库中数据进行提取,预处理积极和消极词汇,由于在库中数据positive和negative分成1000段,而每一段中含有很多单词,我们分类进行标注,而每一个单词都标注为True,且用字典方式进行存放,然后进行大类标注。提取特征后,生成训练集(因为完全相同的文字不一定都存在,否则,就不是机器学习了,直接变为查找了,是不是?)。为了,评估模型,分为训练集和测试集,评估模型可行性,接着,利用分类器进行训练,用户输入数据就可以直接预测了,我们得到语句对应的情感是积极或者消极的概率。
(1) 提取情感标记,为了提取方式,定义函数:
def extract_features(word_list):
return dict([(word, True)for word in word_list])
positive_fileids = movie_reviews.fileids('pos')
negative_fileids = movie_reviews.fileids('neg')
features_positive = [(extract_features(movie_reviews.words(fileids=[f])),'Positive') for f in positive_fileids]
features_negative = [(extract_features(movie_reviews.words(fileids=[f])),'Negative') for f in negative_fileids]
print(len(features_positive),len(negative_fileids))
(2)训练集和测试集分割,我们选70%(总量为1000),大家自己可以定义,后面评估用。
features_train = features_positive[:700] + features_negative[:700]
features_test = features_positive[700:] + features_negative[700:]
(3)我们选择贝叶斯分类器:classifier= NaiveBayesClassifier.train(features_train)
(4)对算法和模型进行评估(精确值accuracy,nltk已经提供我们选择分类器之后的评估):
input_data="It is an amazing movie"
probdist = classifier.prob_classify(extract_features(Input_data.split()))
pred_sentiment = probdist.max()
大家也可以选择最大熵分类器观察分类效果。大家,加油!