机器学习:基于神经网络对用户评论情感分析预测

news2025/1/18 17:10:26

机器学习:基于神经网络对用户评论情感分析预测

作者:AOAIYI

作者简介:Python领域新星作者、多项比赛获奖者:AOAIYI首页

😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍

📜📜📜如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习进步!💪


专栏案例:机器学习
机器学习:基于逻辑回归对某银行客户违约预测分析
机器学习:学习k-近邻(KNN)模型建立、使用和评价
机器学习:基于支持向量机(SVM)进行人脸识别预测
决策树算法分析天气、周末和促销活动对销量的影响
机器学习:线性回归分析女性身高与体重之间的关系
机器学习:基于主成分分析(PCA)对数据降维
机器学习:基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测
机器学习:学习KMeans算法,了解模型创建、使用模型及模型评价

文章目录

  • 机器学习:基于神经网络对用户评论情感分析预测
  • 一、实验前言
  • 二、实验原理
  • 三、实验环境
  • 四、实验内容
  • 五、实验步骤
    • 1.数据读取
    • 2.中文分词
    • 3.文本向量化
    • 4.神经网络模型搭建
    • 5.模型使用
    • 6.模型对比(朴素贝叶斯模型)
  • 总结


一、实验前言

ChatGPT自2022年11月发布以来,我基本上每天都在使用。我主要关注它的逻辑推理能力,而不仅仅是它拥有哪些知识。我认为,逻辑推理能力对判断一个模型是否达到了类似人的思维水平更重要。
针对当下全民关注ChatGPT的火爆现象,业界有一种较高的呼声是,它正在带动AI(人工智能)新一轮发展浪潮的看法。在张祥雨看来,引发AI新一轮浪潮的不止是ChatGPT——它只是大模型技术的一种应用,近几年自然语言大模型方面呈现跨越式发展的核心逻辑在于规模化效应。简单来说就是,在AI模型里,可以通过不断地增加数据、增加模型大小来实现性能的持续提升。
“ChatGPT科研价值更大”
自深度学习(Deep Learning)提出十几年来,业界很多人认为规模化效应“到头了”,因为随着模型的增大和数据量的增多,模型的收益逐渐递减,即所谓的“边际效应递减”——越增加数据,收益就越来越不明显,性价比就越低。张祥雨指出,这两年,在自然语言处理大模型上却出现了一个不同的现象,即当模型的参数量、训练数据量达到千亿量级时,模型的高级思维能力突然出现了跨越式的增长,这一增长是过去从来没有发现过的。现在大概在千亿量级这个参数“关口”,数据和模型量稍微增加一些,模型突然出现了原来不曾有的推理能力,还激发了一些之前往往被认为只有人类才有的能力,如思维链能力。当然,这背后还有诸如代码预训练等许多技术,共同推动了AI的跨越式发展。
我认为,目前以ChatGPT为代表的AIGC(利用人工智能技术来生成内容),包括它背后的大模型的意义,不仅仅是在落地本身,在我看来它的科研价值可能更大。”张祥雨分析道, 科研价值主要体现在研究人类智能如何产生。从技术角度来看,AI大模型的设计和训练过程并没有专门针对智能做特殊的设计。它的逻辑推理、思维链、reasoning的能力,是研究人员通过大幅增加参数量、增加训练数据量的过程中突然激发出来的,这个现象是非同寻常的。其实这和生物的进化包括人类的进化史也是非常像的。这种突然产生的智能背后不是靠专门的设计,是模型自然而然所形成的。(源于网络)

二、实验原理

神经网络模型的思想来源于模仿人类大脑思考的方式。神经元是神经系统最基本的结构和功能单位,分为突起和细胞体两部分。突起作用是接受冲动并传递给细胞体,细胞体整合输入的信息并传出。

人类大脑在思考时,神经元会接受外部的刺激,当传入的冲动使神经元的电位超过阈值时,神经元就会从抑制转向兴奋,并将信号向下一个神经元传导。神经网络的思想是通过构造人造神经元的方式模拟这一过程。

(1) 单层神经网络模型
如下图所示,在一个简单的神经网络模型中有两组神经元,一组接收信号,一组输出信号。接受信号的一组通过线性变换和非线性的激活函数转换来修改信号,并传递给下一组。
在这里插入图片描述

输出层信号的计算分为两步:
第二步:对加权平均后的结果使用激活函数(Activation Function) ϕ(x)进行非线性的转化,计算出输出值:

y=ϕ(y^′)

在神经网络模型中,常用来做非线性转换的激活函数有Sigmoid函数、Tanh函数、Relu函数。

Sigmoid函数:如下图所示,该函数是将取值为(−∞,∞)的数转换到(0,1)之间,可以用来做二分类。其导数 f′(x) 从0开始,很快就又趋近于0,所以在梯度下降时会出现梯度消失;而且sigmoid函数的均值是0.5而非0,不利于下一层的输出。

f(x)=1/1+e^−x
在这里插入图片描述

Tanh函数:如右图所示, Tanh函数将取值为(−∞,∞)的数转换到(-1,1)之间。当x很大或者很小的时候,导数 f′(x)也会很接近0,和sigmoid函数有同样的梯度消失的问题。但是tanh函数的均值为0,在这点上弥补了sigmoid函数均值为0.5的缺点。
f(x)=ex−e−x/ex+e−x

在这里插入图片描述

Relu函数:如右图所示, Relu函数是一种分段线性函数,它在输入为正数时弥补了Sigmoid函数以及Tanh函数的梯度消失问题,但是输入为负数时仍然有梯度消失的问题。此外Relu函数的计算速度相对于Sigmoid函数和Tanh函数也较快一些,在实战应用中,Relu函数在神经网络模型中用的相对较广一些。
在这里插入图片描述
在这里插入图片描述

(2) 多层神经网络模型
实际应用中,常常采用如下图所示的多层神经网络,在多层神经网络模型中,输入层和输出层间可以有多层隐藏层,层与层之间互相连接,信号通过线性变换和激活函数的复杂映射,不断地进行传递。
在这里插入图片描述

三、实验环境

  • Anaconda
  • python3.9
  • jupyter notebook

四、实验内容

学习神经网络模型,使用jieba分词对用户评论情感数据分析。

五、实验步骤

1.数据读取

1.数据准备
在这里插入图片描述
2.数据导入

import pandas as pd
df = pd.read_excel(r"C:\Users\XWJ\Desktop\用户评论情感数据.xlsx")
df.head()

在这里插入图片描述

2.中文分词

1.jieba库分词实例

import jieba
word = jieba.cut('我爱中国')
for i in word:
    print(i)

在这里插入图片描述

2.使用.iloc获取数据表信息

df.iloc[0]

在这里插入图片描述

3.演示第一条评论的分词效果

import jieba
word = jieba.cut(df.iloc[0]['评论'])
result = ' '.join(word)
print(result)

在这里插入图片描述

4.遍历整张表格,对所有评论进行分词

words = []
for i, row in df.iterrows():
    word = jieba.cut(row['评论'])
    result = ' '.join(word) 
    words.append(result)
words[0:3]

在这里插入图片描述

3.文本向量化

1.使用CountVectorizer()函数对文本向量化(示例)

from sklearn.feature_extraction.text import CountVectorizer
test = ['手机 外观 漂亮', '手机 图片 清晰']
vect = CountVectorizer()
X = vect.fit_transform(test)
X = X.toarray()
words_bag = vect.vocabulary_
print(words_bag)

在这里插入图片描述

2.使用CountVectorizer()函数对文本向量化(实际应用)

from sklearn.feature_extraction.text import CountVectorizer
vect = CountVectorizer()
X = vect.fit_transform(words)
X = X.toarray()
print(X)

在这里插入图片描述

words_bag = vect.vocabulary_
print(words_bag)

查看words_bag数量

len(words_bag)

3.目标变量提取

y = df['评价']
y.head()

在这里插入图片描述

4.神经网络模型搭建

1.切分训练集和测试集

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=1)

2.建立神经网络模型

from sklearn.neural_network import MLPClassifier
mlp =MLPClassifier()  
mlp.fit(X_train, y_train)

因为模型运行具有随机性,如果想让每次运行结果一致,可以设置random_state随机参数为任一数字,如MLPClassifier(random_state=123)

在这里插入图片描述

输出结果

y_pred = mlp.predict(X_test)
print(y_pred)

在这里插入图片描述

3.获取预测准确度

from sklearn.metrics import accuracy_score
score = accuracy_score(y_pred, y_test)
score

