(纯属为了记录自己学习的点滴过程,引用资料都附在参考列表)
1 基本概念
情感分析
对于情感分析而言,只需要准备标注了正负情感的大量文档,就能将其视作普通的文本分类任务来解决。此外,一些带有评分的电影、商品评论也可以作为“天然”的标注语料库。
2 问题
给出某酒店评论数据,正负评论各2000条组成,训练情感分类模型,并对测试数据预测;
3 解决思路
化归为文本分类问题,使用文本分类的一般步骤,算法使用Naive Bayesian Model;
4 实现
# -*- coding:utf-8 -*-from pyhanlp import *
from tests.test_utility import ensure_dataIClassifier = JClass('com.hankcs.hanlp.classification.classifiers.IClassifier')
NaiveBayesClassifier = JClass('com.hankcs.hanlp.classification.classifiers.NaiveBayesClassifier')
# 中文情感挖掘语料-ChnSentiCorp 谭松波
chn_senti_corp = ensure_data("ChnSentiCorp情感分析酒店评论", "http://file.hankcs.com/corpus/ChnSentiCorp.zip")def predict(classifier, text):print("《%s》 情感极性是 【%s】" % (text, classifier.classify(text)))if __name__ == '__main__':classifier = NaiveBayesClassifier()# 创建分类器,更高级的功能请参考IClassifier的接口定义classifier.train(chn_senti_corp)# 训练后的模型支持持久化,下次就不必训练了predict(classifier, "前台客房服务态度非常好!早餐很丰富,房价很干净。再接再厉!")predict(classifier, "结果大失所望,灯光昏暗,空间极其狭小,床垫质量恶劣,房间还伴着一股霉味。")predict(classifier, "可利用文本分类实现情感分析,效果不是不行")
运行结果:
[正面]...100.00% 2000 篇文档
[负面]...100.00% 2000 篇文档
耗时 1477 ms 加载了 2 个类目,共 4000 篇文档
原始数据集大小:4000
使用卡方检测选择特征中...耗时 17 ms,选中特征数:486 / 15034 = 3.23%
贝叶斯统计结束
《前台客房服务态度非常好!早餐很丰富,房价很干净。再接再厉!》 情感极性是 【正面】
《结果大失所望,灯光昏暗,空间极其狭小,床垫质量恶劣,房间还伴着一股霉味。》 情感极性是 【负面】
《可利用文本分类实现情感分析,效果不是不行》 情感极性是 【负面】
- 值得注意的是,最后一个测试案例“可利用文本分类实现情感分析,效果不是不行”虽然不属于酒店评论,但结果依然是正确地,这说明该统计模型有一定的泛化能力,能处理一些其他行业的文本。
5 参考文献
- 何晗《自然语言处理入门》;
- 宗成庆《统计自然语言处理》;
- 李航《统计学习方法》;