RNN、LSTM、Seq2Seq模型以及Atttention机制

1、生成类聊天机器人特点

在这里插入图片描述

2、RNN LSTM语言模型

2.1 语言模型

自然语言处理 (NLP)领域的一个核心技术,它的主要任务是对自然语言序列进行概率建模。 简单来说,语言模型就是用来计算一个句子或者一段文本在某种语言中出现的概率。 这个概率可以帮助我们理解和预测自然语言的生成规律,从而在各种NLP任务中发挥关键作用,如机器翻译、语音识别、文本生成等。
在这里插入图片描述

2.2语言模型的计算

在这里插入图片描述

2.3语言模型的应用

  • 语音识别
  • 机器翻译
  • 句法分析
  • 短语标注
  • 手写体识别
  • 拼写纠错

2.4语言模型的方法

  • 基于统计学习的(N——gram)
  • 基于机器学习和深度学习的(机器学习:svm等,深度学习:RNN,LSTM等)
    在这里插入图片描述
    在这里插入图片描述
    RNN存在的问题:
  • 梯度消息
  • 梯度爆炸
    在这里插入图片描述
    RNN处理序列的类型根据输入和输出的数量,有四种类型。绿色是输入,蓝色是输出,灰色是隐藏层,可捕捉序列前后的信息;并不是每一步都需要输入或者输出,但是隐藏层是不可少的。

同步序列中,Many to many 多对多,输入和输出的数量相同,可用在词性标注,输入一个句子,输出句中每个词的词性;Many to one 多对一,文本的情感分析,输入一句话,输出这句话表达的情绪是积极还是消极。

非同步序列中,Many to many 多对多,可被用作机器翻译,即输入一种语言的文字,输出另外一种语言的文字;One to many,一对多,输入一张图片,输出对于图片内容的描述。
在这里插入图片描述
双向RNN考虑上下文。

3、LSTM

LSTM(长短时记忆)可以缓解梯度消失和梯度爆炸的问题

### RNNLSTM、GRU与Seq2Seq模型的关系 #### RNN基础架构及其局限性 循环神经网络(Recurrent Neural Network, RNN)是一种用于处理序列数据的神经网络结构。其核心特点是能够利用先前时刻的信息来影响当前时刻的输出,这使得RNN非常适合处理具有时间顺序特征的数据集,比如自然语言文本或语音信号[^1]。 然而,在实际应用中发现标准形式下的RNN存在一些缺陷,尤其是在面对长时间跨度的任务时表现不佳——即所谓的“长程依赖问题”。当试图捕捉远距离位置间元素间的关联性时,由于反向传播过程中梯度消失现象的影响,传统RNN难以有效传递早期信息到后期节点上[^2]。 #### 解决方案:LSTM和GRU 为了克服上述挑战,研究者们提出了两种改进版本—长短记忆单元(Long Short-Term Memory unit,LSTM) 和门控循环单元(Gated Recurrent Unit, GRU)。这两种变体通过引入特殊的内部机制(如遗忘门、输入/更新门等),可以在一定程度上缓解甚至解决长期依赖带来的难题: - **LSTM**增加了三个主要组件:输入门控制新信息进入细胞状态;遗忘门决定哪些旧有信息应该被丢弃;输出门则负责筛选最终对外部世界可见的部分。 - **GRU**简化了这一设计思路,将输入门和重置门合二为一,并取消了单独存在的细胞状态概念,从而减少了参数数量并提高了计算效率。 这些变化不仅增强了模型的记忆能力,而且也改善了训练稳定性及收敛速度。 #### 序列到序列框架(Seq2Seq) 随着深度学习技术的发展,人们意识到单个方向上的简单线性连接不足以满足复杂任务需求,特别是涉及到两个不同长度序列之间映射的情况,例如机器翻译或多轮对话系统。因此出现了Sequence-to-sequence (简称Seq2Seq) 架构,它由编码器(encoder)-解码器(decoder)两部分组成,前者负责接收源端输入并将之转化为固定大小表示;后者基于此表征生成目标端输出。 在这个过程中,通常会采用双向RNN/Bi-LSTM作为构建模块之一,因为这样可以从正序和逆序两个角度获取上下文线索,进而提升整体性能。此外,Attention机制也被广泛应用于此类场景当中,允许模型动态关注重要片段而非平均对待整个句子范围内的每一个词项[^3]。 综上所述,虽然RNN家族成员各自具备独特优势,但在现代NLP实践中更多时候是以组合方式出现,共同服务于更加复杂的语义理解和表达任务之中。 ```python import torch.nn as nn class SimpleRNN(nn.Module): def __init__(self, input_size, hidden_size, num_layers=1): super(SimpleRNN, self).__init__() self.rnn = nn.RNN(input_size=input_size, hidden_size=hidden_size, num_layers=num_layers) def forward(self, x): out, _ = self.rnn(x) return out class LSTMModel(nn.Module): def __init__(self, input_dim, hidden_dim, layer_dim, output_dim): super(LSTMModel, self).__init__() self.hidden_dim = hidden_dim self.layer_dim = layer_dim self.lstm = nn.LSTM(input_dim, hidden_dim, layer_dim, batch_first=True) def forward(self, x): h0 = torch.zeros(self.layer_dim, x.size(0), self.hidden_dim).requires_grad_() c0 = torch.zeros(self.layer_dim, x.size(0), self.hidden_dim).requires_grad_() out, (hn, cn) = self.lstm(x, (h0.detach(), c0.detach())) return out # Note: For simplicity only basic implementations are shown here. ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值