|
21 | 21 |
|
22 | 22 | 当输⼊和输出都是不定⻓序列时,我们可以使⽤编码器—解码器(encoder-decoder)或者seq2seq模型。**序列到序列模型,简称seq2seq模型。这两个模型本质上都⽤到了两个循环神经⽹络,分别叫做编码器和解码器。编码器⽤来分析输⼊序列,解码器⽤来⽣成输出序列。两 个循环神经网络是共同训练的。** |
23 | 23 |
|
24 | | -下图描述了使⽤编码器—解码器将上述英语句⼦翻译成法语句⼦的⼀种⽅法。在训练数据集中,我们可以在每个句⼦后附上特殊符号“<eos>”(end of sequence)以表⽰序列的终⽌。编码器每个时间步的输⼊依次为英语句⼦中的单词、标点和特殊符号“<eos>”。下图中使⽤了编码器在 最终时间步的隐藏状态作为输⼊句⼦的表征或编码信息。解码器在各个时间步中使⽤输⼊句⼦的 编码信息和上个时间步的输出以及隐藏状态作为输⼊。我们希望解码器在各个时间步能正确依次 输出翻译后的法语单词、标点和特殊符号“<eos>”。需要注意的是,解码器在最初时间步的输⼊ ⽤到了⼀个表⽰序列开始的特殊符号“<bos>”(beginning of sequence)。 |
| 24 | +下图描述了使⽤编码器—解码器将上述英语句⼦翻译成法语句⼦的⼀种⽅法。在训练数据集中,我们可以在每个句⼦后附上特殊符号“\<eos>”(end of sequence)以表⽰序列的终⽌。编码器每个时间步的输⼊依次为英语句⼦中的单词、标点和特殊符号“\<eos>”。下图中使⽤了编码器在 最终时间步的隐藏状态作为输⼊句⼦的表征或编码信息。解码器在各个时间步中使⽤输⼊句⼦的 编码信息和上个时间步的输出以及隐藏状态作为输⼊。我们希望解码器在各个时间步能正确依次 输出翻译后的法语单词、标点和特殊符号“\<eos>”。需要注意的是,解码器在最初时间步的输⼊ ⽤到了⼀个表⽰序列开始的特殊符号“<bos>”(beginning of sequence)。 |
25 | 25 |
|
26 | 26 |  |
27 | 27 |
|
|
77 | 77 |
|
78 | 78 | 以上介绍了如何训练输⼊和输出均为不定⻓序列的编码器—解码器。本节我们介绍如何使⽤编码器—解码器来预测不定⻓的序列。 |
79 | 79 |
|
80 | | -在准备训练数据集时,我们通常会在样本的输⼊序列和输出序列后面分别附上⼀个特殊符号“<eos>”表⽰序列的终⽌。我们在接下来的讨论中也将沿⽤上⼀节的全部数学符号。为了便于讨论,假设解码器的输出是⼀段⽂本序列。设输出⽂本词典Y(包含特殊符号“<eos>”)的⼤小为|Y|,输出序列的最⼤⻓度为T′。所有可能的输出序列⼀共有 种。这些输出序列中所有特殊符号“<eos>”后⾯的⼦序列将被舍弃。 |
| 80 | +在准备训练数据集时,我们通常会在样本的输⼊序列和输出序列后面分别附上⼀个特殊符号“\<eos>”表⽰序列的终⽌。我们在接下来的讨论中也将沿⽤上⼀节的全部数学符号。为了便于讨论,假设解码器的输出是⼀段⽂本序列。设输出⽂本词典Y(包含特殊符号“\<eos>”)的⼤小为|Y|,输出序列的最⼤⻓度为T′。所有可能的输出序列⼀共有 种。这些输出序列中所有特殊符号“\<eos>”后⾯的⼦序列将被舍弃。 |
81 | 81 |
|
82 | 82 |
|
83 | 83 |
|
|
87 | 87 |
|
88 | 88 |  |
89 | 89 |
|
90 | | -作为输出。⼀旦搜索出“<eos>”符号,或者输出序列⻓度已经达到了最⼤⻓度T′,便完成输出。我们在描述解码器时提到,基于输⼊序列⽣成输出序列的条件概率是。我们将该条件概率最⼤的输出序列称为最优输出序列。而贪婪搜索的主要问题是不能保证得到最优输出序列。 |
| 90 | +作为输出。⼀旦搜索出“\<eos>”符号,或者输出序列⻓度已经达到了最⼤⻓度T′,便完成输出。我们在描述解码器时提到,基于输⼊序列⽣成输出序列的条件概率是。我们将该条件概率最⼤的输出序列称为最优输出序列。而贪婪搜索的主要问题是不能保证得到最优输出序列。 |
91 | 91 |
|
92 | | -下⾯来看⼀个例⼦。假设输出词典⾥⾯有“A”“B”“C”和“<eos>”这4个词。下图中每个时间步 |
93 | | -下的4个数字分别代表了该时间步⽣成“A”“B”“C”和“<eos>”这4个词的条件概率。在每个时间步,贪婪搜索选取条件概率最⼤的词。因此,图10.9中将⽣成输出序列“A”“B”“C”“<eos>”。该输出序列的条件概率是0.5 × 0.4 × 0.4 × 0.6 = 0.048。 |
| 92 | +下⾯来看⼀个例⼦。假设输出词典⾥⾯有“A”“B”“C”和“\<eos>”这4个词。下图中每个时间步 |
| 93 | +下的4个数字分别代表了该时间步⽣成“A”“B”“C”和“\<eos>”这4个词的条件概率。在每个时间步,贪婪搜索选取条件概率最⼤的词。因此,图10.9中将⽣成输出序列“A”“B”“C”“\<eos>”。该输出序列的条件概率是0.5 × 0.4 × 0.4 × 0.6 = 0.048。 |
94 | 94 |
|
95 | 95 |  |
96 | 96 |
|
97 | 97 | 接下来,观察下面演⽰的例⼦。与上图中不同,在时间步2中选取了条件概率第⼆⼤的词“C” |
98 | | -。由于时间步3所基于的时间步1和2的输出⼦序列由上图中的“A”“B”变为了下图中的“A”“C”,下图中时间步3⽣成各个词的条件概率发⽣了变化。我们选取条件概率最⼤的词“B”。此时时间步4所基于的前3个时间步的输出⼦序列为“A”“C”“B”,与上图中的“A”“B”“C”不同。因此,下图中时间步4⽣成各个词的条件概率也与上图中的不同。我们发现,此时的输出序列“A”“C”“B”“<eos>”的条件概率是0.5 × 0.3 × 0.6 × 0.6 = 0.054,⼤于贪婪搜索得到的输出序列的条件概率。因此,贪婪搜索得到的输出序列“A”“B”“C”“<eos>”并⾮最优输出序列。 |
| 98 | +。由于时间步3所基于的时间步1和2的输出⼦序列由上图中的“A”“B”变为了下图中的“A”“C”,下图中时间步3⽣成各个词的条件概率发⽣了变化。我们选取条件概率最⼤的词“B”。此时时间步4所基于的前3个时间步的输出⼦序列为“A”“C”“B”,与上图中的“A”“B”“C”不同。因此,下图中时间步4⽣成各个词的条件概率也与上图中的不同。我们发现,此时的输出序列“A”“C”“B”“\<eos>”的条件概率是0.5 × 0.3 × 0.6 × 0.6 = 0.054,⼤于贪婪搜索得到的输出序列的条件概率。因此,贪婪搜索得到的输出序列“A”“B”“C”“\<eos>”并⾮最优输出序列。 |
99 | 99 |
|
100 | 100 |  |
101 | 101 |
|
|
111 | 111 |
|
112 | 112 | ### 5.3 束搜索 |
113 | 113 |
|
114 | | -束搜索(beam search)是对贪婪搜索的⼀个改进算法。它有⼀个束宽(beam size)超参数。我们将它设为 k。在时间步 1 时,选取当前时间步条件概率最⼤的 k 个词,分别组成 k 个候选输出序列的⾸词。在之后的每个时间步,基于上个时间步的 k 个候选输出序列,从 k |Y| 个可能的输出序列中选取条件概率最⼤的 k 个,作为该时间步的候选输出序列。最终,我们从各个时间步的候选输出序列中筛选出包含特殊符号“<eos>”的序列,并将它们中所有特殊符号“<eos>”后⾯的⼦序列舍弃,得到最终候选输出序列的集合。 |
| 114 | +束搜索(beam search)是对贪婪搜索的⼀个改进算法。它有⼀个束宽(beam size)超参数。我们将它设为 k。在时间步 1 时,选取当前时间步条件概率最⼤的 k 个词,分别组成 k 个候选输出序列的⾸词。在之后的每个时间步,基于上个时间步的 k 个候选输出序列,从 k |Y| 个可能的输出序列中选取条件概率最⼤的 k 个,作为该时间步的候选输出序列。最终,我们从各个时间步的候选输出序列中筛选出包含特殊符号“\<eos>”的序列,并将它们中所有特殊符号“\<eos>”后⾯的⼦序列舍弃,得到最终候选输出序列的集合。 |
115 | 115 |
|
116 | 116 |  |
117 | 117 |
|
|
0 commit comments