【NLP251】意图识别 与 Seq2Seq

Seq2Seq模型作为从RNN演进到Transformer和Attention机制的关键中间阶段,它不仅承前启后,还为我们深入理解这些复杂的模型架构提供了重要的基础。接下来,我们将详细探讨Seq2Seq模型的原理及其在自然语言处理领域中的应用。

1. 原理及网络框架

1.1 自编码神经网络

自编码器作为一种深度学习领域无监督的算法,本质上是一种 数据压缩 算法,属于生成算法的一种。自编码器(AutoEncoder,AE)就是一种利用反向传播 使得输出值等于输入 的神经网络,它将输入压缩成潜在特征/高阶特征,然后将这种表征重构输出。
构建一个自编码器主要包括两部分: 编码器(Encoder) 解码器(Decoder) 。编码器将输入压缩为潜在空间特征,解码器将潜在空间特征重构输出。

 

1.2 Seq2Seq 

 

图中展示的是一个典型的序列到序列(Seq2Seq)模型,其中包含了编码器(Encoder)和解码器(Decoder)的RNN单元。下面将详细描述每个步骤的数学过程(数学过程理解一边就可以初学不必深究)。

编码器(Encoder)

  1. 输入序列:假设输入序列为 x1​,x2​,x3​,x4​。

  2. 隐藏状态更新

    • 初始隐藏状态 h0​ 通常初始化为零向量或通过某种方式得到。

    • 对于每个时间步 t,隐藏状态 ht​ 通过以下公式更新:

      其中,Wh​ 和 Wx​ 是权重矩阵,bh​ 是偏置项,f 是激活函数(如tanh或ReLU)。

  3. 最终上下文向量

    • 最终隐藏状态 h4​ 可以作为上下文向量 c,也可以通过某种方式(如取最后的状态或对所有隐藏状态进行加权求和)得到。

解码器(Decoder)

  1. 初始状态

    • 解码器的初始隐藏状态 h0′​ 通常设置为编码器的最终隐藏状态 h4​ 或上下文向量 c。

  2. 输出序列生成

    • 对于每个时间步 t,解码器生成输出 yt​ 和更新隐藏状态 ht′​:

      其中,Wh′​、Wc′​ 和 Wy′​ 是权重矩阵,bh′​ 和 by′​ 是偏置项,f 和 g 是激活函数(f 通常为tanh或ReLU,g 通常为softmax)。

  3. 输出生成

    • 输出 yt​ 可以是词汇表中每个词的概率分布,通常通过softmax函数得到:

 我们可以将上述过程简化为如下图所示流程,其中在输入序列的最后一个元素“C”之后,添加了一个特殊的结束标记“<EOS>”,表示输入序列的结束或输出出序列的开始标识符。当解码器生成一个特殊的结束标记“<EOS>”时,表示输出序列的结束。

 

 2. 代码实现

通过自定义编码器、解码器输入及目标标签,深度理解输入输出出结构(下图与整体代码框架无关,仅为理解提供方便,实际代码输入输出通过 torch.randn实现,例:encoder_input_x = torch.randn(3, 5, 8) decoder_input_x = torch.randn(3, 4, 8))

编码器:3个样本,每个样本5个token,每个token对应8维的向量

解码器:3个样本,每个样本4个token(3+1), 每个token对应8维度的向量

其中,2和3分别代表开始标识和结束标识

网络执行过程与测试代码实现从这里开始 

 

将上图Seq2Seq网络框架通过代码实现 

定义编码器、解码器 

 实现网络执行过程

 附 可编辑代码实现:

