NLP模型(四)——seq2seq模型与Attention机制介绍

seq2seq模型是为了解决输入输出长度不固定的序列问题,常用于机器翻译等任务。模型由Encoder和Decoder组成,Encoder通过LSTM处理输入序列,Decoder生成输出序列。引入Attention机制解决了长序列信息丢失的问题,通过计算全局对齐权重,Decoder在解码时能关注输入序列的关键部分。Attention的计算涉及加权平均和softmax,以优化模型性能。

1. seq2seq模型介绍

传统的RNN只能处理 1 to N,N to N,N to 1 的问题,即输入长度为1输出长度为N,输入长度为N输出长度为N,输入长度为N输出长度为1的问题,但是,对于像翻译这种问题,输入与输出的序列并没有明确的一对一或一对多的关系的,可以称之为 N to M 问题,即输入与输出的长度都不固定,传统的模型就不能够解决这个问题,于是,RNN的变种seq2seq模型就被提出来了。

seq2seq模型是一种RNN模型的变体,其结构如下,模型组成包含了Encoder–Decoder 的结构,Encoder和Decoder都是一个RNN结构,Encoder是编码器,接受一个输入序列,输入序列长度为 N ,并将其输出成一个中间语义向量,Decoder是解码器,其接收Encoder产生的中间语义向量,并输出一个长度为 M 的序列。当需要计算损失的时候,将输出的序列与目标值计算相应的损失即可。
在这里插入图片描述

以上就是seq2seq模型的大致计算流程,接下来我们对其流程进行详细的介绍。

2. 模型计算

上述过程中的Encoder以及Decoder都使用的是RNN,现在使用的时候一般都使用的是RNN的变体LSTM,LSTM比原始的RNN结构更加的巧妙,更有希望能够记住长句子,首先我们先来认识一下LSTM的结构。

2.1 LSTM结构单元

一个LSTM单元的结构如下所示:
在这里插入图片描述
上述结构中,我们称 h t h_t ht t t t 时刻的隐藏状态, C t C_t Ct t t t 时刻的输出状态,LSTM的结构单元接收一个序列 X t X_t Xt 的输入和上一个时刻的隐藏状态 h t − 1 h_{t-1} ht1 以及输出状态 C t − 1 C_{t-1} Ct1 ,经过其中结构的一系列运算,得到当前时刻的隐藏状态 h t h_t ht 以及输出状态 C t C_t Ct ,进行的一系列运算并不重要,深度学习框架中的包会自动帮我们进行计算的,重要的是这里的 h t , C t h_t,C_t ht,Ct

2.2 seq2seq计算流程

比如我们现在有一个机器翻译的任务,使用的是seq2seq模型,模型的结构如下:
在这里插入图片描述
设输入序列为 x = ( x 1 , x 2 , ⋯   , x n ) x=(x_1,x_2,\cdots,x_n) x=(x1,x2,,xn),输出序列为 y = ( y 1 , y 2 , ⋯   , y m ) y=(y_1,y_2,\cdots,y_m) y=(y1,y2,,ym),首先,将输入序列通过LSTM,得到最后一个状态的隐藏状态和输出状态,即
h n , c n = L S T M ( x , h n − 1 , c n − 1 ) h_n,c_n=LSTM(x,h_{n-1},c_{n-1}) hn,cn=LSTM(x,hn1,cn1)一般而言,这里的 C o n t e x t V e c t o r Context \hspace{0.5em} Vector ContextVector 传递的是最后一个状态的 h n h_n hn c n c_n cn ,即 C = [ h n , c n ] C=[h_n,c_n] C=[hn,cn]
然后,将上下文向量 C C C 传入解码器中,并将其逐步传入到每一个时间步的LSTM,每一个时间步使用softmax层输出一个概率最大的序列 y ^ i \hat{y}_i y^i,将输出的序列 y ^ \hat{y} y^ y y y 使用损失函数计算损失,再进行反向传播逐步训练即得到了seq2seq模型。

3. Attention机制

在Seq2Seq结构中,encoder把所有的输入序列都编码成一个统一的语义向量context,然后再由Decoder解码。由于context包含原始序列中的所有信息,它的长度就成了限制模型性能的瓶颈。如机器翻译问题,当要翻译的句子较长时,一个Context可能存不下那么多信息,就会造成精度的下降,而Attention机制的提出则有利于解决这一问题。Attention 的方式有很多种计算方式,这里介绍其中的一种,软性注意力机制。

3.1 引入Attention

我们现在设Encoder的LSTM在 t t t 时刻输出的隐藏状态信息为 h t h_t ht,Decoder的LSTM在 t t t 时刻输出的隐藏状态信息为 H t H_t Ht,输出状态信息为 s t s_t st,则上面的Decoder输出
H t = f ( H t − 1 , s t − 1 ) H_t=f(H_{t-1},s_{t-1}) Ht=f(Ht1,st1)根据上面的式子,当句子过长的时候,信息会在循环神经网络的传递中逐渐消失,导致精度下降,因此,我们提出了注意力机制,即额外添加一个信息,让Decoder在句子中注意到重要的信息,设添加的信息为 C t C_t Ct,则表示为
H t = f ( H t − 1 , s t − 1 , C t ) H_t=f(H_{t-1},s_{t-1},C_t) Ht=f(Ht1,st1,Ct)其中 C t C_t Ct 指的是在时刻 t t t 的上下文向量。我们把它定义为所有的原文隐藏层值 h t h_t ht 加权平均的结果 ,即
C t = ∑ i = 1 n α t i h i C_t=\sum_{i=1}^{n}\alpha_{ti}h_{i} Ct=i=1nαtihi其中的 α t i \alpha_{ti} αti 就是对 t t t 时刻的各个原文隐藏状态 h h h 给到的权重,也就是注意力的大小,该权重称为全局对齐权重

3.2 计算全局对齐权重

计算全局对齐权重的时候,我们肯定是不可能一个个权重进行人工标注的,太过于麻烦,也太过有主观性了,于是,我们可以使用一个可训练的权重

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值