基于Python实现情感分析实验

1, 情感分析综述 情感分析也称为意见挖掘,是自然语言处理(NLP)中的一个领域,它试图在文本中识别和提取意见, 情感分析有很多的应用场景,例如社交媒体监控

本文包含相关资料包-----> 点击直达获取<-------

1. 情感分析综述

情感分析也称为意见挖掘,是自然语言处理(NLP)中的一个领域,它试图在文本中识别和提取意见。

情感分析有很多的应用场景,例如社交媒体监控、品牌监控、客户之声、客户服务、员工分析、产品分析、市场研究与分析等等。

实现情感分析的方法有很多,大体上分为两大类,第一类为基于词典规则的方法,第二类为基于机器学习的方法。

1.1 基于词典的方法

基于词典的方法主要通过制定一系列的情感词典和规则,对文本进行拆句、分析及匹配词典(一般有词性分析,句法依存分析),计算情感值,最后通过情感值来作为文本的情感倾向判断的依据。

基于词典的情感分析大致步骤如下:

  • 对大于句子力度的文本进行拆解句子操作,以句子为最小分析单元;
  • 分析句子中出现的词语并按照情感词典匹配;
  • 处理否定逻辑及转折逻辑;
  • 计算整句情感词得分(根据词语不同,极性不同,程度不同等因素进行加权求和);
  • 根据情感得分输出句子情感倾向性。

如果是对篇章或者段落级别的情感分析任务,按照具体的情况,可以以对每个句子进行单一情感分析并融合的形式进行,也可以先抽取情感主题句后进行句子情感分析,得到最终情感分析结果。

1.2 基于机器学习的方法

机器学习的方法是将情感分析作为一个有监督的分类问题。对于情感极性的判断,将目标情感分为三类:正、中、负。对训练文本进行人工标注,然后进行有监督的机器学习过程,并对测试数据用模型来预测结果。

基于机器学习的情感分析大致步骤如下:

首先进行文本预处理。文本的预处理过程是使用机器学习作用于文本分类的基础操作。由于文本是非结构化数据及其特殊性,计算机并不能直接理解,所以需要一系列的预处理操作后,转换为计算机可以处理的结构化数据。在实际分析中,文本更为复杂,书写规范也更为随意,且很有可能掺杂部分噪声数据。整体上来说,文本预处理模块包括去噪、特征提取、文本结构化表示等。

  • 特征抽取:

中文最小语素是字,但是往往词语才具有更明确的语义信息,但是随着分词,可能出现词语关系丢失的情况。n-元文法正好解决了这个问题,它也是传统机器学习分类任务中最常用的方法。

  • 文本向量化:

对抽取出来的特征,向量化是一个很重要的过程,是实现由人可以理解的文本转换为计算机可以处理数据的重要一步。这一步最常用到的就是词袋模型(bag-of-words )以及最近新出的连续分布词向量模型(word Embedding)。词袋模型长度为整个词表的长度,词语对应维度置为词频,文档的表示往往比较稀疏且维度较高。Embedding 的表示方式,能够有效的解决数据稀疏且降维到固定维度,更好的表示语义信息。对于文档表示,词袋模型可以直接叠加,而 Embedding 的方法可以使用深度学习的方法,通过 pooling 得到最终表示。

  • 特征选择:

在机器学习分类算法的使用过程中,特征好坏直接影响机器的准确率及召回率。选择有利于分类的特征,可以有效的减少训练开支及防止模型过拟合,尤其是数据量较大的情况下,这一部分工作的重要性更加明显。其选择方法为,将所有的训练语料输入,通过一定的方法,选择最有效的特征,主要的方法有卡方,信息熵,dp 深层感知器等等。

目前也有一些方法,从比句子粒度更细的层次去识别情感,如基于方面的情感分析(Aspect based Sentiment Analysis),他们从产品的评价属性等更细粒度的方面对评价主体进行情感倾向性分析。

文本转换为机器可处理的结构后,接下来便要选择进行机器学习的分类算法。目前,使用率比较高的是深度学习(CNN,RNN)和支持向量机(SVM)。深度学习的方法,运算量大,准确率有一定的提高,所以都在做这方面的尝试。而支持向量机则是比较传统的方法,其准确率及数据处理能力也比较出色,很多人都在用它来做分类任务。

