深度学习-RNN循环神经网络
一、自然语言处理(NLP)概述
-
定义:让计算机理解、生成人类语言。
-
核心任务:语言理解、语言生成。
-
基本概念:
-
语料(Corpus):文本数据集合。
-
词表(Vocabulary):所有不重复的词组成的列表。
-
词向量(Word Embedding):词的数值化表示。
-
Token:分词后的最小单位。
-
时间步(Time Step):每个词输入模型的时刻。
-
二、词嵌入层(Word Embedding)
-
作用:将离散的词转换为连续的稠密向量。
-
优势:
-
捕捉语义相似性
-
降低维度(相比One-Hot)
-
-
PyTorch实现:
nn.Embedding(num_embeddings, embedding_dim) -
使用步骤:
-
分词(如使用
jieba) -
构建词表(词 → 索引)
-
将词索引转换为词向量
-
三、循环神经网络(RNN)
-
为什么需要RNN:处理序列数据(如文本、时间序列),捕捉前后依赖关系。
-
应用场景:
-
文本生成
-
机器翻译
-
情感分析
-
文本摘要
-
-
RNN结构:
-
每个时间步接收当前输入和上一隐藏状态
-
输出当前隐藏状态和预测结果
-
-
数学表达:
ht=tanh(Wihxt+bih+Whhht−1+bhh)
-
PyTorch API:
nn.RNN(input_size, hidden_size, num_layers)-
输入:
(seq_len, batch_size, input_size) -
隐藏状态:
(num_layers, batch_size, hidden_size)
-
四、文本生成实战:周杰伦歌词生成
1. 数据预处理
-
读取歌词文件
-
使用
jieba分词 -
构建词表(
word_to_index,index_to_word)
2. 构建数据集(Dataset)
-
将文本转为索引序列
-
按固定长度切分样本
-
每个样本的标签是下一个词
3. 构建模型
class TextGenerator(nn.Module):
def __init__(self, vocab_size):
super().__init__()
self.embed = nn.Embedding(vocab_size, 128)
self.rnn = nn.RNN(128, 256, 1)
self.fc = nn.Linear(256, vocab_size)
4. 训练过程
-
损失函数:
CrossEntropyLoss -
优化器:
Adam -
训练循环:遍历DataLoader,计算损失,反向传播
5. 预测生成
-
输入起始词,逐步预测下一个词
-
将预测词作为下一个输入,循环生成文本
五、核心代码片段摘要
-
构建词表:
build_vocab() -
自定义数据集:
LyricsDataset -
模型定义:
TextGenerator -
训练循环:
train() -
文本生成:
predict(start_word, length)
XMind 思维导图(内容结构)
深度学习基础-RNN
├── 一、NLP概述
│ ├── 定义与目标
│ ├── 基本术语:语料、词表、Token、时间步
│ └── 数据特点:序列性、非结构化
├── 二、词嵌入层
│ ├── 作用:词→向量,语义表示
│ ├── PyTorch实现:nn.Embedding
│ └── 使用流程:分词→建表→转换
├── 三、循环神经网络(RNN)
│ ├── 为什么需要RNN:序列依赖
│ ├── 应用场景:生成、翻译、情感分析等
│ ├── 网络结构:隐藏状态传递
│ ├── 数学公式
│ └── PyTorch API:nn.RNN
├── 四、文本生成案例
│ ├── 数据预处理:分词、建词表
│ ├── 数据集构建:LyricsDataset
│ ├── 模型结构:Embedding + RNN + Linear
│ ├── 训练过程:损失函数、优化器、循环
│ └── 预测生成:逐步生成文本
└── 五、总结
├── RNN适合处理序列数据
├── 词嵌入是NLP基础表示方法
└── 文本生成是典型生成式任务
更多推荐


所有评论(0)