vocab_size = 100
encoder_rnn = nn.RNN(input_size=8, hidden_size=8, batch_first=True)
decoder_rnn = nn.RNN(input_size=8, hidden_size=8, batch_first=True)
deocder_output_fc = nn.Sequential(nn.Linear(8, vocab_size)
)#定义一个简单的全连接层,它将解码器的输出维度从8转换为词汇表大小(vocab_size)# 3个样本,每个样本5个token,每个token对应8维的向量
encoder_input_x = torch.randn(3, 5, 8)
# encoder_output: [N,T,E] 每个时刻的输出特征向量
# encoder_ht: [1,N,E] 最后一个时刻提取的状态信息/特征向量
encoder_output, encoder_ht = encoder_rnn(encoder_input_x)
print(encoder_ht.shape)# 将编码器的状态转换为中间向量
c = encoder_ht
decoder_h0 = c# 调用解码器
# 3个样本,每个样本4个token(3+1), 每个token对应8维度的向量
decoder_input_x = torch.randn(3, 4, 8)
# decoder_output: [N,T,E] 每个时刻的输出特征向量
# decoder_ht: [1,N,E] 最后一个时刻提取的状态信息/特征向量
decoder_output, decoder_ht = decoder_rnn(decoder_input_x, hx=decoder_h0)print(decoder_output.shape)# 预测的置信度
z = deocder_output_fc(decoder_output)  # [N,T,E] * [E,vocab_size] --> [N, T, vocab_size]print(z.shape)

3.在实际应用场景中理解Seq2Seq执行过程

在左侧的图中,“小明喜欢吃苹果”这一输入序列首先通过词嵌入层被转换为向量表示。每个词被转换成一个向量后,输入到编码器中进行处理,生成一系列隐藏状态 h1、h2、h3。编码器的输出可以是最后一个隐藏状态,也可以是通过对隐藏状态进行聚合得到的上下文向量 c,例如通过取最后一个状态、平均或使用 Attention 机制得到。

解码器的初始状态通常设置为编码器的最终隐藏状态或上下文向量 c。它接收一个起始符号(如 ),并开始生成输出序列。在每一步解码过程中,解码器生成一个输出 Oi,这个输出是基于前一时刻的隐藏状态和输出。解码器的输出 Oi 通过一个 softmax 层(或其他激活函数)转换为概率分布,然后选择概率最高的词作为输出 Yi。这一过程不断重复,直到生成结束符号(如 ),从而完成整个序列的生成。

 ​​​​​​

 

其中,argmax过程是一个多分类过程,选择概率较高的单词id作为输出 

Seq2Seq的应用场景不仅涵盖了传统的机器翻译、文本摘要和对话生成,还包括了一些别出心裁的应用,如根据数学公式的图片生成LaTeX代码,以及自动生成提交信息等。自然语言生成(NLG)作为一个极具吸引力和前景的研究领域,其核心在于解决条件概率p(output|context)的建模问题,即基于给定的上下文生成相应的输出。这里的上下文可以是多种多样的,研究人员利用深度学习模型对这一条件概率进行建模,结合海量训练数据和无穷的想象力,实现了众多令人惊叹的应用。Seq2Seq框架因其简洁易用而备受青睐,相应的开源实现也层出不穷,但这并不意味着可以机械地照搬照套,而是需要针对具体问题进行具体分析。此外,如何控制生成内容,即解码部分的研究,也是当前NLG领域一个非常有趣的方向,包括如何调控生成文本的长度、多样性、信息量大小以及情感等。 

Seq2Seq向Transformer的演进

Transformer模型和传统的Seq2Seq模型,两种模型都采用编码器-解码器架构,用于将输入序列转换为输出序列。 

传统Seq2Seq模型通常使用循环神经网络(RNN)或长短时记忆网络(LSTM)来处理序列数据。在处理长序列时,这些模型可能会遇到梯度消失或梯度爆炸的问题,导致难以捕捉长距离依赖关系。

Transformer模型则是将Seq2Seq中的RNN(或LSTM)替换为自注意力机制。自注意力机制允许模型在序列中的任意位置间直接建立依赖关系,不受距离限制,这使得模型能够更有效地处理长距离依赖问题。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker配置mysql并使用mysql connector cpp编程

mysql 配置mysql使用docker 这里使用docker安装了&#xff0c;比较简洁&#xff0c;不想使用了直接就可以把容器删掉&#xff0c;首先获取下镜像&#xff0c;如下命令 docker pull container-registry.oracle.com/mysql/community-server这里直接默认使用最新版本的mysql了 …

赛博算卦之周易六十四卦JAVA实现:六幺算尽天下事,梅花化解天下苦。