2. 系统方法

本次实验的任务如下:

设计和实现分类系统,完成对文本的情感分类任务,这里包含三种情感:中性,积极和消极。程序语言、框架、学习方法不限,可使用外部语料,不可使用已有的情感分析或文本分类库。

由于不能使用现有的词典,考虑到仅仅用现有的 8606 条样例可能无法搭建出一个精准度较高的词典,如果使用基于词典的方法可能准确率不尽如人意。同时,基于词典的方法的召回率一般而言会比较低。因此,我优先准备使用机器学习的方法,将情感分析当作一个有监督的三分类问题。分类算法方面,我是用支持向量机(SVM),主要是因为 SVM 分类速度比较快,也比较容易实现,而且准确率也有一定的保证。(还因为不会 LSTM)

3. 实验设置

实验使用机器学习方法,其中分词工具使用 jieba 分词,使用 sklearn 中的 TfidfVectorizer 来进行词组向量化,使用 sklearn 中的 MultinomialNB 来进行标签分类。

代码说明如下:

python def read_json(path): = open(path, 'rb') return json.load(f)

该函数用于读取 JSON 类型的数据,采用二进制读入,避免了由于中文产生的问题。

python def analyzes(text):

该函数用于处理读入的数据,首先进行分词操作,如果数据带标签,那么就给分好的词附带标签,以便之后进行分类。具体核心实现如下:

c++ for line in text: = re.sub('[’@!,.:;\'\"#!?。:;、]+', '', line['content']) words.append(' '.join(jieba.lcut(t, cut_all=True)))

读入的数据是一个字典,键分别为‘id’、‘content’、‘label’,其中‘content’索引到的内容为具体的评论内容。对于每一条评论,去除评论中的标点符号以及特殊字符,然后使用 jieba 分词工具进行分词。分词后的单词用空格分隔。

c++ if len(line) == 2: continue

如果是不带标签的数据,那么仅进行分词就结束

c++ if line['label'] == 'positive': labels.append(1) elif line['label'] == 'neutral': labels.append(0) elif line['label'] == 'negative': labels.append(2)

如果是带标签的数据,那么对其附加标签。其中,积极赋予 1,中性赋予 0,消极赋予 2。

python def train_model(path):

该函数用于训练分类器。核心实现如下:

c++ text = read_json(path) words, labels = analyzes(text)

读入数据,进行标签分类。

c++ tf = TfidfVectorizer() x_train = tf.fit_transform(words).toarray()

将分词过的句子进行向量化,作为贝叶斯分类器的 X 向量

c++ y_train = labels

Y 向量为词语的情感标签

c++ mt = MultinomialNB(alpha=0.1) mt.fit(x_train, y_train) return tf, mt

训练分类器,并将分类器返回。

主函数如下:

c++ tf, mt = train_model('train_data.json')

训练分类器

c++ test_text = read_json('test.json') test_words = analyzes(test_text)

处理待分类的数据

c++ x_test = tf.transform(test_words).toarray() predict = mt.predict(x_test)

使用分类器对待分类的数据进行情感分析

c++ ans = [] for i in range(len(predict)): ans.append([i + 1, int(predict[i])]) = open('1180300315-周牧云.csv', 'w', encoding='utf-8', newline='') csv_writer = csv.writer(f) csv_writer.writerows(ans) close()

将答案写入 CSV 中

c++ print("finish")

4. 实验结果分析

实验结果已提交,正确率在 69% 左右。正确率最高的同学正确率能上 80%+,不知道使用了什么方法,肯定比我高明得多。

5. 结论

实验的正确率大体在可接受范围内,但还有继续提高的潜力。具体的内容上,我认为可以增加更多的训练样本来训练分类器,使其分类结果更准确。在对数据进行分词时,我选择去除了非中文的符号来排除一定的干扰,但有的时候标点符号也可能附带了一些情绪因素在里面,这方面还需要进行更细致的分类。除此之外,或许我可以考虑学习下使用深度学习的工具来进行分词,例如 LSTM,准确率应该能进一步上升。

