资源下载地址:https://download.csdn.net/download/wouderw/87353433
情感极性分析,即情感分类,对带有主观情感色彩的文本进行分析、归纳。情感极性分析主要有两种分类方法:基于情感知识的方法和基于机器学习的方法。基于情感知识的方法通过一些已有的情感词典计算文本的情感极性(正向或负向),其方法是统计文本中出现的正、负向情感词数目或情感词的情感值来判断文本情感类别;基于机器学习的方法利用机器学习算法训练已标注情感类别的训练数据集训练分类模型,再通过分类模型预测文本所属情感分类。本项目采用机器学习方法实现对酒店评论数据的情感分类,利用Python语言实现情感分类模型的构建和预测,不包含理论部分,旨在通过实践一步步了解、实现中文情感极性分析。
1 开发环境准备
1.1 Python环境
在python官网Download Python | Python.org 下载计算机对应的python版本,项目使用的是Python3.8的版本。
1.2 第三方模块
本项目代码的实现使用到了多个第三方模块,主要模块如下所示:
备注:上述模块使用requirement.txt安装即可,pip install -r requirement.txt
2 数据获取
2.1 停用词词典
本项目使用中科院计算所中文自然语言处理开放平台发布的中文停用词表,包含了1208个停用词。文件为data文件夹的stopWord.txt,可以自行向里面增加词语。
2.2 正负向语料库
本项目选用正负各1000的平衡语料(ChnSentiCorp_htl_ba_2000)作为数据集进行分析。
3 数据预处理
3.1 正负向语料预处理
data/ChnSentiCorp_htl_ba_2000/文件夹中包含neg(负向语料)和pos(正向语料)两个文件夹,而文件夹中的每一篇评论为一个txt文档,可自行增加相应的语料,文本需使用utf8编码。为了方便之后的操作,需要把正向和负向评论分别规整到对应的一个txt文件中,即正向语料的集合文档(命名为2000_pos.txt)和负向语料的集合文档(命名为2000_neg.txt)。 具体Python实现代码如下所示:
执行结果如下:
运行完成后得到2000_pos.txt和2000_neg.txt两个文本文件,分别存放正向评论和负向评论,每篇评论为一行。文档部分截图如下所示:
3.2 中文文本分词
本项目采用结巴分词(jieba)分别对正向语料和负向语料进行分词处理。在进行分词前,需要对文本进行去除数字、字母和特殊符号的处理,使用python自带的string和re模块可以实现,其中string模块用于处理字符串操作,re模块用于正则表达式处理。 具体实现代码如下所示:
处理完成后,得到2000_pos_cut.txt和2000_neg_cut.txt两个txt文件,分别存放正负向语料分词后的结果。分词结果部分截图如下所示:
3.3 去停用词
分词完成后,即可读取停用词表中的停用词,对分词后的正负向语料进行匹配并去除停用词。去除停用词的步骤非常简单,主要有两个:
具体实现代码如下所示:
根据代码所示,停用词表的获取使用到了python特有的广播形式,一句代码即可搞定:
stopkey = [w.strip() for w in codecs.open('data\stopWord.txt', 'r', encoding='utf-8').readlines()]
读取出的每一个停用词必须要经过去符号处理即w.strip(),因为读取出的停用词还包含有换行符和制表符,如果不处理则匹配不上。代码执行完成后,得到2000_neg_cut_stopword.txt和2000_pos_cut_stopword.txt两个txt文件。
由于去停用词的步骤是在句子分词后执行的,因此通常与分词操作在同一个代码段中进行,即在句子分词操作完成后直接调用去停用词的函数,并得到去停用词后的结果,再写入结果文件中。本项目是为了便于步骤的理解将两者分开为两个代码文件执行,各位可根据自己的需求进行调整。
3.4 获取特征词向量
根据以上步骤得到了正负向语料的特征词文本,而模型的输入必须是数值型数据,因此需要将每条由词语组合而成的语句转化为一个数值型向量。常见的转化算法有Bag of Words(BOW)、TF-IDF、Word2Vec。本项目采用Word2Vec词向量模型将语料转换为词向量。
由于特征词向量的抽取是基于已经训练好的词向量模型,而wiki中文语料是公认的大型中文语料,本项目拟从wiki中文语料生成的词向量中抽取本文语料的特征词向量。可搜索wiki.zh.text.vector下载或联系本人提供网盘下载(大小接近4G)。
获取特征词向量的主要步骤如下:
主要代码如下图所示:
代码执行完成后,得到一个名为2000_data.csv的文件,第一列为类别对应的数值(1-pos, 0-neg),第二列开始为数值向量,每一行代表一条评论。结果的部分截图如下所示:
3.5 降维
Word2vec模型设定了256的维度进行训练,得到的词向量为256维,本文采用PCA算法对结果进行降维。具体实现代码如下所示:
运行代码,根据结果图发现前100维就能够较好的包含原始数据的绝大部分内容,因此选定前100维作为模型的输入。
4 分类模型构建
本文采用支持向量机(SVM)作为本次实验的中文文本分类模型,其他分类模型采用相同的分析流程,在此不赘述。
支持向量机(SVM)是一种有监督的机器学习模型。本文首先采用经典的机器学习算法SVM作为分类器算法,通过计算测试集的预测精度和ROC曲线来验证分类器的有效性,一般来说ROC曲线的面积(AUC)越大模型的表现越好。 首先使用SVM作为分类器算法,随后利用matplotlib和metric库来构建ROC曲线。具体python代码如下所示:
运行代码,得到Test Accuracy: 0.85,即本次实验测试集的预测准确率为85%,ROC曲线如下图所示。
资源下载地址:https://download.csdn.net/download/wouderw/87353433
资源文件列表如下: