Seg2Seg及其pytorch实现

本文介绍了Seq2Seq模型的由来、框架和Encoder-Decoder结构,详细阐述了编码器如何将不定长输入序列转化为定长背景向量,以及解码器如何依赖该向量生成新的序列。此外,还提供了Seq2Seq模型在机器翻译任务中的PyTorch实现细节,包括数据处理和模型结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Seq2Seq由来

在基于词语的语言模型中,我们使用了循环神经网络。它的输入是一段不定长的序列,输出却是定长的,例如输入:They are,输出可能是 watching 或者 sleeping。

  • many to many
    然而,很多问题的输出是不定长的序列。以机器翻译为例,输入是一段英文,输出是一段法语,输入和输出皆不定长,例如:

英语:The are watching
法语:lls regardent

当输入输出序列都是不定长时,我们可以使用编码器 - 解码器(encoder-decoder)或者 seq2seq。它们分别是基于 2014 年的两个工作:

以上两个工作本质上都用到了两个循环神经网络结构,分别叫做编码器和解码器。编码器对应输入序列,解码器对应输出序列

Seq2Seq框架

Seq2Seq模型指的是首先对一个序列(如一个自然语言句子)编码,然后再对齐进行解码,即生成一个新的序列。很多自然语言处理的问题都可以看作为Seq2Seq模型,如机器翻译。

机器翻译流程:

  1. 首先编码器使用RNN对源语言句子编码
  2. 然后以最后一个单词对应的隐含层作为decoder的输入
  3. 再调用decoder(另一个RNN)逐词生成目标语言句子

Encoder-Decoder

编码器和解码器分别对应输入序列和输出序列的两个循环神经网络。我们通常会在输入序列和输出序列后面分别附上一个特殊字符 ‘<eos>’(end of sequence)表示序列的终止。在测试模型时,一旦输出 ‘’ 就终止当前的输出序列

基于RNN的Seq2Seq的基本假设:原始序列的最后一个隐含状态(一个向量)包含了该序列的全部信息。

Encoder

Encoder的作用是把一个不定长的输入序列转化成一个定长的背景向量 C C C该背景向量包含了输入序列的信息。常用的编码器是循环神经网络。

  • 循环神经网络的隐藏层变量 h t = f ( x t , h t − 1 ) h_t = f(x_t,h_{t-1}) ht=f(xt,ht1)
  • 编码器的背景向量 C = q ( h 1 , . . . , h T ) C = q(h_1,...,h_T) C=q(h1,...,hT)
    一个简单的背景向量可以认为是该网络最终时刻的隐藏层变量 h T h_T hT/。我们将这里的循环神经网络叫做编码器。

Decoder

Encoder最终输出了一个背景向量 C C C,该背景向量整合了输入序列 x 1 , x 2 , . . . , x T x_1,x_2,...,x_T x1,x2,...,xT

假设训练数据中的输出序列是 y 1 , y 2 , . . . , y T ′ y_1,y_2,...,y_{T\prime} y1,y2,...,y

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值