佬们过年好呀~新年第一篇博客让我们来场赛博算命吧&#xff01; 更多文章&#xff1a;个人主页 系列文章&#xff1a;JAVA专栏 欢迎各位大佬来访哦~互三必回&#xff01;&#xff01;&#xff01; 文章目录 #一、文化背景概述1.文化起源2.起卦步骤 #二、卦象解读#三、just do i…

【16届蓝桥杯寒假刷题营】第2期DAY4

【16届蓝桥杯寒假刷题营】第2期DAY4 - 蓝桥云课 问题描述 幼儿园小班的浩楠同学有一个序列 a。 他想知道有多少个整数三元组 (i,j,k) 满足 1≤i,j,k≤n 且 ai​aj​ak​。 输入格式 共2行&#xff0c;第一行一个整数 n&#xff0c;表示序列的长度。 第二行 n 个整数&#x…

基于单片机的超声波液位检测系统(论文+源码)

1总体设计 本课题为基于单片机的超声波液位检测系统的设计&#xff0c;系统的结构框图如图2.1所示。其中包括了按键模块&#xff0c;温度检测模块&#xff0c;超声波液位检测模块&#xff0c;显示模块&#xff0c;蜂鸣器等器件设备。其中&#xff0c;采用STC89C52单片机作为主控…

【狂热算法篇】探秘图论之Dijkstra 算法:穿越图的迷宫的最短路径力量(通俗易懂版)

羑悻的小杀马特.-CSDN博客羑悻的小杀马特.擅长C/C题海汇总,AI学习,c的不归之路,等方面的知识,羑悻的小杀马特.关注算法,c,c语言,青少年编程领域.https://blog.csdn.net/2401_82648291?typebbshttps://blog.csdn.net/2401_82648291?typebbshttps://blog.csdn.net/2401_8264829…

【Block总结】动态蛇形卷积,专注于细长和弯曲的局部结构|即插即用

论文信息 标题: Dynamic Snake Convolution based on Topological Geometric Constraints for Tubular Structure Segmentation 作者: 戚耀磊、何宇霆、戚晓明、张媛、杨冠羽 会议: 2023 IEEE/CVF International Conference on Computer Vision (ICCV) 发表时间: 2023年10月…

【NEXT】网络编程——上传文件(不限于jpg/png/pdf/txt/doc等),或请求参数值是file类型时,调用在线服务接口

最近在使用华为AI平台ModelArts训练自己的图像识别模型&#xff0c;并部署了在线服务接口。供给客户端&#xff08;如&#xff1a;鸿蒙APP/元服务&#xff09;调用。 import核心能力&#xff1a; import { http } from kit.NetworkKit; import { fileIo } from kit.CoreFileK…

Linux工具使用

1.gcc/g的使用 1.1程序翻译的过程 ①预处理&#xff1a;展开头文件&#xff0c;替换宏&#xff0c;调节编译&#xff0c;去注释。 ②编译&#xff1a;将代码变成汇编语言 ③汇编&#xff1a;将汇编代码变成二进制不可执行的目标文件。 ④链接&#xff1a;将多个我写的多个…

Mac Electron 应用签名(signature)和公证(notarization)

在MacOS 10.14.5之后&#xff0c;如果应用没有在苹果官方平台进行公证notarization(我们可以理解为安装包需要审核&#xff0c;来判断是否存在病毒)&#xff0c;那么就不能被安装。当然现在很多人的解决方案都是使用sudo spctl --master-disable&#xff0c;取消验证模式&#…

单细胞-第五节 多样本数据分析,打分R包AUCell

文件在单细胞\5_GC_py\1_single_cell\3.AUCell.Rmd 1.基因 rm(list = ls()) load("g.Rdata")2.AUCell https://www.ncbi.nlm.nih.gov/pmc/articles/PMC9897923 IF: NA NA NA用这个文章里的方法,将单细胞亚群的marker基因与ros相关基因取交集,用作AUCell的基因集…

[EAI-027] RDT-1B,目前最大的用于机器人双臂操作的机器人基础模型

