【深度学习教程】Python 如何用 LSTM 做情感分析?小白也能上手!

news/2025/1/16 17:15:39/文章来源:https://www.cnblogs.com/gdutxiaoxu/p/18675403

【深度学习教程】如何用 LSTM 做情感分析?小白也能上手!

Hello 大家好,今天我们来聊一个超热门的话题——LSTM 网络在情感分析中的应用!想象一下,通过深度学习,你的代码可以读懂人类情绪,知道“我爱你”和“我讨厌你”的区别,是不是很酷?今天这篇文章,我会手把手教你从零开始,用 Python 和 Keras 实现一个基于 LSTM 的情感分析项目,新手小白也能看得懂!

LSTM 是深度学习里的一位“长跑选手”,尤其擅长处理文本序列数据,像语音识别、机器翻译、文本生成这些领域,它都能大显身手。这篇文章我会带你了解:

  • LSTM 网络的基础原理;
  • 如何用 LSTM 搭建情感分析模型;
  • 数据预处理、训练和评估的完整流程。

一、LSTM 是什么?为什么它适合情感分析?

先来点“基础知识补课”。
LSTM,也就是 Long Short-Term Memory,是一种改良的循环神经网络(RNN)。普通的 RNN 很容易在长序列数据上“记不住”之前的信息,比如说,它看到了一句小说的前半段,但后半段完全忘了上下文。LSTM 的厉害之处在于它的结构——遗忘门、输入门和输出门——可以让它有效地保留长期记忆,还能屏蔽无关信息。

而情感分析呢,本质上就是一类序列数据的分类问题:从一段文本里分析它是正面的还是负面的情绪。LSTM 擅长处理这种数据,因为它不仅能记住单词,还能理解单词之间的关系和上下文含义。


二、我们要实现什么?情感分析项目概述

在今天的项目中,我们会用 Keras 这个深度学习框架,基于一个叫做 IMDB 数据集 的经典数据集,搭建一个简单的 LSTM 模型。IMDB 数据集包含 50,000 条电影评论,每条评论都被标记为正面(1)或负面(0),这正好是我们情感分析模型的理想训练素材。

项目的主要步骤:

  1. 数据加载与预处理:将文本数据转换为机器可读的格式;
  2. LSTM 模型构建:设计一个简单的 LSTM 网络;
  3. 模型训练与验证:让模型“学习”这些数据;
  4. 模型评估与预测:检查模型效果并用它进行情感预测。

三、项目环境准备

在正式开始之前,我们需要确保环境里安装了必要的工具。所需的库如下:

  • TensorFlow:主框架,Keras 集成在其中;
  • numpy:用于数组处理;
  • matplotlib(可选):用来画训练曲线。

安装命令:

pip install tensorflow numpy matplotlib

安装好之后,我们就可以开整啦!


四、加载和预处理数据

在深度学习中,数据处理是第一步,也是最重要的一步。我们直接用 Keras 提供的 IMDB 数据集,它已经帮我们完成了分词和编号的工作,非常方便。

加载数据集

from tensorflow.keras.datasets import imdb
from tensorflow.keras.preprocessing.sequence import pad_sequences# 定义参数
max_words = 10000  # 只保留数据集中最常见的 10,000 个单词
max_len = 200  # 每条评论截断或填充到 200 个单词# 加载数据集
(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_words)print(f"训练集样本数: {len(x_train)}, 测试集样本数: {len(x_test)}")

数据预处理

IMDB 数据集的每条评论已经转换成了一个整数序列,每个整数对应一个单词。我们需要将这些序列统一填充到 200 个单词的长度,这样才能输入到 LSTM 模型中。

# 填充序列
x_train = pad_sequences(x_train, maxlen=max_len)
x_test = pad_sequences(x_test, maxlen=max_len)print(f"填充后的训练数据形状: {x_train.shape}")

五、构建 LSTM 模型

网络架构

LSTM 模型的核心是:

  1. 嵌入层(Embedding Layer):将整数序列转换为稠密向量;
  2. LSTM 层:学习序列数据的特征;
  3. 全连接层(Dense Layer):生成分类结果。

代码实现

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, Dense# 定义模型
model = Sequential([Embedding(input_dim=max_words, output_dim=128, input_length=max_len),  # 嵌入层LSTM(128, dropout=0.2, recurrent_dropout=0.2),  # LSTM 层Dense(1, activation='sigmoid')  # 输出层
])# 编译模型
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])# 输出模型结构
model.summary()

这个模型结构相当紧凑,非常适合新手入门。


六、训练模型

我们定义训练的超参数:

  • batch_size = 64:每次输入到模型的样本数;
  • epochs = 5:训练的迭代次数。

开始训练:

history = model.fit(x_train, y_train, batch_size=64, epochs=5, validation_split=0.2  # 20% 的训练数据用作验证集
)

训练完成后,Keras 会返回一个 history 对象,记录了每个 epoch 的训练损失和准确率。


七、评估模型

训练完成后,我们可以在测试集上检查模型的表现。

# 在测试集上评估
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)
print(f"测试集准确率: {test_acc:.4f}")

如果测试集准确率超过 85%,说明模型已经表现不错啦!


八、预测新评论的情感

模型训练完成后,我们可以用它对新评论的情感进行预测。假设我们有一条新评论:“The movie was fantastic and the acting was superb!”

预测代码:

from tensorflow.keras.preprocessing.text import Tokenizer# 定义新评论
new_review = ["The movie was fantastic and the acting was superb!"]# 将评论转为序列
tokenizer = Tokenizer(num_words=max_words)
tokenizer.fit_on_texts(new_review)
new_review_seq = tokenizer.texts_to_sequences(new_review)# 填充序列
new_review_pad = pad_sequences(new_review_seq, maxlen=max_len)# 预测情感
prediction = model.predict(new_review_pad)
print(f"情感预测: {prediction[0][0]:.4f},(0 为负面,1 为正面)")

