【NLP入门教程】二十三、循环神经网络(RNN)| 小白专场

news2024/11/18 21:48:51

本教程旨在为初学者提供一份全面而系统的NLP入门指南,探索NLP的核心概念、方法和技术。无论你是计算机科学的新手,还是对自然语言处理领域感兴趣的研究人员,本教程都将为你提供所需的基础知识和实用技能。

  • 专栏地址:📕【NLP入门教程

当谈到自然语言处理(NLP)时,深度学习已经成为一种强大而广泛应用的技术。深度学习是一种机器学习方法,通过构建具有多层神经网络的模型来模拟和学习数据的复杂特征。在NLP领域,深度学习模型已经在多个任务上取得了突破性的性能,如文本分类、情感分析、机器翻译等。


🚀🚀🚀往期精彩文章:

  • 【NLP入门教程】一、字符编码和Unicode
  • 【NLP入门教程】二、分词
  • 【NLP入门教程】三、词性标注
  • 【NLP入门教程】四、句法分析
  • 【NLP入门教程】五、命名实体识别
  • 【NLP入门教程】六、关系抽取
  • 【NLP入门教程】七、词义消歧
  • 【NLP入门教程】八、数据清洗
  • 【NLP入门教程】九、停用词移除
  • 【NLP入门教程】十、词干提取和词形还原
  • 【NLP入门教程】十一、词袋模型与TF-IDF
  • 【NLP入门教程】十二、词向量简介
  • 【NLP入门教程】十三、Word2Vec保姆教程
  • 【NLP入门教程】十四、GloVe词向量模型
  • 【NLP入门教程】十五、FastText保姆教程
  • 【NLP入门教程】十六、使用预训练词嵌入
  • 【NLP入门教程】十七、朴素贝叶斯分类器
  • 【NLP入门教程】十八、支持向量机(Support Vector Machines)
  • 【NLP入门教程】十九、隐马尔科夫模型(Hidden Markov Models)
  • 【NLP入门教程】二十、条件随机场(Conditional Random Fields)
  • 【NLP入门教程】二十一、主题模型(LDA)
  • 【NLP入门教程】二十二、深度学习与NLP简介

循环神经网络(RNN)

循环神经网络(Recurrent Neural Networks,简称RNN)是一类特殊的神经网络,用于处理序列数据。与传统的前馈神经网络不同,RNN 在处理序列数据时引入了循环结构,使得网络可以保持一种记忆能力,能够更好地处理时序信息。RNN 在自然语言处理(NLP)、语音识别、时间序列预测等任务中取得了显著的成功。在本节中,我们将深入探讨RNN的原理、数学表达以及其在NLP中的应用。

1. RNN基本原理


RNN的核心思想是将当前时刻的输入和上一时刻的隐状态(hidden state)结合起来来进行计算。这种结构允许网络在处理序列数据时对先前的信息进行编码,从而具备处理时序信息的能力。在每个时间步上,RNN的计算可以表示如下:

h t = activation ( W h h ⋅ h t − 1 + W x h ⋅ x t + b h ) h_t = \text{activation}(W_{hh} \cdot h_{t-1} + W_{xh} \cdot x_t + b_h) ht=activation(Whhht1+Wxhxt+bh)

其中, h t h_t ht 是当前时刻的隐状态, h t − 1 h_{t-1} ht1 是上一时刻的隐状态, x t x_t xt 是当前时刻的输入, W h h W_{hh} Whh W x h W_{xh} Wxh b h b_h bh 是可学习的参数, activation \text{activation} activation 是激活函数。

2. BPTT:RNN的反向传播


为了训练RNN,我们需要定义损失函数并通过反向传播算法来更新网络的参数。在RNN中,我们使用一种称为Backpropagation Through Time(BPTT)的算法来完成反向传播。BPTT的过程与传统的反向传播类似,但由于RNN的循环结构,需要在时间维度上展开计算梯度。

BPTT的数学表达式如下:

∂ L ∂ W h h = ∑ t = 1 T ∂ L t ∂ W h h \frac{\partial L}{\partial W_{hh}} = \sum_{t=1}^{T} \frac{\partial L_t}{\partial W_{hh}} WhhL=t=1TWhhLt

∂ L ∂ W x h = ∑ t = 1 T ∂ L t ∂ W x h \frac{\partial L}{\partial W_{xh}} = \sum_{t=1}^{T} \frac{\partial L_t}{\partial W_{xh}} WxhL=t=1TWxhLt

其中, L L L 是损失函数, L t L_t Lt 是在时间步 t t t 上的损失, T T T 是序列的长度。

3. 长短时记忆网络(LSTM)


尽管RNN具备一定的记忆能力,但它面临着长期依赖问题,即在处理长序列时,隐状态的信息可能在时间上逐渐消失,导致较远的输入信息无法有效传递。为了解决这个问题,我们引入了长短时记忆网络(Long Short-Term Memory,简称LSTM)。

