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

【NLP】 12. 解决不同长度文本问题,RNN, LSTM,双重RNN,双向递归神经网络

RNN Recurrent Models

如何解决不同长度文本向量的问题?(长文本)

  • 取均值,但是容易淡化文本的独特性,比如一正一负的均值就变成了0. 有些情况取均值毫无意义,我出门玩,几个词的均值意义模糊。我爱你,你爱我,均值一样但是含义不一样。
  • 合并所有向量,但是是固定的一段长向量(N-dimension),如果只有一个词,则需要填充padding其他地方为0,如果是很多个词,则只能放弃后面的词,进行截断(Truncate)。会丢失信息。并且不同位置的词需要重新学习它的含义(代入了位置信息)。

RNN

为了解决这个问题,提出了RNN的概念 RNN-LSTM概述 <-跳转之前的博客。基于之前的概述,下面做一些补充。

在这里插入图片描述

python - Why is RNN no weigth between hidden and output? - Stack Overflow](https://i.sstatic.net/PcaGd.png)

  • h0 的初始化可以是全为0的矩阵,也可以是认为给定的权重矩阵

  • Wh 时间步长之间的权重是共享的,所以更新的时候会一起更新。 Wx(负责将输入
    xt转换为隐藏状态的表示),Wy(负责将隐藏状态 ht映射到输出层(例如分类任务的 logits) 不共享

  • RNN 有多种形式的输出, 也可以直接多任务,预测每个词的词性,预测情感,有多少个输出就会更新多少次权重
    在这里插入图片描述

The Unreasonable Effectiveness of Recurrent Neural Networks](https://karpathy.github.io/assets/rnn/diags.jpeg)

  • 存在的问题:
      1. 梯度爆炸Exploding gradients
        如果有一个非常陡的梯度,权重更新会跳到很远的地方,甚至溢出存储

    解决方法: clipping the gradient.梯度裁剪,使用min(gradient, k)进行限制。

      1. 梯度消失,gradient vanish
        RNN 通过 反向传播算法(Backpropagation Through Time, BPTT) 来更新权重,其中隐藏状态的梯度是 多个时间步的乘积。如果每一步的梯度小于 1,就会指数级衰减,最终变得接近 0。

    解决方法:不衰减的方法保存信息,使用LSTM

  • 通过RNN 隐藏层可视化可以得到结论:颜色渐变说明 RNN 的隐藏状态随着时间步的变化而改变,有些单词在序列中起到了更重要的作用。【Andrej Karpathy 的论文《The Unreasonable Effectiveness of Recurrent Neural Networks》(2015)】

RNN 变型

1. 双重RNN,输出当作另一个RNN的输入

在这里插入图片描述

Recurrent Neural Network (RNN) and LSTM | Data Platform and Data Science](https://dwbi1.wordpress.com/wp-content/uploads/2021/08/fig-2-rnn-architecture.jpg?w=422)

2. 双向递归神经网络(Bidirectional RNN, BiRNN)

Forward-Backward RNN(前向-后向 RNN)是一种 双向递归神经网络(Bidirectional RNN, BiRNN) 的结构,它通过 同时考虑前后时间步的信息 来提升对序列数据的理解能力,特别适用于 自然语言处理(NLP)语音识别(Speech Recognition) 等任务。

在这里插入图片描述

Bidirectional Recurrent Neural Network - GeeksforGeeks](https://media.geeksforgeeks.org/wp-content/uploads/20230302163012/Bidirectional-Recurrent-Neural-Network-2.png)

1. 为什么需要 Forward-Backward RNN?

普通的 单向 RNN 只能利用过去的信息,而无法考虑未来的信息。例如:

  • 语言建模中,单向 RNN 只能基于前面的单词预测下一个单词,而不能考虑后续的单词。
  • 语音识别中,单向 RNN 只能基于当前和之前的音素,而不能利用后续音素的信息。

解决方案:

  • 双向 RNN(BiRNN) 通过前向(Forward)和后向(Backward)两个方向的 RNN 结构,同时处理序列数据,并结合两个方向的信息,使得网络可以在当前时间步同时利用过去和未来的上下文信息

2. Forward-Backward RNN 的结构

BiRNN 由 两个独立的 RNN 组成

  1. Forward RNN(前向 RNN): 负责从 左到右 处理输入序列。
  2. Backward RNN(后向 RNN): 负责从 右到左 处理输入序列。
  3. 最终隐藏状态 由前向和后向 RNN 的隐藏状态拼接(concatenate)或加权合并而成。

相关文章:

  • 【css酷炫效果】纯CSS实现立体纸张折叠动效
  • 《AI大模型趣味实战》 No3:快速搭建一个漂亮的AI家庭网站-相册/时间线/日历/多用户/个性化配色/博客/聊天室/AI管家(下)
  • Redis 持久化机制:AOF 与 RDB 详解
  • Django 集成 Redis 数据库指南
  • Kafka跨集群数据备份与同步:MirrorMaker运用
  • C语言经典代码题
  • 启动、关闭集群
  • 算法及数据结构系列 - 二分查找
  • Uniapp 字体加载问题(文件本地存储)
  • Go语言中的错误处理与异常恢复:性能对比与实践思考
  • re题(46)BUUCTF-[WUSTCTF2020]level4
  • Spring Boot 集成高德地图电子围栏
  • Redis hyperloglog学习
  • Gymnasium学习笔记
  • C语言【常用】【字符函数 和 字符串函数】详解加模拟实现
  • 分布式文件系统Minio
  • 鸿蒙编译框架@ohos/hvigor FileUtil用法
  • 时序优化学习笔记
  • Matlab 基于专家pid控制的时滞系统
  • Vue 计算属性与 Data 属性同名问题深度解析
  • 体坛联播|欧冠半决赛阿森纳主场不敌巴黎,北京男篮险胜山西
  • 北京发布今年第四轮拟供商品住宅用地清单,共计5宗22公顷
  • 何立峰出席驻沪中央金融机构支持上海建设国际金融中心座谈会并讲话
  • 马上评丨别让“免费领养”套路坑消费者又坑宠物
  • 外交部亚洲司司长刘劲松向菲方严肃交涉
  • “麒麟王”亮相上海彩市,体彩即开票“瑞兽家族”迎来新成员