准确度:0.9814814814814815

5.模型使用

1.检验模型

comment = input('请输入您对本商品的评价:')
comment = [' '.join(jieba.cut(comment))]
print(comment)
X_try = vect.transform(comment)
y_pred = mlp.predict(X_try.toarray())
print(y_pred)

6.模型对比(朴素贝叶斯模型)

from sklearn.naive_bayes import GaussianNB
nb_clf = GaussianNB()
nb_clf.fit(X_train,y_train)

y_pred = nb_clf.predict(X_test)
print(y_pred)

from sklearn.metrics import accuracy_score
score = accuracy_score(y_pred, y_test)
print(score)

在这里插入图片描述


总结

神经网络模型的思想来源于模仿人类大脑思考的方式。神经元是神经系统最基本的结构和功能单位,分为突起和细胞体两部分。突起作用是接受冲动并传递给细胞体,细胞体整合输入的信息并传出。

人类大脑在思考时,神经元会接受外部的刺激,当传入的冲动使神经元的电位超过阈值时,神经元就会从抑制转向兴奋,并将信号向下一个神经元传导。神经网络的思想是通过构造人造神经元的方式模拟这一过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/387022.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入理解RDBMS-学习笔记

1 经典案例 1.1 红包雨 1.2 事务ACID 1.3 红包雨与ACID 1.3.1 原子性 1.3.2 一致性 1.3.3 隔离性 1.3.4 持久化 1.4 红包雨与高并发 1.5 红包雨与高可靠 2 发展历史 2.1 前DBMS时代 2.1.1 人工管理 2.1.2 文件系统 1950s,现代计算机的雏形基本出现。1956年IB…

怎样对一张图像进行直方图均衡化?(或者图像均衡化代码?)

怎样对一张图像进行直方图均衡化?(或者图像均衡化代码?) 图像增强概述 图像增强是有目的地强调图像的整体或局部特性,将原来不清晰的图像变得清晰或强调某些感兴趣的特征,扩大图像中不同物体特征之间的差…

认识异或运算