模型会输出一个概率值,接近 1 表示正面情感,接近 0 表示负面情感。


九、项目优化建议

  1. 使用双向 LSTM:通过双向 LSTM 同时捕捉前后文信息。
  2. 引入预训练词向量:例如 GloVe,可以让模型更好地理解单词含义。
  3. 增加数据增强:通过同义词替换、反义词生成等方法增加训练数据。

双向 LSTM 的代码示例:

from tensorflow.keras.layers import Bidirectionalmodel = Sequential([Embedding(input_dim=max_words, output_dim=128, input_length=max_len),Bidirectional(LSTM(128, dropout=0.2, recurrent_dropout=0.2)),Dense(1, activation='sigmoid')
])

十、总结与展望

在本文中,我们从零开始实现了一个基于 LSTM 的情感分析项目,从数据预处理到模型训练和评估,覆盖了完整流程。这仅仅是情感分析的入门,未来你还可以探索更多高级技术,例如注意力机制、BERT 等预训练模型。

如果你觉得这篇教程对你有帮助,不要忘了点赞收藏!有任何问题也欢迎在评论区讨论,我们下期再见啦~

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安川YASKAWA机器人主板维修方法合集

安川机械手板卡故障分析与YASKAWA机械臂主板维修步骤 1. 确认故障现象:首先,我们需要详细了解安川机器人主板故障现象,包括但不限于工作异常、运行错误、速度变慢等。 2. 拆卸主板:根据故障现象,找到相应的机械手电路板故障部位,并小心地将主板拆卸下来,确保不损坏其他部…

lstm理解

batch_size:表示再这样的数据集中有多少数据表单,本列中为3张表单,构成3维数据。若是10张表单,则10张表单堆叠在一起,构成3维数据。time_step:表示在3维时间序列中,每张表有多少行,每个时间序列有多少点,时间点实际就是时序序列的序列长度,成为时间步。input_diensio…

虚拟机Centos7.6安装Mysql8

由于本人贫穷, 没钱搞服务器, 就在虚拟机上安装了一个centos7.6服务器,然后今天给大家带来的是在centos7.6安装mysql8的教程。如果你也跟我一样贫穷,可以根据下面这篇教程来在虚拟机上安装centos7.6系统: https://zhuanlan.zhihu.com/p/698840895安装完成后,用xshell等工…

Cisco ACI Simulator 6.1(2g) - ACI 模拟器

Cisco ACI Simulator 6.1(2g) - ACI 模拟器Cisco ACI Simulator 6.1(2g) - ACI 模拟器 Application Centric Infrastructure (ACI) Simulator Software 请访问原文链接:https://sysin.org/blog/cisco-acisim-6/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.orgAC…

如何让项目进度一目了然?办公可视化工具的最佳实践

在数字化办公浪潮中,信息的快速流转与精准解读成为提升竞争力的关键要素。办公可视化工具应运而生,它宛如一座桥梁,跨越了数据的繁杂海洋,将晦涩难懂的数据转化为直观易懂的视觉呈现。 从项目管理角度来看,可视化工具能够将项目进度、任务分配等关键信息以清晰的图表、看板…

docker安装apache.211011

1, docker下载apache docker search apache docker pull httpd docker images2,docker run docker run --name httpd -p 8081:80 -v /ZT/webnav/:/usr/local/apache2/htdocs -d httpd`重要提示: apache默认为80端口,所以如果,如果,如果需要改80端口为其他端口,切记!!!…

16-应急响应

1、通过华为云沃土云创计划免费薅云服务器访问https://developer.huaweicloud.com/programs/dev-program.html 使用方向选择个人(需要先注册实名认证)填写邮箱等信息成功加入沃土云创计划个人方向在激励管理 > 计划权益 > 申请学习代金券申请之后就会给你⼀个400额度的…

Beekeeper Studio:高颜值且免费的SQL开发工具

今天给大家介绍一款简单易用而且美观的免费 SQL 客户端:Beekeeper Studio。 Beekeeper Studio 简介 Beekeeper Studio 是一款免费开源的 SQL 开发和数据库管理工具,具有美观高效、简单易用的特点。Beekeeper Studio 基于 Vue.js 开发,遵循 MIT 开源协议,支持 Windows、Linu…

练习1

输入与输出的小练习o_o ....以下将textarea作为输入框,run按钮添加了监听事件,pre作为输出框。test.html中的内容为: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" cont…

博客园 1Panel 联合终身会员上线

园子和飞致云合作的联合会员这周开始上线,1月13日上线了 1Panel 联合终身会员,1月14日上线了 Halo 联合终身会员。在博客园团队博客转发一下飞致云的全资子公司凌霞软件针对「博客园 & 1Panel 联合终身会员上线」的官方发文园子和飞致云合作的联合会员这周开始上线,1月1…

AcWing 98. 分形之城 题解

题面 link 【题目描述】 城市的规划在城市建设中是个大问题。 不幸的是,很多城市在开始建设的时候并没有很好的规划,城市规模扩大之后规划不合理的问题就开始显现。 而这座名为 Fractal 的城市设想了这样的一个规划方案,如下图所示:当城区规模扩大之后,Fractal 的解决方案…

jarvisoj_fm

格式字符串漏洞的篡改内容看到x值为3,将x的值改为4就好首先传入x参数的地址,这个地址存放在栈上偏移为11的位置,利用%11$n,定位到了偏移为11的位置,往这个位置写入数据,写入的数据由%11$n前面的参数的长度决定,而我们的x参数的地址,正好是4位,不需要添a来补齐位数就可以…