基于AdaBoost算法的情感分析研究
摘 要
- 随着互联网的快速发展,各类社交媒体平台如微信、QQ等也与日俱增,而微博更是集成了传统网站、论坛、博客等的优点,并加上了人与人之间的互动性、关系亲密程度等多种智能算法,并以简练的形式让数据爆发性的传播,促进了人与人之间的交流。网民可以通过微博来分享自己的生活,同时抒发自己的喜怒哀乐。因此对微博每天产生的信息量的分析和利用的需求显得更为迫切。
- 情感分析,也称倾向性分析、意见抽取和意见挖掘。主要是通过对带有情感色彩的主观性文本进行分析、处理、归纳然后进行推理的过程。而微博,人口基数大,涉及的话题广泛,对人们的日常生活产生了不可估量的影响,而对微博的情感分析,更是有着十分重要的意义。为此,本文针对了微博文本的情感分析进行了如下几个工作。
- 首先,使用微博官方的API对微博进行抓取,进行分类标注。然后,对微博文本进行预处理,主要包括去掉无意义,对微博文本没有影响的词语。其次,使用SVM算法对文本进行初步的筛选,主要是去除特别明显的广告等无关性的微博。最后使用朴素贝叶斯对微博进行情感分析,将微博分为积极、消极、客观三类,同时使用AdaBoost算法对朴素贝叶斯算法进行加强。
这些带有情感信息的微博是非常宝贵的资源,通过情感分析可以获取网民的此时的心情,对某个事件或事物的看法,可以挖掘其潜在的商业价值,还能对社会的稳定做出一定的贡献。
关键词:情感分析 AdaBoost 朴素贝叶斯 文本分类 数据挖掘
大致流程和原理。
一、获取微博文本:
该部分主要使用微博应用获取微博文本,获取到的文本可以用于后续的分类和情感分析等。
2.3.2 模拟登录
由于微博中的接口需要获取权限,所以需要手动截取token,比如链接中:https://api.weibo.com/oauth2/authorize?code=7dded6d1b81bdc341cc75d585b566492
链接的token就是code=7dded6d1b81bdc341cc75d585b566492。本文将采用模拟登陆微博并获取token后直接调用接口的方法,省去了手动输入的麻烦。
2.3.3 微博抓取与存储
使用官方的python sdk,然后使用statuses/public_timeline的接口一次性获取200条微博。其连接代码如下:
json_str = client.get(‘statuses/public_timeline’, uid=uuid, separators=(‘,’, ‘:’), count=200)
由于服务器返回的格式是json的,所以将json中所需要的key和value存储入数据库即可。
二、SVM初步分类:
该部分使用支持向量机(SVM)模型对微博文本进行初步分类,将文本分为积极、消极和中立三类,以便进行后续的情感分析。
三、使用朴素贝叶斯分类:
该部分使用朴素贝叶斯分类器对微博文本进行情感分析,将文本划分为积极或消极两类,并得出相应的概率值。
图1.3 每个州对川普的情感
四、AdaBoost:
该部分是一种集成学习方法,将多个弱分类器组合成一个强分类器。主要包括二分类AdaBoost和多分类AdaBoost两种方法:
4.1 二分类AdaBoost:
该方法主要用于解决二分类问题,通过多次迭代训练多个弱分类器,每次迭代都会调整数据权重,使得之前分类错误的数据更容易被正确分类。最终将多个弱分类器加权组合成一个强分类器来进行分类预测。
4.2 多分类AdaBoost:
该方法主要用于解决多分类问题,包括AdaBoost.SAMME和AdaBoost.SAMME.R两种方法。
import re
word="jofwjoifA级哦啊接我金佛安fewfae慰剂serge"
p = re.compile(r'\w', re.L)
result = p.sub("", word)
print(result)
4.2.1 AdaBoost.SAMME:
该方法基于AdaBoost算法,通过多次迭代训练多个弱分类器,并根据错误率对每个分类器进行加权。最终将多个弱分类器加权组合成一个强分类器,用于多分类预测。
4.2.2 AdaBoost.SAMME.R:
该方法与AdaBoost.SAMME类似,但是在每次迭代中会更新数据的权重,同时还会更新每个分类器的输出权重。最终将多个弱分类器加权组合成一个强分类器,用于多分类预测。
图2.1 申请微博应用
运行
运行环境
[anaconda: 3.5+]https://www.anaconda.com/
本文项目流程
一、 使用微博应用获取微博文本
二、 SVM初步分类(svm_temp.py)
三、 利用贝叶斯定理进行情感分析
四、 利用AdaBoost加强分类器