循环神经网络实战:GRU 对比 LSTM 的中文情感分析(三)

循环神经网络实战:GRU 对比 LSTM 的中文情感分析(三)

文章目录

  • 循环神经网络实战:GRU 对比 LSTM 的中文情感分析(三)
    • 前言
    • 数据准备(与 LSTM 相同)
    • 模型搭建(GRU)
    • 训练与测试
    • 可视化 Loss 曲线
    • 测试与预测
    • GRU vs LSTM 对比
    • 总结


前言

在前两篇文章中,我们已经学习了 RNN/LSTM/GRU 的理论基础,并完成了一个基于 LSTM 的中文情感分析实战项目
那么问题来了:GRU 和 LSTM 到底哪个更好?

本篇我们将使用同样的任务(中文情感分析),用 GRU 模型替换 LSTM,并进行训练和测试,最后对比两者的 速度和效果


数据准备(与 LSTM 相同)

这里我们依然使用示例的 中文评论数据(完整项目请使用 ChnSentiCorp 数据集)。

import jieba
from torchtext.vocab import build_vocab_from_iterator
from torch.nn.utils.rnn import pad_sequence
import torchtexts = ["这部电影真的很好看", "剧情太差劲了,浪费时间", "演员表演很自然,值得推荐"]
labels = [1, 0, 1]tokenized_texts = [list(jieba.cut(t)) for t in texts]def yield_tokens(data):for tokens in data:yield tokensvocab = build_vocab_from_iterator(yield_tokens(tokenized_texts), specials=["<pad>"])
vocab.set_default_index(vocab["<pad>"])text_ids = [torch.tensor(vocab(t)) for t in tokenized_texts]
padded = pad_sequence(text_ids, batch_first=True, padding_value=vocab["<pad>"])

模型搭建(GRU)

在 LSTM 中,我们有输入门、遗忘门和输出门,而 GRU 更加简洁,只保留了 更新门(update gate)和重置门(reset gate),没有单独的细胞状态。

因此,GRU 参数更少,训练更快。

PyTorch 代码如下:

import torch.nn as nnclass SentimentGRU(nn.Module):def __init__(self, vocab_size, embed_dim, hidden_dim, num_layers, num_classes=1):super(SentimentGRU, self).__init__()self.embedding = nn.Embedding(vocab_size, embed_dim, padding_idx=0)self.gru = nn.GRU(embed_dim, hidden_dim, num_layers, batch_first=True)self.fc = nn.Linear(hidden_dim, num_classes)self.sigmoid = nn.Sigmoid()def forward(self, x):embedded = self.embedding(x)out, _ = self.gru(embedded)out = self.fc(out[:, -1, :])  # 取最后时刻的隐藏状态return self.sigmoid(out)

训练与测试

定义损失函数和优化器:

import torch.optim as optimmodel = SentimentGRU(vocab_size=len(vocab), embed_dim=128, hidden_dim=256, num_layers=2)
criterion = nn.BCELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)labels_tensor = torch.tensor(labels, dtype=torch.float)
losses = []

训练循环(记录 loss):

for epoch in range(10):optimizer.zero_grad()outputs = model(padded).squeeze()loss = criterion(outputs, labels_tensor)loss.backward()optimizer.step()losses.append(loss.item())print(f"Epoch {epoch+1}, Loss: {loss.item():.4f}")

可视化 Loss 曲线

import matplotlib.pyplot as pltplt.plot(losses, label="Training Loss (GRU)")
plt.xlabel("Epoch")
plt.ylabel("Loss")
plt.legend()
plt.show()

测试与预测

和 LSTM 一样,直接输入新评论:

def predict(text):tokens = list(jieba.cut(text))ids = torch.tensor(vocab(tokens)).unsqueeze(0)output = model(ids)return "积极" if output.item() > 0.5 else "消极"print(predict("故事很精彩"))
print(predict("导演水平太差"))

GRU vs LSTM 对比

我们来对比两个模型:

模型参数量训练速度效果(准确率)适用场景
LSTM较多较慢稳定,适合长期依赖NLP 长文本、机器翻译
GRU较少较快接近甚至优于 LSTM短文本分类、时间序列预测

实验结论:

  • 在小数据集(短文本)下,GRU 的表现通常和 LSTM 不相上下,但训练更快。
  • 在大规模数据集上,LSTM 更稳定,尤其在长依赖问题上优势明显。
  • 如果你追求 效率 → GRU 更好;
    如果你追求 精度和长期记忆能力 → LSTM 更稳妥。

