一旦编码器使用其上下文向量设置好,我们将传入一个特殊的字
符来表示生成输出的开始。在文献中,一般是附加到输入结尾的
<EOS>
标记(在输出的结尾也有这样的标记,表示生成输出完
成)。然后我们第一个时间步将一层接一层地运行这个三层的
LSTM,将最后一层的输出放到 softmax 函数中生成一个输出
单词。然后我们把这个词传递到下一个时间步的第一层,重复上
述的流程生成输出单词。这就是我们如何使 LSTM 像语言模型
一样起作用。
右图是一个展示解码器的例子。该解码 器正在解码“what is
your name?”的上下文向量。注意在生成的开始使用了一个特
殊的符号“GO”,而且解码的生成是按照正常的句子顺序,而不
是反向读取的输入。注意输入和输出长度不需要相同。
一旦我们有了输出序列,我们就像往常一样使用相同的学习策
略。我们对预测序列定义一个交叉熵损失函数,然后用梯度下降
算法和反向传播算法来最小化损失函数。同时对编码器和解码器
进行训练,使得它们都学习到相同的上下文向量表示。
1.5 Recap & Basic NMT Example
注意输入和输出的长度之间是没有任何联系的;模型的输入句子
可以是任意长度的,模型的输出句子可以是任意长度的。然而,
已经知道 Seq2Seq 模型在输入句子很长的情况下效果会变得很
差,LSTM 在实际使用中有一系列的限制。
让 我 们 回 顾 一 下 Seq2Seq 模 型 为 了 将 英 语 “what is your
name?”翻译为法语“comment t’appelles tu”的例子。首先,
我们从四个 one-hot 向量输入开始。这些输入需要或者不需要
(对翻译任务,一般需要)用一个稠密的词向量表示。然后,一
个层叠 LSTM 反向读取输入序列,将其编码为一个上下文向
量。这个上下文向量是一个向量空间表示,表示“询问某人他们
的名字”(输入的英文句子)的意思。我们运行这个网络的每一
层的每一个时间步,对最后一层的输出放到 softmax 函数中计
算,并生成我们第一个输出单词。这个单词作为网络下一个时间
步的 输入 ,并 且以这种方式 解码句 子“comment t’appelles
tu”的剩余部分。在反向传播期间,编码器的 LSTM 的权值被更
新,使得它能学习到更好的句子向量表示,同时训练解码器的
LSTM 权值,使得它能生成与上下文向量相关的正确语法的句
子。
❐ Figure 2: Example of a
Seq2Seq decoder network. This
decoder is decoding the context
vector for "what is your name" (see
Fig. 1 into its French translation,
"comment t ’ appeles tu?" Note the
special "GO" token used at the start
of generation, and that generation is
in the forward direction as opposed
to the input which is read in reverse.
Note also that the input and output
do not need to be the same length.
【 图 2:Seq2Seq 解 码 器 网 络 示
例 。 此 解 码 器 正 在 解 码 “ what is
your name”(参见图 1)的上下文
向量, 将其翻 译 为法 语 “comment
t'appelles tu?”注意在生成开始时
使用的特殊“GO”标记,并且该
生成是正向的,而不是反向读取的
输入。还要注意的是,输入和输出
不需要是相同的长度。】