参考文献

  • 基于产品属性的在线评论情感分析(中南民族大学·别亚林)
  • 基于知识图谱的社交媒体情感分析研究(东南大学·杨浩然)
  • 基于Transformer与自监督学习的情感分析模型研究(华中师范大学·杜晓东)
  • 基于情感分析的商品评价系统设计与实现(河北工程大学·崔新宇)
  • 面向中文产品评论的情感分析研究(西南大学·孙雪峰)
  • 基于文本情感分析的个性化推荐系统的研究(武汉邮电科学研究院·刘师培)
  • 基于情感分析的商品评价系统设计与实现(河北工程大学·崔新宇)
  • 基于情感分析的评论极性分类和电影推荐系统的设计与实现(安徽大学·夏明星)
  • 基于Bi-GRU与多头注意力机制结合的情感分类方法——以电商评论文本为例(首都经济贸易大学·张华琛)
  • 互联网舆情监控系统的设计与实现(湖南师范大学·夏岩)
  • 基于情感倾向的网络舆情分析系统的设计与实现(齐鲁工业大学·宋晓彤)
  • 基于深度表示学习的实体属性情感分析(天津大学·张翔)
  • 基于网络评论的情感分类技术的研究及应用(电子科技大学·郭捷)
  • 融合表情符号的淘宝评论情感分析系统设计与实现(中南财经政法大学·雷祝涛)
  • 基于BERT和深度神经网络的隐式文本情感分析研究(华东交通大学·吴瑞阳)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:源码货栈 ,原文地址:https://m.bishedaima.com/yuanma/36151.html

相关推荐

  • 基于SpringBoot框架的教师工作量管理系统

    这是一套采用🔥🔥SpringBoot框架构建的教师工作量管理系统的源代码,主要编程语言为Java,并结合了SpringBoot和Vue技术进行开发,开发工具可选用Idea或Eclipse
    2024年05月23日
    1 1 1
  • 使用 Python 实现的网站变化监测系统

    使用 Python 实现的网站变化监测系统 很多时候我们都有监测某个网站变化的需求,比如是否发布新通知了,是否有新更新了等,之前使用过 Chrome 的几个插件来实现这个功能
    2024年05月14日
    2 1 1
  • 图像压缩之Python

    图像压缩 Image Compression 提供中英文摘要 摘要 [中文]: 主成分分析可以用来减少矩阵(图片)的维度并且将这些新的维度投影行程新的 k 维图像
    2024年05月14日
    1 1 1
  • 基于Java+JSP+Servlet的图书管理系统

    这是一个🔥🔥基于JSP+Servlet的图书管理系统🔥🔥的项目源码,开发语言Java,开发环境Idea/Eclipse,这个 图书管理系统开发技术栈为JSP项目,可以作为毕业设计课程设计作业基于Java+Jsp+Servlet的编写一个图书管理系统
    2024年05月23日
    3 1 1
  • 基于Python实现多项式拟合正弦函数

    1, 实验目的 掌握最小二乘法求解(无惩罚项的损失函数),掌握加惩罚项(2 范数)的损失函数优化,梯度下降法,共轭梯度法,理解过拟合,克服过拟合的方法(如加惩罚项
    2024年05月14日
    2 1 2
  • 数据库原理大作业-web博客

    数据库原理大作业-web博客 开发环境 Windows 10 Ubuntu 16,04 server x64 管理员账号 :admin 密码 :adminpassword 游客账号 :guest 密码123456
    2024年05月14日
    3 1 1
  • B2B平台的医疗病历交互系统

    这是一个🔥🔥基于SpringBoot框架的B2B平台的医疗病历交互系统设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    1 1 1
  • 设计一个web服务器

    设计一个web服务器 课程设计目的 《Java&,net》是一门实践性较强的软件基础课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践,本课程设计的目的就是要达到理论与实际应用相结合
    2024年05月14日
    2 1 1
  • Python+MySQL用户加密存储验证系统

    Python+MySQL用户加密存储验证系统 Python 2,7 IDE Pycharm 5,0,3 PyMySQL 0
    2024年05月14日
    2 1 2
  • 基于Python实现点菜系统

    1, 课程设计目的 《软件设计基础-Python》课程设计是这门课程的实践性教学环节之一,本次设计结合实际应用的要求,使课程设计既覆盖Python的知识点,又接近工程实际需要
    2024年05月14日
    2 1 1

发表回复

登录后才能评论