总结

  1. 本文在 中文情感分析任务 中使用了 GRU 模型,并与 LSTM 进行了对比。

  2. 实验表明,GRU 训练速度更快,效果接近 LSTM,在短文本任务中性价比更高。

  3. 实际应用中,可以根据 任务规模与需求 来选择:

    • 小数据集/短文本 → GRU
    • 长文本/复杂依赖 → LSTM
    • 追求最强性能 → Transformer (BERT, GPT 等)

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

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

相关文章

学习游戏制作记录(制作提示框以及使用键盘切换UI)8.21

1.制作装备提示框创建提示框&#xff0c;添加文本子对象&#xff0c;用来描述名称&#xff0c;类型以及属性加成挂载垂直分配组件和文本大小适配组件&#xff0c;这样图像会根据文本大小来调整自己创建UI_ItemTip脚本并挂载在文本框上&#xff1a;[SerializeField] private Tex…

chapter07_初始化和销毁方法

一、简介 一个Bean&#xff0c;在进行实例化之后&#xff0c;需要进行两种初始化 初始化属性&#xff0c;由PropertyValues进行赋值初始化方法&#xff0c;由ApplicationContext统一调用&#xff0c;例如加载配置文件 Bean的初始化与销毁&#xff0c;共有三种方式&#xff08;注…

open webui源码分析6-Function

一、Functions简介 可以把Tools作为依赖于外部服务的插件&#xff0c;Functions就是内部插件&#xff0c;二者都是用来增强open webui的能力的。Functions是轻量的&#xff0c;高度可定制的&#xff0c;并且是用纯Python编写的&#xff0c;所以你可以自由地创建任何东西——从新…

C2039 “unref“:不是“osgEarth::Symbology::Style”的成员 问题分析及解决方法

在osgEarth2.10中实现多线段连续测量功能时,遇到下图中的错误; 经过测试和验证,主要问题出现在下图圈出代码的定义上 图22-1 对于22-1中的两个变量这样定义是错误的。因为Style类没有继承自osg::Referenced,因此不能与osg::ref_ptr配合使用

GitHub 热榜项目 - 日榜(2025-08-19)

GitHub 热榜项目 - 日榜(2025-08-19) 生成于&#xff1a;2025-08-19 统计摘要 共发现热门项目&#xff1a;12 个 榜单类型&#xff1a;日榜 本期热点趋势总结 本期GitHub热榜呈现三大技术热点&#xff1a;1&#xff09;AI原生开发持续爆发&#xff0c;Archon OS、Parlant等…

ingress 配置ssl证书

模拟环境举例&#xff1a; # 生成带 OU 的证书配置文件 cat > csr.conf <<EOF [ req ] default_bits 2048 prompt no default_md sha256 distinguished_name dn[ dn ] C CN ST Beijing L Beijing O YourCompany, Inc. # 组织名称 (必填) OU DevOps De…

Pandas 合并数据集:concat 和 append

文章目录Pandas 合并数据集&#xff1a;concat 和 append回顾&#xff1a;NumPy 数组的拼接使用 pd.concat 进行简单拼接重复索引将重复索引视为错误忽略索引添加多级索引&#xff08;MultiIndex&#xff09;键使用连接&#xff08;Join&#xff09;方式拼接append 方法Pandas …

2025年5月架构设计师综合知识真题回顾,附参考答案、解析及所涉知识点(七)

