Skip to content

Commit

Permalink
2pass seq2seq
Browse files Browse the repository at this point in the history
  • Loading branch information
astonzhang committed Oct 17, 2018
1 parent c8943aa commit cf2fe82
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 10 deletions.
2 changes: 2 additions & 0 deletions TERMINOLOGY.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

鞍点,saddle point

背景变量,context variable

背景窗口,context window

背景词,context word
Expand Down
15 changes: 8 additions & 7 deletions chapter_natural-language-processing/seq2seq.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
# 编码器—解码器(seq2seq)

我们已经看到如何处理不定长的输入。但在很多应用中,输入和输出都可以是不定长序列。以机器翻译为例,输入可以是一段不定长的英语文本序列,输出可以是一段不定长的法语文本序列,例如
我们已经在之前章节中处理并分析了不定长的输入序列。但在很多应用中,输入和输出都可以是不定长序列。以机器翻译为例,输入可以是一段不定长的英语文本序列,输出可以是一段不定长的法语文本序列,例如

> 英语输入:“They”、“are”、“watching”、“.”
> 法语输出:“Ils”、“regardent”、“.”
当输入输出都是不定长序列时,我们可以使用编码器—解码器(encoder-decoder)[1] 或者seq2seq模型 [2]。这两个模型本质上都用到了两个循环神经网络,分别叫做编码器和解码器。编码器对应输入序列,解码器对应输出序列
当输入输出都是不定长序列时,我们可以使用编码器—解码器(encoder-decoder)[1] 或者seq2seq模型 [2]。这两个模型本质上都用到了两个循环神经网络,分别叫做编码器和解码器。编码器用来分析输入序列,解码器用来生成输出序列

图10.8描述了使用编码器—解码器将上述英语句子翻译成法语句子的一种方法。在训练数据集中,我们可以在每个句子后附上特殊符号“<eos>”(end of sequence)表示序列的终止。编码器每个时间步的输入依次为英语句子中的单词、标点和特殊符号“<eos>”。图10.8使用了编码器在最终时间步的隐藏状态作为输入句子的编码信息。解码器在各个时间步中使用输入句子的编码信息和上个时间步的输出以及隐藏状态作为输入。
我们希望解码器在各个时间步能正确依次输出翻译后的法语单词、标点和特殊符号“<eos>”。
需要注意的是,解码器在最初时间步的输入用到了一个表示序列开始的特殊符号“<bos>”(beginning of sequence)。

![使用编码器—解码器将句子由英语翻译成法语。编码器和解码器分别为循环神经网络。](../img/seq2seq.svg)

接下来我们介绍编码器和解码器的定义
接下来我们分别介绍编码器和解码器的定义

## 编码器

Expand All @@ -24,7 +24,7 @@

$$\boldsymbol{h}_t = f(\boldsymbol{x}_t, \boldsymbol{h}_{t-1}). $$

这里特征向量$\boldsymbol{x}_t$既可以是[“循环神经网络”](../chapter_recurrent-neural-networks/rnn.md)一节中需要学习的词向量,也可以是[“求近似词和类比词”](similarity-analogy.md)一节里使用的预训练的词向量。假设输入序列的总时间步数为$T$。接下来编码器通过自定义函数$q$将各个时间步的隐藏状态变换为背景变量
接下来编码器通过自定义函数$q$将各个时间步的隐藏状态变换为背景变量

$$\boldsymbol{c} = q(\boldsymbol{h}_1, \ldots, \boldsymbol{h}_T).$$

Expand Down Expand Up @@ -61,18 +61,19 @@ $$

$$- \log\mathbb{P}(y_1, \ldots, y_{T'} \mid x_1, \ldots, x_T) = -\sum_{t'=1}^{T'} \log \mathbb{P}(y_{t'} \mid y_1, \ldots, y_{t'-1}, \boldsymbol{c}),$$

在模型训练中,我们通过最小化这个损失函数来得到模型参数
在模型训练中,所有输出序列损失的均值通常作为需要最小化的损失函数。在图10.8所描述的模型预测中,我们需要将解码器在上一个时间步的输出作为当前时间步的输入。与此不同,在训练中我们也可以将标签序列在上一个时间步的标签作为解码器在当前时间步的输入。这叫做强制教学(teacher forcing)

训练跟图10.8描述的预测不同的在于,在训练中我们知道解码器的输入。例如英语句子“They are watching.”对应的法语句子“Ils regardent.”作为标注是已知的。不同于预测时我们需要将解码器在上一个时刻的输出作为下一个时刻的输入,在训练中我们可以直接将标注输入到解码器中。这被称为强制教学(teacher forcing)。

## 小结

* 编码器-解码器(seq2seq)可以输入并输出不定长的序列。
* 编码器—解码器使用了两个循环神经网络。
* 在编码器—解码器的训练中,我们可以采用强制教学。


## 练习

* 除了机器翻译,你还能想到seq2seq的哪些应用
* 除了机器翻译,你还能想到编码器-解码器的哪些应用
* 有哪些方法可以设计解码器的输出层?


Expand Down
6 changes: 3 additions & 3 deletions img/seq2seq.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit cf2fe82

Please sign in to comment.