Seq2Seq模型及Attention机制

Seq2Seq模型

seq2seq模型主要分为三种:

  1. 一种是以rnn为基础的模型, 一般是LSTM+attention,顺序处理输入信息。
  2. 一种是以cnn为基础的模型,后面提到的Fairseq就属于这种。
  3. 一种是完全依靠attention的模型,如谷歌的transformer。

seq2seq模型虽然简单,但是特别经典,它的出现可以说给整个NLP带来个翻天覆地的变化。网上已经有很多人做了相关的总结,但是翻看起来还是感觉有点乱,于是想自己总结一个版本,方便自己回忆,也希望所写的内容能给大家带来帮助。由于平时都是直接拿来用,不需要在原理方面做推敲,所以公式部分就不详细介绍了,感兴趣的可以自己去阅读论文,下面只介绍相关原理及应用。

Seq2Seq,全称Sequence to Sequence。它是一种通用的Encoder——Decoder框架,可用于机器翻译、文本摘要、会话建模、图像字幕等场景中。其中Decoder部分的输出通常是不定长的,以机器翻译为例:将一句中文翻译成英文,那么这句英文的长度有可能会比中文短,也有可能会比中文长,所以输出的长度就不确定了。

如下图所示,输入的中文长度为4,输出的英文长度为2。下面的所有内容都以机器翻译为例。
在这里插入图片描述

Encoder部分

Encoder负责将输入序列压缩成指定长度的向量,这个向量就可以看成是这个序列的语义,这个过程称为编码。

如下图,获取语义向量最简单的方式就是直接将最后一个输出的隐状态作为语义向量c。也可以对最后一个隐含状态做一个变换得到语义向量,还可以将输入序列的所有隐含状态做一个变换得到语义变量。

下图c代表生成的语义向量,q函数代表相应的变换(线性变换等)

Decoder部分

Decoder部分就是根据Encoder部分输出的语义向量c来做解码工作。以翻译为例,就是生成相应的译文。

注意生成的序列是不定长的。而且上一时刻的输出通常要作为下一时刻的输入,如下图所示,预测y2时y1要作为输入。

在这里插入图片描述
得到语义向量c后,通常的做法是将c当做初始状态h0输入到Decoder中:

在这里插入图片描述
还有一种做法是将c当做每一步的输入:
在这里插入图片描述
一般而言在Decoder阶段上一步的输出会作为下一步的输入,如下所示:
在这里插入图片描述

seq2seq模型举例

下面是seq2seq架构的几个应用,希望能通过这几个例子对seq2seq架构有更深入的了解。

  1. 邮箱对话

    下面是一个收发邮件的例子,根据发来的消息生成相应的回复。

    左右两边各有四个LSTM单元(黄色蓝色方块,每个方块代表一个LSTM单元),得到的语义向量c当做初始状态h0输入到Decoder中:

在这里插入图片描述

LSTM简单介绍

下图是LSTM单元的组成结构,由四个门构成:
在这里插入图片描述
下图是3个LSTM单元相互连接(每个单元的结构都一样,上一个单元的输入会作为下一个单元的输入):

在这里插入图片描述

  1. 神经机器翻译

    图中结构比前面稍微复杂一点,单词没有直接输入到Encoder模块中,而是通过Embedding层生成对应的词嵌入(词向量),然后将生成的词嵌入输入到Encoder模块中,这是NLP中的常用的操作。实际上Decoder部分输入的单词也要先生成对应的词嵌入(见下一个例子)。

    得到的语义向量s当做初始状态h0输入到Decoder中,Decoder模块的输出并没有直接得到翻译结果,而是通过Softmax函数来生成,这也是NLP中的常用的操作。

    实际翻译过程就是这个样子,前面是为了让大家理解seq2seq的原理而把中间过程简化了。

在这里插入图片描述

  1. 神经机器翻译(双层LSTM)

    这个例子跟上一个类似,只是编解码部分都用了双层LSTM(LSTM有两个隐藏层),_ 是语句起始和结束标记。

在这里插入图片描述

  1. 生成对联

在这里插入图片描述

  1. c当做每一步的输入

    这张图在前面讲生成变长序列的时候已经看到了,这也是一个翻译例子,这个例子跟前面不同的地方是Encoder生成的语义向量c当做Decoder部分每一步的输入。

在这里插入图片描述

基于CNN的seq2seq

现在大多数场景下使用的Seq2Seq模型是基于RNN构成的,虽然取得了不错的效果,但也有一些学者发现使用CNN来替换Seq2Seq中的encoder或decoder可以达到更好的效果。最近,FaceBook发布了一篇论文:《Convolutional Sequence to Sequence Learning》,命名为fairseq,提出了完全使用CNN来构成Seq2Seq模型,用于机器翻译,超越了谷歌创造的基于LSTM机器翻译的效果。

代码地址:fairseq代码链接

RNN的链式结构,能够很好地应用于处理序列信息。但是,RNN也存在着劣势:

一个是由于RNN运行时是将序列的信息逐个处理,不能实现并行操作,导致运行速度慢;
另一个是传统的RNN并不能很好地处理句子中的结构化信息,或者说更复杂的关系信息。

相比之下,CNN的优势就凸显出来。最重要的一点是:CNN能够并行处理数据,计算更加高效。(当然后面的Transformer也可以并行化)。此外,CNN是层级结构,与循环网络建模的链式结构相比,层次结构提供了一种较短的路径来捕获词之间远程的依赖关系,因此也可以更好地捕捉更复杂的关系。

有关这篇文章的细节我会再抽时间整理出来。

Transformer

transformer也是seq2seq模型,但全程没有用到rnn或者cnn,它的Encoder部分和Decoder部分都使用了self-attention,感兴趣的可以点此链接阅读。

论文链接:《 Attention Is All You Need》

Attention机制

Attention机制在下一篇博客中,欢迎大家阅读!

  • 16
    点赞
  • 141
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Seq2Seq模型是一种用于序列到序列任务的神经网络模型,它由Encoder和Decoder两部分组成。Encoder将输入序列编码为一个固定长度的向量表示,而Decoder则根据这个向量表示生成输出序列。\[1\] 在Seq2Seq模型中,Attention机制被引入以解决长序列的信息丢失问题。Attention机制允许Decoder在生成每个输出时,根据输入序列的不同部分给予不同的注意力权重,从而更好地捕捉输入序列的相关信息。\[1\] Seq2Seq模型主要有三种实现方式:基于RNN的模型、基于CNN的模型和完全依靠Attention模型。基于RNN的模型通常使用LSTM结构,并结合Attention机制来处理输入序列。基于CNN的模型则完全使用CNN来构建Seq2Seq模型,如FaceBook的fairseq。而完全依靠Attention模型,如谷歌的transformer,通过自注意力机制来实现序列到序列的转换。\[2\]\[3\] 总结来说,Seq2Seq模型结合Attention机制可以有效地处理序列到序列任务,而不同的实现方式可以根据具体的应用场景选择合适的模型结构。 #### 引用[.reference_title] - *1* *2* *3* [Seq2Seq模型Attention机制](https://blog.csdn.net/weixin_38937984/article/details/101111619)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值