LSTM引入了称为门控机制的组件,包括输入门(input gate)、遗忘门(forget gate)和输出门(output gate)。这些门控制着信息的流动,允许LSTM在处理长序列时更好地保留和使用先前的信息。

LSTM的数学表达式如下:

其中, i t i_t it f t f_t ft o t o_t ot 分别是输入门、遗忘门和输出门的激活向量, C ~ t \tilde{C}_t C~t 是候选细胞状态, C t C_t Ct 是细胞状态, h t h_t ht 是隐状态, σ \sigma σ 是sigmoid激活函数, ⊙ \odot 表示逐元素乘法。

4. 双向循环神经网络(BiRNN)


双向循环神经网络(Bidirectional RNN,简称BiRNN)是一种结合了正向和反向信息的网络。在传统的RNN中,我们只利用了过去的信息,而忽略了未来信息。BiRNN通过在同一层次上构建两个RNN,一个正向处理序列,一个反向处理序列,从而有效利用了全部序列信息。

BiRNN的输出由两个RNN输出连接而成,可表示为:

h t = [ h t → , h t ← ] h_t = [\overrightarrow{h_t}, \overleftarrow{h_t}] ht=[ht ,ht ]

其中, h t → \overrightarrow{h_t} ht 是正向RNN在时刻 t t t 的隐状态, h t ← \overleftarrow{h_t} ht 是反向RNN在时刻 t t t 的隐状态。

5. 应用示例:情感分类


现在,让我们通过一个简单的NLP任务来演示RNN在实际中的应用。我们将使用情感分类作为示例,将一段文本分类为正面情感或负面情感。

假设我们有以下训练数据:

文本情感
“这部电影太棒了!”正面
“这个餐馆很糟糕。”负面
“我喜欢这个产品。”正面
“这个服务很差。”负面

首先,我们需要将文本数据转换为数值向量,通常使用词嵌入来表示每个单词。然后,我们可以构建一个简单的RNN模型来进行情感分类。

import tensorflow as tf
from tensorflow.keras.layers import Embedding, SimpleRNN, Dense

# 定义词汇表大小和词向量维度
vocab_size = 10000
embedding_dim = 100

# 构建RNN模型
model = tf.keras.Sequential([
    Embedding(vocab_size, embedding_dim),
    SimpleRNN(64),
    Dense(1, activation='sigmoid')
])

# 编译模型
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

# 训练模型
model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_val, y_val))

在这个例子中,我们使用了一个简单的RNN层来处理序列数据,并在顶部添加了一个全连接层来输出二分类的结果。模型将文本转换为词向量后,通过RNN层进行序列处理,最终输出正面或负面情感的预测结果。

结论

本节中,我们深入探讨了循环神经网络(RNN)的基本原理、数学表达以及其在NLP中的应用。我们还介绍了LSTM和双向RNN的概念,并通过情感分类示例演示了RNN在实际NLP任务中的应用。RNN作为一种强大的序列处理工具,在NLP领域发挥着重要作用,但也有其局限性。为了更好地处理长序列和解决长期依赖问题,我们还可以探索更复杂的循环单元结构,如GRU和Transformer等。

深入学习循环神经网络和其他NLP技术将帮助你在自然语言处理领域取得更进一步的进展。希望本节内容对你理解和学习NLP有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/799676.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【蓝图】p40-p43对象引用、变量有效性、实现键盘控制物体自转、简单点名系统

p40-p43对象引用、变量有效性、实现键盘控制物体自转、简单点名系统 p40对象引用、变量有效性p41实现键盘控制物体自转创建bool值控制旋转实现通过键盘控制自转 p42p43简单点名系统Get All Actors Of Class(获得场景中所有该类的actor演员)getFor Each L…

TEE GP(Global Platform)安全认证产品

TEE之GP(Global Platform)认证汇总 一、安全认证产品介绍 选择SECURITY和TEE SECURITY,然后SEARCH,可以看到TEE对应的安全认证产品。 二、HUAWEI ITRUSTEE V3.0 ON KIRIN 980 三、SAMSUNG TEEGRIS V4.1 参考: GlobalPlatform Certification…

【linux】暗夜精灵9自动升级BIOS后,无法进入双系统

1、问题描述 暗夜精灵9自动升级BIOS后,无法进入双系统,甚至没有“多重引导菜单” 2、解决方法 1)进入BIOS 惠普暗夜精灵9进入BIOS的按键是F10 2)设置启动项 需要设置三处 功能键延时:5秒 安全启动模式:关闭 UEFI模式下的开机顺序:ubuntu3)设置显卡切换 如果NVIDIA…

TCL(Tool Command Language)学习(三)-----字符串操作

一、比较 : string compare 格式 : string compare ?-nocase? ?-length int? string1 string2 把字符串 string1 和字符串 string2 进行比较 ,返回值为 -1、0或 1 ,分别对应 string1 小于、等于或大于string2。如果有 -len…