Paper Card 论文标题&#xff1a;RDT-1B: a Diffusion Foundation Model for Bimanual Manipulation 论文作者&#xff1a;Songming Liu, Lingxuan Wu, Bangguo Li, Hengkai Tan, Huayu Chen, Zhengyi Wang, Ke Xu, Hang Su, Jun Zhu 论文链接&#xff1a;https://arxiv.org/ab…

MATLAB的数据类型和各类数据类型转化示例

一、MATLAB的数据类型 在MATLAB中 &#xff0c;数据类型是非常重要的概念&#xff0c;因为它们决定了如何存储和操作数据。MATLAB支持数值型、字符型、字符串型、逻辑型、结构体、单元数组、数组和矩阵等多种数据类型。MATLAB 是一种动态类型语言&#xff0c;这意味着变量的数…

【解决方案】MuMu模拟器移植系统进度条卡住98%无法打开

之前在Vmware虚拟机里配置了mumu模拟器&#xff0c;现在想要移植到宿主机中 1、虚拟机中的MuMu模拟器12-1是目标系统&#xff0c;对应的目录如下 C:\Program Files\Netease\MuMu Player 12\vms\MuMuPlayer-12.0-1 2、Vmware-虚拟机-设置-选项&#xff0c;启用共享文件夹 3、复…

DeepSeek介绍及使用ollama本地化部署DeepSeek-R1大模型

DeepSeek 中文名深度求索人工智能基础技术研究有限公司(简称“深度求索”或“DeepSeek”)&#xff0c;成立于2023年&#xff0c;是一家专注于实现AGI的中国公司。 在本月初推出 DeepSeek-R1后&#xff0c;该公司宣称其在执行数学、编码和自然语言推理等任务时“性能可与OpenAI…

金融级分布式数据库如何优化?PawSQL发布OceanBase专项调优指南

前言 OceanBase数据库作为国产自主可控的分布式数据库&#xff0c;在金融、电商、政务等领域得到广泛应用&#xff0c;优化OceanBase数据库的查询性能变得愈发重要。PawSQL为OceanBase数据库提供了全方位的SQL性能优化支持&#xff0c;助力用户充分发挥OceanBase数据库的性能潜…

简要介绍C语言与c++共有的数学函数

C语言和C都提供了丰富的数学函数&#xff0c;这些函数主要定义在 <math.h>&#xff08;C语言&#xff09;和 <cmath>&#xff08;C&#xff09;头文件中。以下分别介绍C语言与C共有的数学函数&#xff0c;以及C特有的数学函数。 C语言与C共有的数学函数&#xff08…

NVIDIA GPU介绍:概念、序列、核心、A100、H100

概述 入职一家大模型领域创业公司&#xff0c;恶补相关知识。 概念 一些概念&#xff1a; HPC&#xff1a;High Performance Computing&#xff0c;高性能计算SoC&#xff1a;System on Chip&#xff0c;单片系统FLOPS&#xff1a;Floating Point Operations Per Second&am…

Python中的函数(下)

函数返回值 返回单个值 函数可以通过 return 语句返回一个值。一旦执行到 return 语句&#xff0c;函数就会停止执行&#xff0c;并将指定的值返回给调用者。例如&#xff1a; 返回多个值 实际上&#xff0c;Python函数只能返回一个值&#xff0c;但可以通过返回一个元组来模…

python算法和数据结构刷题[2]:链表、队列、栈

链表 链表的节点定义&#xff1a; class Node():def __init__(self,item,nextNone):self.itemitemself.nextNone 删除节点&#xff1a; 删除节点前的节点的next指针指向删除节点的后一个节点 添加节点&#xff1a; 单链表 class Node():"""单链表的结点&quo…

https数字签名手动验签

以bing.com 为例 1. CA 层级的基本概念 CA 层级是一种树状结构&#xff0c;由多个层级的 CA 组成。每个 CA 负责为其下一层级的实体&#xff08;如子 CA 或终端实体&#xff09;颁发证书。层级结构的顶端是 根 CA&#xff08;Root CA&#xff09;&#xff0c;它是整个 PKI 体…