本文主要回顾2025年上半年(2025-5-24)系统架构设计师考试上午综合知识科目的选择题,同时附带参考答案、解析和所涉知识点。 2025年5月架构设计师综合知识真题回顾,附参考答案、解析及所涉知识点(一) 2025年5月架构设计师综合知识真题回顾,附参考答案、解析及所涉知识点(…

面向RF设计人员的微带贴片天线计算器

微带贴片天线和阵列可能是仅次于单极天线和偶极天线的最简单的天线设计。这些天线也很容易集成到PCB中&#xff0c;因此通常用于5G天线阵列和雷达等高级系统。这些天线阵列在基谐模式和高阶模式下也遵循一组简单的设计方程&#xff0c;因此您甚至可以在不使用仿真工具的情况下设…

明基RD280U编程显示器深度测评:码农的「第二块键盘」竟然会发光?

文章目录前言一、开箱篇&#xff1a;当理工男遇到「俄罗斯套娃式包装」二、外观篇&#xff1a;深空灰的「代码容器」1. 桌面变形记2. 保护肩颈的人体工学设计三、显示篇&#xff1a;给代码做「光子嫩肤」1. 28寸超大大屏 3:2屏比 4K超清2.专业编程模式&#xff0c;让代码一目…

算法114. 二叉树展开为链表

题目&#xff1a;给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺序相同。…

智慧能源管理系统:点亮山东零碳园区的绿色引擎

一、概述在全球积极践行“双碳”目标的时代浪潮下&#xff0c;山东作为经济大省&#xff0c;正全力推动产业的绿色变革&#xff0c;零碳园区建设成为其中的关键一环。《山东省零碳园区建设方案》明确规划&#xff0c;到2027年建成15个左右省级零碳园区 &#xff0c;到2030年进一…

分布式日志分析平台(ELFK 与 EFK)理论

一、日志分析平台核心概念在分布式系统中&#xff0c;日志是系统运行状态监控、问题排查和业务分析的重要依据。随着系统规模扩大&#xff0c;单机日志管理方式已无法满足需求&#xff0c;分布式日志分析平台应运而生。其核心目标是实现日志的集中收集、统一处理、高效存储和可…

CoreShop微信小程序商城框架开启多租户-添加一个WPF客户端以便进行本地操作--读取店铺信息(6)

本节内容&#xff0c;使用登录的token进行店铺信息读取&#xff0c;顺利的话&#xff0c;进行EXCEL上传测试。 1。在后台编写 读取店铺信息代码 1.1 查看原来铺店信息在什么位置&#xff0c;店铺的表格为CoreCmsStore#region 获取列表// POST: Api/CoreCmsStore/GetPageList///…

UE5关卡蓝图能不能保存副本呀?

提问 关卡蓝图能不能保存副本呀&#xff1f; 回答 在 UE 里&#xff0c;“关卡蓝图&#xff08;Level Blueprint&#xff09;”本身其实是不能直接复制/保存成独立资源的&#xff0c;因为它和具体的 **Level&#xff08;.umap 文件&#xff09;**是绑定的——相当于一个“场景脚…

机器学习数据预处理学习报告

一、学习背景与目的在机器学习流程中&#xff0c;数据预处理是保障模型训练效果的关键环节。原始数据常存在缺失值、量纲不一致、特征格式不匹配等问题&#xff0c;直接影响模型对数据规律的学习。本次学习围绕 Pandas 与 Scikit-learn&#xff08;sklearn&#xff09;工具库&a…

git旧仓库迁移到新仓库

git旧仓库迁移到新仓库 A仓库(旧仓库)&#xff1a;git172.16.21.21:xxxx_software/Ni-Handler-Mgr.git B仓库(新仓库)&#xff1a;git172.16.11.11:yyyy/hostpc/ni-handler-mgr.git Step1 新建新仓库 创建新 GitHub 仓库‌ 在 GitHub 页面点击 “New repository”&#xff0c;命…

YOLO --- YOLOv5模型以及项目详解

YOLO — YOLOv5模型以及项目详解 文章目录YOLO --- YOLOv5模型以及项目详解一&#xff0c;开源地址二&#xff0c;改进点Focus 模块三&#xff0c;网络结构3.1 CSP1_X 与 CSP2_X3.2 自适应Anchor的计算3.3 激活函数3.3.1 SiLU3.3.2 Swish3.4 Bottleneck3.5 C33.5.1 BottleneckC…

Linux文本三剑客的使用及常见重点操作

文本三剑客指 Linux环境下的 grep&#xff08;搜索&#xff09;、sed&#xff08;编辑&#xff09;、awk&#xff08;分析&#xff09;三款用于文本处理的核心命令&#xff0c;三者分工明确、功能互补&#xff0c;是处理日志、配置文件、结构化数据等场景的 “刚需工具”。一、…

​​《开源字幕神器VideoCaptioner实战:基于Whisper+LLM的全链路方案,免费平替剪映会员》​​

&#x1f4cc; 大家好&#xff0c;我是智界工具库&#xff0c;每天分享好用实用且智能的开源项目&#xff0c;以及在JAVA语言开发中遇到的问题&#xff0c;如果本篇文章对您有所帮助&#xff0c;请帮我点个小赞小收藏小关注吧&#xff0c;谢谢喲&#xff01;&#x1f618; 博主…