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

【自然语言处理(NLP)】循环神经网络RNN

文章目录

  • 介绍
  • 循环神经网络(Recurrent Neural Network,RNN)
    • 结构原理
    • 特点
    • 存在的问题
    • 改进模型
    • 应用场景
    • 困惑度(Perplexity)
    • 损失函数

个人主页:道友老李
欢迎加入社区:道友老李的学习社区

介绍

**自然语言处理(Natural Language Processing,NLP)**是计算机科学领域与人工智能领域中的一个重要方向。它研究的是人类(自然)语言与计算机之间的交互。NLP的目标是让计算机能够理解、解析、生成人类语言,并且能够以有意义的方式回应和操作这些信息。

NLP的任务可以分为多个层次,包括但不限于:

  1. 词法分析:将文本分解成单词或标记(token),并识别它们的词性(如名词、动词等)。
  2. 句法分析:分析句子结构,理解句子中词语的关系,比如主语、谓语、宾语等。
  3. 语义分析:试图理解句子的实际含义,超越字面意义,捕捉隐含的信息。
  4. 语用分析:考虑上下文和对话背景,理解话语在特定情境下的使用目的。
  5. 情感分析:检测文本中表达的情感倾向,例如正面、负面或中立。
  6. 机器翻译:将一种自然语言转换为另一种自然语言。
  7. 问答系统:构建可以回答用户问题的系统。
  8. 文本摘要:从大量文本中提取关键信息,生成简短的摘要。
  9. 命名实体识别(NER):识别文本中提到的特定实体,如人名、地名、组织名等。
  10. 语音识别:将人类的语音转换为计算机可读的文字格式。

NLP技术的发展依赖于算法的进步、计算能力的提升以及大规模标注数据集的可用性。近年来,深度学习方法,特别是基于神经网络的语言模型,如BERT、GPT系列等,在许多NLP任务上取得了显著的成功。随着技术的进步,NLP正在被应用到越来越多的领域,包括客户服务、智能搜索、内容推荐、医疗健康等。

循环神经网络(Recurrent Neural Network,RNN)

循环神经网络(Recurrent Neural Network,RNN)是一类特殊的人工神经网络,它适合处理序列数据,在自然语言处理、语音识别等领域应用广泛。下面从结构原理、特点、存在的问题及应用场景等方面详细介绍。

结构原理

传统的神经网络(如多层感知机)输入和输出是相互独立的,但序列数据(如文本、时间序列)存在前后依赖关系。RNN的核心特点是在网络结构中引入循环,允许信息在不同时间步之间传递

在一个简单的RNN中,每个时间步的隐藏状态 h t h_t ht不仅取决于当前输入 x t x_t xt,还取决于上一个时间步的隐藏状态 h t − 1 h_{t - 1} ht1。其计算公式如下:

  • h t = tanh ⁡ ( W h h h t − 1 + W x h x t + b h ) h_t = \tanh(W_{hh}h_{t - 1} + W_{xh}x_t + b_h) ht=tanh(Whhht1+Wxhxt+bh)
  • y t = W h y h t + b y y_t = W_{hy}h_t + b_y yt=Whyht+by

其中, W h h W_{hh} Whh 是隐藏状态到隐藏状态的权重矩阵, W x h W_{xh} Wxh 是输入到隐藏状态的权重矩阵, W h y W_{hy} Why 是隐藏状态到输出的权重矩阵, b h b_h bh b y b_y by 分别是隐藏层和输出层的偏置项, tanh ⁡ \tanh tanh 是激活函数。

概率计算和序列数据中的条件概率相关概念,主要用于近似表达序列中元素的条件概率关系。
在这里插入图片描述

符号含义

  • P ( x t ∣ x t − 1 , … , x t − n + 1 ) P(x_t \mid x_{t - 1}, \ldots, x_{t - n + 1}) P(xtxt1,,xtn+1):表示在已知过去 n − 1 n - 1 n1个时刻的元素 x t − 1 , … , x t − n + 1 x_{t - 1}, \ldots, x_{t - n + 1} xt1,,xtn+1的条件下,时刻 t t t的元素 x t x_t xt出现的条件概率。这是一个基于历史信息的概率估计。
  • P ( x t ∣ x t − 1 , … , x 1 ) P(x_t \mid x_{t - 1}, \ldots, x_1) P(xtxt1,,x1):表示在已知从时刻 1 1 1到时刻 t − 1 t - 1 t1所有历史元素的条件下,时刻 t t t的元素 x t x_t xt出现的条件概率。它涵盖了更长的历史信息来计算条件概率。
  • P ( x t ∣ h t − 1 ) P(x_t \mid h_{t - 1}) P(xtht1):表示在已知时刻 t − 1 t - 1 t1的隐藏状态 h t − 1 h_{t - 1} ht1的条件下,时刻 t t t的元素 x t x_t xt出现的条件概率。这里的隐藏状态 h t − 1 h_{t - 1} ht1是对过去信息的一种抽象表示,通常在循环神经网络(RNN)等模型中使用,它包含了之前时间步的相关信息。

公式含义

