当前位置: 首页 > news >正文

郑州平台类网站关于网页设计

郑州平台类网站,关于网页设计,个人网站不能放广告怎么赚钱,网站横幅背景图循环神经网络实战:GRU 对比 LSTM 的中文情感分析(三) 文章目录循环神经网络实战:GRU 对比 LSTM 的中文情感分析(三)前言数据准备(与 LSTM 相同)模型搭建(GRU)…

循环神经网络实战: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.dtcms.com/a/416242.html

相关文章:

  • 西安响应式网站深圳市注册公司流程图
  • 常州网站建设企业网上怎么做网站
  • 如何建立淘宝客网站wordpress改了固定链接
  • 宠物社区网站开发设计文档企业网站开发 流程
  • Docker镜像与容器:轻松理解与实战
  • 统计局网站建设如果在各大网站做免费的网络推广
  • 网站大全免黄手机网站怎么建设
  • 如何构建网站新手如何搭建网站
  • c++ 之 基类与派生类的转换
  • 一次跨界学习的探索:用流水线的方式攻克行业知识的尝试
  • 免费建立属于自己的网站做网站成都哪家公司最好
  • 网页设计制作网站开发建设新手建站基础入门到精通视频教程李光辉:营销型企业网站建设的指导思想是什么?
  • 二手表网站wordpress4.8漏洞
  • 电脑防护一键关闭工具V1.0
  • 手机网站开发流程网页传奇私
  • 【贪心 树状数组】P9310 [EGOI 2021] Luna likes Love / 卢娜爱磕 cp|普及+
  • 百度一下官方网站wordpress第三方订阅地址
  • Windows 已占 VT-x 的终极排查与根治手册
  • leetcode解题思路分析(一百六十七)1445 - 1451 题
  • 网站建设中的端口wordpress增加友情链接
  • Python实现SQL语句自动转换工具(UPDATE到INSERT)
  • 找网站建设公司好php制作网站
  • 建设银行网银官方网站通州企业网站建设
  • 《Python中的适配器模式实战:让第三方库优雅融入你的系统》
  • 深圳私人做网站做venn图的网站
  • 网站搭建设计 是什么中国建设银行网站首页旧版
  • 做网站vpn多大内存网站策划资料方案
  • 注册网站域名平台南通外贸建站
  • 打工人日报#20250927
  • 做网站的系统功能需求贵阳网站优化