吴震宇
武汉学院信息工程
摘要:采用的新浪微博数据集来源于网上的GitHub社区,微博10 万多条,都带有情感标注,正负向评论约各 5 万条,用来做情感分析的数据集。解决问题是对这12万左右的微博数据集进行分词、去除停用词、转化词向量等预处理步骤,按照80%训练、20%测试进行随机划分,构建基于微博情感分析识别模型,计算模型的实际预测准确率,为实际应用提供一定的参考价值。
关键词:情感分析,分词,去停用词
指导老师:戚兰
1 背景介绍
文本情感分析也称为倾向性分析或意见挖掘,是指运用计算机技术、自然语言处理和文本挖掘等技术来提取原文本数据中蕴含的主观信息,简而言之,文本情感分析就是判断一个文本数据中所表达的态度,如积极的或消极的等等。文本情感分析中数据集的来源十分广泛,其中包括网页、微博评论、博客、网络新闻、网上讨论群和社交网站等。本章主要以新浪微博数据为案例,也适合其他比如商品评论、贴吧讨论等等类型数据。
2 主要目标及实现思路
主要目标包括掌握中文文本的读取、分词、去停用词等预处理步骤的简单处理技能、掌握中文文本词向量word embedding处理的简单计算方法、掌握基于支持向量机的情感分析模型和基于LSTM网络的情感分析模型。基本实现思路如图1所示。
3 数据预处理过程
由于原始的微博文本数据存在一些的换行符、空格等异常数据,会影响后期的情感判断,因此需要对原始数据进行预处理。在本节中主要包括去除异常数据、分词、去除停用词和词向量化Word Embedding等预处理步骤。
3.1 数据读取。
首先,我们先了解一下原始微博文本数据,先利用Pandas包读取csv格式的文本数据,数据放在和代码同一个文件夹下面,并用dropna()函数,去除空值,示例代码如下:
#加载必要Pandas的模块
import pandas as pd
# 读取文本数据
data = pd.read_csv('weibo_senti_100k.csv')
data = data.dropna() #去掉数据集的空值
data.shape #输出数据结构
data.head() # 输出文本数据集的前5行
执行结果如图2所示。
由以上结果可以看出,处理后的微博文本数据总量是119988条记录,label列的1表示正向评论,0表示负面评论。微博文本里即有中文、英文,还有数字、符号还有各种各样的表情等等,因此有接下来的处理。
3.2 分词。
原始微博文本数据已经准备好,接下来对文本内容进行分词处理。分词顾名思义就是将一句话或一段话划分成一个个独立的词,目前有大量用于分词的工具,如jiaba、nltk、thulac和pynlpir等,对于目前中文来说jieba分词效果是比较好的,因此本文使用Python中的jiaba库对样本数据进行分词处理,利用.cut()函数实现。
由于Anaconda没有集成Jieba分词库,因此需要安装这个分词库,步骤如下:
(1)打开Anaconda Prompt,开始菜单—>Anaconda3—>Anaconda Prompt,由于jieba库官方下载库有可能会很慢,故可以改用下面的仓库镜像,示例代码如下:
#conda命令设置增加channels地址,输入清华大学仓库镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
#使上面的网址设置生效
conda config --set show_channel_urls yes
3.3 去停用词。
停用词是指在信息检索中,为节省存储空间和提高搜索效率,在处理自然语言数据(或文本)之前或之后会自动过滤掉某些字或词,这些字或词即被称为Stop Words(停用词),就如同图3发现分词之后有很多无用字符、或一些助词包括语气助词、副词、介词、连接词等,通常自身 并无明确的意义,只有将其放入一个完整的句子中才有一定作用,如常见的“的”、“在”之类等等,这些都需去掉,部分停用词如图4所示。
利用这些停用词,把微博的评论数据清理一遍,放在新建立的data[‘data_after’]一列,示例代码如下:
# 去停用词
# 读取停用词
with open('stopword.txt','r',encoding = 'utf-8') as f: #读取停用词txt文档
stop = f.readlines()
# 对停用词处理
import re
stop = [re.sub(' |\n|\ufeff','',r) for r in stop] #替换停用词表的空格等
# 去除停用词
#把分词之后的文本根据停用词表去掉停用词
data['data_after'] = [[i for i in s if i not in stop] for s in data['data_cut']]
data.head()
3.4 词向量。
词向量已经完成,接下来利用可视化技术对文本数据进行探讨,这里采用第三方的WordCloud(词云)库进行。WordCloud(词云)是Python中一个非常优秀的第三方词云可视化展示库,其工作原理是以词语为基本单位,根据给出的字符串,对词频进行统计,然后以不同的大小显示出来,更加直观和艺术的展示文本。
输出词云之前,还需要对微博文本数据进行处理,步骤如下:
(1)把去停用词后的data[‘data_after’]词组全部整合在一个列表。
(2)把每个单词计算词频数大小。
(3)调用WordCloud方法,定义好各个参数。
(4)输出词云。
经过以上的步骤,可以把本次实验的微博文本数据的词云画出来
# 用wordcloud画图
wc_pic = WordCloud(background_color='white',font_path=r'C:\Windows\Fonts\simhei.ttf').fit_words(num)
plt.figure(figsize=(10,10)) #图片大小定义
plt.imshow(wc_pic)#输出图片
plt.axis('off')#不显示坐标轴
plt.show()
执行结果如图5所示。
4结论
支持向量机(Support Vector Machine, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,SVM学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。SVM在很多领域取得成功,比如文本分类,图像分类,生物序列分析和生物数据挖掘等等领域有很多的应用。
支持向量机算法被认为是文本分类中效果较为优秀的一种方法,它是一种建立在统计学习理论基础上的机器学习方法。因此本小节采用支持向量机对本次微博文本情感分析进行分类。前面已经把数据预处理完毕,运用sklearn包的SVC()函数实现支持向量机分类,
参考文献:
[1]融合MAML与BiLSTM的微博负面情感多分类方法 ,徐超; 叶宁; 徐康; 王汝传,计算机工程与应用,2021-04-16
[2]文本情感分析方法研究综述,王婷; 杨文忠 计算机工程与应用,2021-04-16
[3]基于BERT模型的景区评论情感分析,蔡汶兴; 李兴东,贵州大学学报(自然科学版) 2021-04-02
[4]基于FastText字向量与双向GRU循环神经网络的短文本情感分析研究——以微博评论文本为例,范昊; 李鹏飞 情报科学,2021-04-01