公式 P ( x t ∣ x t − 1 , … , x t − n + 1 ) ≈ P ( x t ∣ x t − 1 , … , x 1 ) ≈ P ( x t ∣ h t − 1 ) P(x_t \mid x_{t - 1}, \ldots, x_{t - n + 1}) \approx P(x_t \mid x_{t - 1}, \ldots, x_1) \approx P(x_t \mid h_{t - 1}) P(xtxt1,,xtn+1)P(xtxt1,,x1)P(xtht1)表达了一种近似关系:

  • 左边第一个近似:用相对较短历史窗口(长度为 n − 1 n - 1 n1)的条件概率 P ( x t ∣ x t − 1 , … , x t − n + 1 ) P(x_t \mid x_{t - 1}, \ldots, x_{t - n + 1}) P(xtxt1,,xtn+1)来近似基于更长历史(从时刻 1 1 1到时刻 t − 1 t - 1 t1)的条件概率 P ( x t ∣ x t − 1 , … , x 1 ) P(x_t \mid x_{t - 1}, \ldots, x_1) P(xtxt1,,x1) 。这在实际应用中很有用,因为当历史序列很长时,计算基于全部历史的条件概率可能会非常复杂,所以可以通过选取一个较短的历史窗口来近似计算。
  • 第二个近似:用基于隐藏状态的条件概率 P ( x t ∣ h t − 1 ) P(x_t \mid h_{t - 1}) P(xtht1)来近似基于历史元素的条件概率 P ( x t ∣ x t − 1 , … , x 1 ) P(x_t \mid x_{t - 1}, \ldots, x_1) P(xtxt1,,x1) 。在循环神经网络等模型中,隐藏状态 h t − 1 h_{t - 1} ht1是对过去信息的一种压缩和抽象,它以一种更简洁的方式包含了之前时间步的相关信息,所以可以用 P ( x t ∣ h t − 1 ) P(x_t \mid h_{t - 1}) P(xtht1)来近似基于全部历史元素的条件概率,从而简化计算和模型处理。
  1. 无隐藏状态的神经网络
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  2. 有隐藏状态的循环神经网络
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
3. 基于循环神经网络的字符级语言模型
在这里插入图片描述

特点

  • 记忆能力:RNN 能够记住之前时间步的信息,这使得它可以处理具有时间顺序的序列数据。
  • 参数共享:在不同时间步使用相同的权重矩阵(如 W h h W_{hh} Whh W x h W_{xh} Wxh W h y W_{hy} Why),减少了模型的参数数量,降低了计算复杂度。
  • 灵活性:可以处理任意长度的输入序列。

存在的问题

  • 梯度消失或梯度爆炸:在反向传播过程中,由于梯度在时间步上的连乘操作,会导致梯度随着时间步的增加而变得非常小(梯度消失)或非常大(梯度爆炸),使得模型难以学习到长期依赖关系。
  • 长期依赖问题:由于梯度消失问题,RNN 很难捕捉到序列中相隔较远的元素之间的依赖关系。

改进模型

为了解决RNN存在的问题,研究者们提出了一些改进的循环神经网络结构,如:

  • 长短期记忆网络(LSTM):引入了门控机制(输入门、遗忘门和输出门),可以有效地控制信息的流入、流出和遗忘,从而缓解梯度消失问题,更好地处理长期依赖关系。
  • 门控循环单元(GRU):是LSTM的一种简化变体,它合并了遗忘门和输入门,形成了更新门,并引入了重置门,在减少计算复杂度的同时,也能较好地处理长期依赖问题。

应用场景

  • 自然语言处理:如机器翻译、文本生成、情感分析等。
  • 语音识别:处理语音信号的序列特征,将语音转换为文本。
  • 时间序列预测:如股票价格预测、天气预测等。

困惑度(Perplexity)

  • 我是个好人
  • 我是个好人物
  • 我是个好人类人啊
    在这里插入图片描述

损失函数

RNN网络预测的结果是通过softmax计算概率最高的词做为预算结果, 本质上还是分类, 所以RNN网络的损失函数就是交叉熵损失


http://www.kler.cn/a/518779.html

相关文章:

  • 《CPython Internals》阅读笔记:p360-p377
  • 跟我学C++中级篇——容器的连接
  • opengrok_使用技巧
  • appium自动化环境搭建
  • vscode环境中用仓颉语言开发时调出覆盖率的方法
  • Pyecharts之地图图表的强大功能
  • 【unity游戏开发之InputSystem——06】PlayerInputManager组件实现本地多屏的游戏(基于unity6开发介绍)
  • 【Flask】在Flask应用中使用Flask-Limiter进行简单CC攻击防御
  • 钉钉群机器人设置——python版本
  • Android AOP:aspectjx
  • 二叉树的最小深度力扣--111
  • 嵌入式MCU面试笔记2
  • HBase的原理
  • c#使用Confluent.Kafka实现生产者发送消息至kafka(远程连接kafka发送消息超时的解决 Local:Message timed out)
  • 9.像素概念
  • 利用机器学习创建基于位置的推荐程序
  • 自定义数据集 使用tensorflow框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测
  • 【Linux】命令为桥,存在为岸,穿越虚拟世界的哲学之道
  • adc和dma的使用原理和过程
  • L9305驱动组件接口TESSY测试
  • OpenFGA
  • 小识JVM堆内存管理的优化机制TLAB
  • 基于模糊PID的孵化箱温度控制系统(论文+源码)
  • vue3 vue2区别
  • C#常考随笔1:const和readonly有什么区别?
  • [笔记] 极狐GitLab实例 : 手动备份步骤总结