全球百年品牌,最高已改变25次

摘要:今天,我们看到的那些持久的公司并不是真正持续了100年的公司。在100年的时间里,他们改变了25次、5次或4次,如果不改变,他们就无法生存。 近期市场调研中,许战海咨询发现国内市场已经进入无限内卷的竞争阶段。如何在内卷的竞争中保持可持…

Android OpenGL ES Camera2 实现实时抠图效果

前面文章人像抠图 + OpenGL ES 还能这样玩?没想到吧,我们介绍了利用人像抠图算法生成的 mask 图,然后结合 OpenGL 可以产生一些有趣的效果。 抠图技术应用很广泛,比如很多手机的相机自带“人像留色”滤镜:人体区域保留彩色,人体区域之外灰度化。所以人像留色的关键技术在…

Unity下如何实现低延迟的全景RTMP|RTSP流渲染

技术背景 Unity3D可以用于创建各种类型的的应用程序,包括虚拟现实、培训模拟器等。以下是一些可以使用Unity3D全景播放的场景: 虚拟现实体验:全景视频可以用来创建逼真的虚拟环境,使用户能够感受到身临其境的感觉;培…

Spring中的Bean配置

bean配置 基础配置 别名配置 作用范围配置 1、为什么bean会默认为单例? 如果不为单例,则每一次调用bean,Spring的bean容器中,会出现多个该类的对象,这会造成容器的冗余。 2、适合交给容器进行管理的bean 表现层对象…

Ansys Zemax | 确保自由曲面设计的可制造性

本文专门介绍使用单点金刚石车床加工自由曲面的主要可制造性参数,解释了可制造性参数如何与仪器参数相关联,并展示了如何在 OpticStudio 中检查和控制这些可制造性参数。此外,还解释了如何处理其考察区域外的自由曲面的行为。例如&#xff0c…

MYSQL练习四

练习四 某公司的mis数据库中有部⻔表(dept)和员工表(employee)表结构及其数据如下: 表结构 dept表结构 employee表结构 表数据 dept表数据 employee表数据 完成以下SQL编写: 编写脚本,创建…

Eureka注册中心 与 OpenFeign调用接口

需求 一个应用通过接口,调用另一个应用的接口。使用OpenFeign来实现接口调用。 说明 通过OpenFeign(本文接下来简称Feign)调用远程接口,需要Eureka注册中心的支持。 OpenFeign调用接口的逻辑如下: 提供接口的应用…

617. 合并二叉树

题目 题解一:递归 /*** 递归* param root1* param root2* return*/public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {//结束条件if (root1 null) {return root2;} //结束条件if (root2 null) {return root1;}//两节点数值相加TreeNode me…

C++模拟实现stack

1.前言 stack 遵循的原则是先进后出,那到底是用list 还是 vector呢?其实都可以,但是队列queue就不一样了,他甚至不可以支付vector,因为效率太低了。 但是库里面用了一种新的类型,deque,它的实现…

【数据结构】实验五:栈

实验五 栈 一、实验目的与要求 1)熟悉栈的类型定义和基本操作; 2)灵活应用栈解决具体应用问题。 二、实验内容 1、判断回文数,回文是指正读反读均相同的字符序列,如“1221”和“12321”均是回文,但“…

揭秘全球最危险的11大网络间谍组织

根据安全研究人员的说法,下述这些都是全球最臭名昭著的,并且由民族国家资助的组织。 几十年前,当黑客入侵刚刚出现的时候,其大多是网络“发烧友”的“杰作”,他们痴迷于学习有关计算机和网络的一切知识。现如今&#x…

2023年Q2京东黑电行业热门类目数据分析报告(京东大数据)

随着家电行业的日趋成熟,黑电市场也愈加繁荣,黑色家电包括电视、音响、家庭影院、摄像机、游戏机等等带给人们娱乐的电器。 目前来看电视机在黑电行业的占有份额较大,而前面我们已经分析过电视市场,接下来我们继续一起来分析除电视…

实现PC端微信扫码native支付功能

目录 实现PC端微信扫码 简介 实现步骤 1. 获取商户号 2. 生成支付二维码 3. 监听支付结果 4. 发起支付请求 5. 处理支付回调 示例代码 结论 Native支付 Native支付的工作原理 Native支付的优势 Native支付的应用和市场地位 开通使用微信 native 支付流程 步骤一…

LaTeX Error: File `tabu.sty‘ not found.

虽然Miktex可以自动下载和安装没有的库,但有些时候也有可能会直接报错: LaTeX Error: File tabu.sty not found. 解决方法就是打开控制台。然后手动下载:

Sharding-JDBC分布式事务详解与实战

🚀 ShardingSphere 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜&…

最强,Python接口自动化测试-自动化用例编写(超细整理)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 我们在百度搜索天…