1.什么是异或运算 异或运算是位运算的一种,符号为:^ 运算规则为:相同为0,不同为1 例如 性质: N ^ 0 N N ^ N 0 A ^ B B ^ A (A ^ B) ^ C A ^ (B ^ C)N ^ 0 N public class XorOperation {public static void …

【算法基础】排序 插入、归并、堆、快速 升序+降序

目录 1.排序 1.1 插入排序 1.2 归并排序 1.3 推排序 1.4 快速排序 1.排序 1.1 插入排序 时间复杂度:O(n)~O(n*n) 空间复杂度:O(1) 稳定 步骤: 1.设第一个元素为有序列。 2.取有序列后面的一个元素。 3.将该元素插入到有序列中的正确位…

【C语言学习笔记】:一维数组指针,二维数组指针

数组(Array)是一系列具有相同类型的数据的集合,每一份数据叫做一个数组元素(Element)。数组中的所有元素在内存中是连续排列的,整个数组占用的是一块内存。以int arr[] { 99, 15, 100, 888, 252 };为例&am…

Linux | 调试器GDB的详细教程【纯命令行调试】

文章目录一、前言二、调试版本与发布版本1、见见gdb2、程序员与测试人员3、为什么Release不能调试但DeBug可以调试❓三、使用gdb调试代码1、指令集汇总2、命令演示⌨ 行号显示⌨ 断点设置⌨ 查看断点信息⌨ 删除断点⌨ 开启 / 禁用断点⌨ 运行 / 调试⌨ 逐过程和逐语句⌨ 打印 …

C/C++开发,无可避免的多线程(篇二).thread与其支持库

一、原子类型与原子操作 1.1 原子类型与操作介绍 在前一篇博文中,多线程交互示例代码中,给出了一个原子类型定义: // 原子数据类型 atomic_llong total {0}; 那么什么事原子数据类型呢,和c的基础数据类型有什么不同呢&#xff1a…

实验一 Python编程基础

目录 一、实验目标 二、实验内容 1.绘制如下图形 ,一个正方形,内有三个红点,中间红点在正方形中心。 2.使用turtle库绘制如下图形: 3.绘制奥运五环图 4.回文问题 5.身份证性别判别 6.数据压缩 7.验证哥德巴赫猜想 8.使…

JVM常用指令

JVM常用指令1.准备工作2.jps3. jconsole4.jstat5.jstack6.jmap7.jvisualvm工具8.自动dump内存信息1.准备工作 在idea中编写代码 public class JVMTest {Testpublic void test() throws InterruptedException {while (true) {Thread.sleep(1000);System.out.println(123);}} }…

Unity 入门精要01---标准光照模型

本节基础知识结构 基础光照部分 环境光 在标准光照模型中,我们会环境光来代替间接光照 Cambient g amient 我们可以在Windows->Rendering->Lighting->Enviroment进行修改Ambient 的Color 自发光 直接在最后片元着色器输出颜色之前把材质的自发光颜色添…

深圳大学计软《面向对象的程序设计》实验13 运算符重载

A. 三维坐标点的平移(运算符重载) 题目描述 定义一个三维点Point类,利用友元函数重载"“和”–"运算符,并区分这两种运算符的前置和后置运算。 要求如下: 1.实现Point类; 2.编写main函数&a…

关于2023年造林施工、林业设计资质,新办、年审的最新通知!

一、资质类别省林学会本年度开展认定的资质种类包括:造林绿化类(含施工资质、监理资质)、林业有害生物防治类(含防治资质、监理资质)和林业调查规划设计类。二、认定标准资质认定执行以下标准:1.造林绿化施…

边缘计算:万字长文详解高通SNPE inception_v3安卓端DSP推理加速实战

本文是在以下文章的基础上编写,关于SNPE环境部署和服务器端推理可以参考上一篇文章: 边缘计算:万字长文详解高通SNPE inception_v3推理实战_seaside2003的博客-CSDN博客 本文最/关键的是利用SNPE在安卓环境不同的runtimes(CPU/G…

高通 Android10/12 4 6dof Camera+2RGBCamera异常处理经验总结

1 背景:此需求apk距离之前更改时间将近9个月,我们这边原来跟驱动那边对接指令和角度 后续没有改过,测试部说apk cameaid提示信息不正确。 2 原因:因为之前用的1.0基线(Android 10) 后面由于客户功能需求变更&#xff…

进程信号生命周期详解

信号和信号量半毛钱关系都没有! 每个信号都有一个编号和一个宏定义名称,这些宏定义可以在signal.h中找到,例如其中有定 义 #define SIGINT 2 查看信号的机制,如默认处理动作man 7 signal SIGINT的默认处理动作是终止进程,SIGQUIT的默认处理…

23届春招结束_分享java岗面试心得

23届春招结束_分享java岗面试心得 从一月10日开始投简历,经历了两个月的面试与学习,成功拿到了12k13薪的国企offer,春招结束了 一、经历秋招,被所谓的金九银十给坑惨了 在秋招的时候,经过网友(美团java岗…

九龙证券|利好政策密集发布,机构扎堆看好的高增长公司曝光

新能源轿车销量和保有量快速增长,带来了充电桩商场的微弱需求。 日前,商务部部长王文涛表明,本年将在落实好方针的一起,活跃出台新方针办法,比方辅导当地展开新能源轿车下乡活动,优化充电等使用环境&#x…

Vue3中的h函数

文章目录简介简单使用参数使用计数器进阶使用函数组件插槽专栏目录请点击 简介 众所周知,vue内部构建的其实是虚拟DOM,而虚拟DOM是由虚拟节点生成的,实质上虚拟节点也就是一个js对象事实上,我们在vue中写的template,最终也是经过…

Unity RectTransform Scale Handler - 如何在Runtime运行时拖动缩放窗口尺寸

文章目录简介变量说明实现光标移入移出鼠标拖动距离Anchor 锚点目标尺寸扩展方向简介 本文介绍如何在Runtime运行时拖动缩放UI窗口的尺寸,如图所示,在示例窗口的左上、上方、右上、左方、右方、左下、下方、右下,分别放置了一个拖动柄&#…

Spring之基于注解方式实例化BeanDefinition(1)

最近开始读Spring源码,读着读着发现里面还是有很多很好玩的东西在里面的,里面涉及到了大量的设计模式以及各种PostProcessor注入的过程,很好玩,也很复杂,本文就是记录一下我学习过程中的主干流程。 在开始我们源码解读…