多语言机器翻译 | (2) 编解码器结构

在⾃然语⾔处理的很多应用中,输⼊和输出都可以是不定长序列。以机器翻译为例,输⼊可以是⼀段不定长的英语文本序列,输出可以是一段不定长的法语文本序列,例如:

英语输入:“They”、“are”、“watching”、“.”

法语输出:“Ils”、“regardent”、“.”

输入和输出都是不定长序列时,我们可以使用编码器—解码器(encoder-decoder)或者 seq2seq模型 。这两个模型本质上都用到了两个循环神经网络(或transformer),分别叫做编码器和解码器。编码器用来分析输入序列,解码器⽤来生成输出序列。

下图描述了使用编码器—解码器将上述英语句子翻译成法语句子的一种⽅法。在训练数据集中,我们可以在每个句子后附上特殊符号“”(end of sequence)以表示序列的终止。编码器每个时间步的输⼊依次为英语句子中的单词、标点和特殊符号“”。下图中使用了编码器在最终时间步的隐藏状态作为输入句子的表征或编码信息。解码器在各个时间步中使用输入句子的编码信息和上个时间步的输出以及隐藏状态作为输⼊。我们希望解码器在各个时间步能正确依次输出翻译后的法语单词、标点和特殊符号""。需要注意的是,解码器在最初时间步的输⼊⽤到了一个表示序列开始的特殊符号" "(beginning of sequence)。 (训练的时候,解码器的输入右移一位,前面添加开始符号,也可以上一时刻的输出作为下一时刻的输入;测试的时候是上一时刻的输出作为下一时刻的输入)。
​​在这里插入图片描述

1. 编码器

编码器的作用是把⼀个不定长的输入序列变换成一个定长的上下文变量c(context vector) ,并在该上下文向量中编码输⼊序列信息。常用的编码器是循环神经网络(或 Transformer encoder)。

让我们考虑batch_size=1的时序数据样本。假设输入序列是 x 1 , . . . , x T x_1,...,x_T x1,...,xT,例如 x i x_i xi是输入句子中的第i个词。在时间步t,循环神经⽹络将输⼊ x t x_t xt的特征向量和上个时间步的隐藏状态 h t − 1 h_{t-1} ht1变换为当前时间步的隐藏状态 h t h_t ht.我们可以⽤函数f表达循环神经网络隐藏层的变换:
在这里插入图片描述
接下来,编码器通过⾃定义函数q将各个时间步的隐藏状态变换为上下文向量:
在这里插入图片描述
例如,当选择 q ( h 1 , . . . , h T ) = h T q(h_1,...,h_T)=h_T q(h1,...,hT)=hT, 上下文向量是输入序列最终时间步的隐藏状态 h T h_T hT

以上描述的编码器是⼀个单向的循环神经网络,每个时间步的隐藏状态只取决于该时间步及之前的输⼊⼦序列。我们也可以使⽤双向循环神经网络构造编码器(可以是多层)。在这种情况下,编码器每个时间步的隐藏状态同时取决于该时间步之前和之后的⼦序列(包括当前时间步的输入),并编码了整个序列的信息。

2. 解码器

刚刚已经介绍,编码器输出的上下文向量c编码了整个输入序列 x 1 , . . . , x T x_1,...,x_T x1,...,xT的信息。给定训练样本中的输出序列 y 1 , . . . , y T ′ y_1,...,y_{T'} y1,...,yT, 对于每个时间步 t ′ t' t(符号与输入序列或编码器的时间步t有区别),解码器输出 y t ′ y_{t'} yt的条件概率将基于之前的输出序列 y 1 , . . . , y t ′ − 1 y_1,...,y_{t'-1} y1,...,yt1和上下文向量c, 即 P ( y t ′ ∣ y 1 , . . . , y t ′ − 1 , c ) P(y_{t'}|y_1,...,y_{t'-1},c) P(yty1,...,yt1,c).

为此,我们可以使用另一个循环神经网络作为解码器。在输出序列的时间步 t ′ t' t,解码器将上一时间步的输出 y t ′ − 1 y_{t'-1} yt1、上下文向量c,以及上一时间步的隐藏状态 s t ′ − 1 s_{t'-1} st1作为输入得到当前时间步的隐藏状态 s t ′ s_{t'} st. 因此,我们可以用函数g表达解码器隐藏层的变换(预测阶段):
在这里插入图片描述
有了解码器的隐藏状态后 ,我们可以使用自定义的输出层和softmax运算来计算 P ( y t ′ ∣ y 1 , . . . , y t ′ − 1 , c ) P(y_{t'}|y_1,...,y_{t'-1},c) P(yty1,...,yt1,c), 例如,基于当前时间步的解码器隐藏状态 s t ′ s_{t'} st来计算当前时间步输出 y t ′ y_{t'} yt的概率分布(输出层 softmax)。

3. 模型训练

根据最大似然估计,我们可以最大化输出序列基于输入序列的条件概率:
在这里插入图片描述
并得到该输出序列的损失:
在这里插入图片描述
在模型训练中,所有输出序列损失的均值通常作为需要最⼩化的损失函数。在上图所描述的模型预测过程中,我们需要将解码器在上一个时间步的输出作为当前时间步的输入。与此不同,在训练过程中我们也可以将标签序列(训练集的真实输出序列)在上一个时间步的标签作为解码器在当前时间步的输入。这叫作强制教学(teacher forcing)(训练阶段强制教学:解码器的输入为真实标签序列右移一位,前面加上起始符)。

4. 总结

1)编码器-解码器(seq2seq)可以输⼊并输出不定长的序列。

2)编码器—解码器可以使⽤两个循环神经⽹络实现。

3)在编码器—解码器的训练过程中,可以采⽤强制教学也可以采用预测阶段的方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值