Skip to content

Latest commit

 

History

History
161 lines (114 loc) · 4.9 KB

File metadata and controls

161 lines (114 loc) · 4.9 KB

2025FudanBuqing · NLP项目实践

本项目为“2025复旦步青计划”中关于循环神经网络(RNN)和LSTM应用的实训项目,分为三个子模块,分别展示了 Simple RNNLSTM 在情感分析与字符生成任务中的不同实践。


📁 文件夹结构概览

.
├── 1.simple-RNN-sentiment
│   └── 使用Simple RNN进行影评情感分析
├── 2.sentiment-analysis-IMDB-Review-using-LSTM
│   └── 使用LSTM进行IMDB影评情感分析
└── 3.name-generation-LSTM
    └── 使用LSTM进行美国人名生成
└── 4.seq2seq-translation
    └── 使用Seq2Seq进行机器翻译
└── README.md
└── requirements.txt

📦 模块一:Simple RNN 影评情感分析

🎯 任务描述

使用 Simple RNN 模型对影评数据进行训练与预测,判断评论为“正面”或“负面”。

🛠️ 特点

  • 模型结构简单,训练速度快
  • 能力有限,难以处理长依赖序列
  • 适合作为序列建模入门练习

📦 模块二:LSTM 影评情感分析

🎯 任务描述

使用 LSTM 模型对 IMDB 影评数据集 进行情感分类。

📚 所需依赖

位于 requirements.txt 中,包括:

pandas
numpy
nltk
scikit-learn
tensorflow

🚀 实现步骤

  1. 加载数据:读取 IMDB 数据集(50K 条影评)。
  2. 数据清洗:去除 HTML、标点符号、停用词。
  3. 标签编码:将情感标记为 0(负面)或 1(正面)。
  4. 数据划分:拆分为训练集和测试集。
  5. 分词与序列处理:Tokenizer + pad_sequences。
  6. 构建模型
    model = Sequential()
    model.add(Embedding(input_dim=total_words, output_dim=32, input_length=130))
    model.add(LSTM(64))
    model.add(Dense(1, activation='sigmoid'))
    model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
  7. 训练评估:使用 model.fit() 训练并评估准确率。

✅ 效果说明

相比 Simple RNN,LSTM 显著提高了情感分类的准确率,能够更有效捕捉句子中的长期依赖关系。


📦 模块三:LSTM 美国人名生成

🎯 任务描述

构建一个基于字符级语言模型的 LSTM 模型,生成符合美式命名规律的英文名。

📋 训练流程

  1. 数据加载

    • 从 CSV 文件中读取英文名字
    • 全部转换为小写,构建字符字典
  2. 训练样本构建

    • 将每个名字拆分为字符序列
    • 构建输入张量 X(字符序列)与标签 y(下一个字符)
  3. 模型训练

    • 使用 PyTorch 的 nn.LSTM 构建模型
    • 优化器:Adam(学习率=0.005)
    • 损失函数:CrossEntropyLoss
    • Batch size = 512,Epoch = 20
    • 每轮保存最优模型,并绘制 loss 曲线

📦 模块四:Seq2Seq 翻译模型

🎯 任务描述

使用Seq2Seq模型架构实现简单的翻译任务,展示编码器-解码器结构在序列转换任务中的应用。

🛠️ 技术特点

  • 采用编码器-解码器架构
  • 使用注意力机制提升长序列处理能力
  • 支持可变长度输入输出
  • 适用于机器翻译、文本摘要等任务

📋 实现流程

  1. 数据准备:加载平行语料库,进行分词和序列化处理

  2. 构建模型

    # 编码器
    encoder = Sequential()
    encoder.add(Embedding(input_dim=vocab_size, output_dim=256))
    encoder.add(LSTM(256, return_state=True))
    
    # 解码器
    decoder = Sequential()
    decoder.add(Embedding(input_dim=target_vocab_size, output_dim=256))
    decoder.add(LSTM(256, return_sequences=True))
    decoder.add(Dense(target_vocab_size, activation='softmax'))
  3. 训练配置 :

  • 损失函数:稀疏分类交叉熵
  • 优化器:Adam
  • 评估指标:准确率
  1. 推理实现 :使用beam search生成翻译结果

📓 教学用 Jupyter Notebook

该模块提供完整的 Notebook 文件,用于演示字符生成模型的训练过程,适合教学展示。


🔍 模型对比分析

模型 训练速度 精度表现 长期依赖处理能力
Simple RNN 较快 中等
LSTM 较慢

LSTM 在实际表现上优于 Simple RNN,尤其是在需要理解句子上下文含义的自然语言任务中更为有效。


📌 项目说明

本项目为 2025 年复旦大学“步青计划”项目课程作品,旨在通过实践教学加深对 RNN 及 LSTM 网络的理解与应用,覆盖从文本分类到语言生成的典型任务场景。

欢迎同行使用、参考或提出建议!


如需 Jupyter Notebook 版本或模型权重文件,请查看对应文件夹内的 .ipynb 文件及 checkpoints/ 文件夹。