Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
Dive-into-DL-PyTorch
提交
e28c7fb6
D
Dive-into-DL-PyTorch
项目概览
OpenDocCN
/
Dive-into-DL-PyTorch
通知
9
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Dive-into-DL-PyTorch
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
e28c7fb6
编写于
7月 05, 2019
作者:
S
ShusenTang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add 10.10
上级
b6b8b5b9
变更
5
展开全部
隐藏空白更改
内联
并排
Showing
5 changed file
with
778 addition
and
1 deletion
+778
-1
README.md
README.md
+2
-1
docs/chapter10_natural-language-processing/10.10_beam-search.md
...hapter10_natural-language-processing/10.10_beam-search.md
+72
-0
img/chapter10/10.10_beam_search.svg
img/chapter10/10.10_beam_search.svg
+294
-0
img/chapter10/10.10_s2s_prob1.svg
img/chapter10/10.10_s2s_prob1.svg
+205
-0
img/chapter10/10.10_s2s_prob2.svg
img/chapter10/10.10_s2s_prob2.svg
+205
-0
未找到文件。
README.md
浏览文件 @
e28c7fb6
...
...
@@ -97,7 +97,8 @@ Dive into Deep Learning with PyTorch.
[
10.6 求近义词和类比词
](
https://github.com/ShusenTang/Dive-into-DL-PyTorch/blob/master/docs/chapter10_natural-language-processing/10.6_similarity-analogy.md
)
[
10.7 文本情感分类:使用循环神经网络
](
https://github.com/ShusenTang/Dive-into-DL-PyTorch/blob/master/docs/chapter10_natural-language-processing/10.7_sentiment-analysis-rnn.md
)
[
10.8 文本情感分类:使用卷积神经网络(textCNN)
](
https://github.com/ShusenTang/Dive-into-DL-PyTorch/blob/master/docs/chapter10_natural-language-processing/10.8_sentiment-analysis-cnn.md
)
[
10.9 编码器—解码器(seq2seq)
](
https://github.com/ShusenTang/Dive-into-DL-PyTorch/blob/master/docs/chapter10_natural-language-processing/10.9_seq2seq.md
)
[
10.9 编码器—解码器(seq2seq)
](
https://github.com/ShusenTang/Dive-into-DL-PyTorch/blob/master/docs/chapter10_natural-language-processing/10.9_seq2seq.md
)
[
10.10 束搜索
](
https://github.com/ShusenTang/Dive-into-DL-PyTorch/blob/master/docs/chapter10_natural-language-processing/10.10_beam-search.md
)
...
...
docs/chapter10_natural-language-processing/10.10_beam-search.md
0 → 100644
浏览文件 @
e28c7fb6
# 10.10 束搜索
上一节介绍了如何训练输入和输出均为不定长序列的编码器—解码器。本节我们介绍如何使用编码器—解码器来预测不定长的序列。
上一节里已经提到,在准备训练数据集时,我们通常会在样本的输入序列和输出序列后面分别附上一个特殊符号"
<
eos
>
"表示序列的终止。我们在接下来的讨论中也将沿用上一节的全部数学符号。为了便于讨论,假设解码器的输出是一段文本序列。设输出文本词典$\mathcal{Y}$(包含特殊符号"
<
eos
>
")的大小为$\left|\mathcal{Y}\right|$,输出序列的最大长度为$T'$。所有可能的输出序列一共有$\mathcal{O}(\left|\mathcal{Y}\right|^{T'})$种。这些输出序列中所有特殊符号"
<
eos
>
"后面的子序列将被舍弃。
## 10.10.1 贪婪搜索
让我们先来看一个简单的解决方案:贪婪搜索(greedy search)。对于输出序列任一时间步$t'$,我们从$|
\m
athcal{Y}|$个词中搜索出条件概率最大的词
$$
y _ { t ^ {
\p
rime } } =
\u
nderset { y
\i
n
\m
athcal { Y } } {
\o
peratorname { argmax } } P
\l
eft( y | y _ { 1 } ,
\l
dots , y _ { t ^ {
\p
rime } - 1 } , c
\r
ight)
$$
作为输出。一旦搜索出"
<
eos
>
"符号,或者输出序列长度已经达到了最大长度$T'$,便完成输出。
我们在描述解码器时提到,基于输入序列生成输出序列的条件概率是$
\p
rod_{t'=1}^{T'} P(y_{t'}
\m
id y_1,
\l
dots, y_{t'-1},
\b
oldsymbol{c})$。我们将该条件概率最大的输出序列称为最优输出序列。而贪婪搜索的主要问题是不能保证得到最优输出序列。
下面来看一个例子。假设输出词典里面有“A”“B”“C”和“
<
eos
>
”这4个词。图10.9中每个时间步下的4个数字分别代表了该时间步生成“A”“B”“C”和“
<
eos
>
”这4个词的条件概率。在每个时间步,贪婪搜索选取条件概率最大的词。因此,图10.9中将生成输出序列“A”“B”“C”“
<
eos
>
”。该输出序列的条件概率是$0.5
\t
imes0.4
\t
imes0.4
\t
imes0.6 = 0.048$。
<div
align=
center
>
<img
width=
"200"
src=
"../../img/chapter10/10.10_s2s_prob1.svg"
/>
</div>
<div
align=
center
>
图10.9 在每个时间步,贪婪搜索选取条件概率最大的词
</div>
接下来,观察图10.10演示的例子。与图10.9中不同,图10.10在时间步2中选取了条件概率第二大的词“C”。由于时间步3所基于的时间步1和2的输出子序列由图10.9中的“A”“B”变为了图10.10中的“A”“C”,图10.10中时间步3生成各个词的条件概率发生了变化。我们选取条件概率最大的词“B”。此时时间步4所基于的前3个时间步的输出子序列为“A”“C”“B”,与图10.9中的“A”“B”“C”不同。因此,图10.10中时间步4生成各个词的条件概率也与图10.9中的不同。我们发现,此时的输出序列“A”“C”“B”“
<
eos
>
”的条件概率是$0.5\times0.3\times0.6\times0.6=0.054$,大于贪婪搜索得到的输出序列的条件概率。因此,贪婪搜索得到的输出序列“A”“B”“C”“
<
eos
>
”并非最优输出序列。
<div
align=
center
>
<img
width=
"200"
src=
"../../img/chapter10/10.10_s2s_prob2.svg"
/>
</div>
<div
align=
center
>
图10.10 在时间步2选取条件概率第二大的词“C”
</div>
## 10.10.2 穷举搜索
如果目标是得到最优输出序列,我们可以考虑穷举搜索(exhaustive search):穷举所有可能的输出序列,输出条件概率最大的序列。
虽然穷举搜索可以得到最优输出序列,但它的计算开销$
\m
athcal{O}(
\l
eft|
\m
athcal{Y}
\r
ight|^{T'})$很容易过大。例如,当$|
\m
athcal{Y}|=10000$且$T'=10$时,我们将评估$10000^{10} = 10^{40}$个序列:这几乎不可能完成。而贪婪搜索的计算开销是$
\m
athcal{O}(
\l
eft|
\m
athcal{Y}
\r
ight|T')$,通常显著小于穷举搜索的计算开销。例如,当$|
\m
athcal{Y}|=10000$且$T'=10$时,我们只需评估$10000
\t
imes10=10^5$个序列。
## 10.10.3 束搜索
束搜索(beam search)是对贪婪搜索的一个改进算法。它有一个束宽(beam size)超参数。我们将它设为$k$。在时间步1时,选取当前时间步条件概率最大的$k$个词,分别组成$k$个候选输出序列的首词。在之后的每个时间步,基于上个时间步的$k$个候选输出序列,从$k
\l
eft|
\m
athcal{Y}
\r
ight|$个可能的输出序列中选取条件概率最大的$k$个,作为该时间步的候选输出序列。最终,我们从各个时间步的候选输出序列中筛选出包含特殊符号“
<
eos
>
”的序列,并将它们中所有特殊符号“
<
eos
>
”后面的子序列舍弃,得到最终候选输出序列的集合。
<div
align=
center
>
<img
width=
"500"
src=
"../../img/chapter10/10.10_beam_search.svg"
/>
</div>
<div
align=
center
>
图10.11 束搜索的过程。束宽为2,输出序列最大长度为3。候选输出序列有A、C、AB、CE、ABD和CED
</div>
图10.11通过一个例子演示了束搜索的过程。假设输出序列的词典中只包含5个元素,即$
\m
athcal{Y} =
\{
A, B, C, D, E
\}
$,且其中一个为特殊符号“
<
eos
>
”。设束搜索的束宽等于2,输出序列最大长度为3。在输出序列的时间步1时,假设条件概率$P(y_1
\m
id
\b
oldsymbol{c})$最大的2个词为$A$和$C$。我们在时间步2时将对所有的$y_2
\i
n
\m
athcal{Y}$都分别计算$P(y_2
\m
id A,
\b
oldsymbol{c})$和$P(y_2
\m
id C,
\b
oldsymbol{c})$,并从计算出的10个条件概率中取最大的2个,假设为$P(B
\m
id A,
\b
oldsymbol{c})$和$P(E
\m
id C,
\b
oldsymbol{c})$。那么,我们在时间步3时将对所有的$y_3
\i
n
\m
athcal{Y}$都分别计算$P(y_3
\m
id A, B,
\b
oldsymbol{c})$和$P(y_3
\m
id C, E,
\b
oldsymbol{c})$,并从计算出的10个条件概率中取最大的2个,假设为$P(D
\m
id A, B,
\b
oldsymbol{c})$和$P(D
\m
id C, E,
\b
oldsymbol{c})$。如此一来,我们得到6个候选输出序列:(1)$A$;(2)$C$;(3)$A$、$B$;(4)$C$、$E$;(5)$A$、$B$、$D$和(6)$C$、$E$、$D$。接下来,我们将根据这6个序列得出最终候选输出序列的集合。
在最终候选输出序列的集合中,我们取以下分数最高的序列作为输出序列:
$$
\f
rac{1}{L^
\a
lpha}
\l
og P(y_1,
\l
dots, y_{L}) =
\f
rac{1}{L^
\a
lpha}
\s
um_{t'=1}^L
\l
og P(y_{t'}
\m
id y_1,
\l
dots, y_{t'-1},
\b
oldsymbol{c}),$$
其中$L$为最终候选序列长度,$
\a
lpha$一般可选为0.75。分母上的$L^
\a
lpha$是为了惩罚较长序列在以上分数中较多的对数相加项。分析可知,束搜索的计算开销为$
\m
athcal{O}(k
\l
eft|
\m
athcal{Y}
\r
ight|T')$。这介于贪婪搜索和穷举搜索的计算开销之间。此外,贪婪搜索可看作是束宽为1的束搜索。束搜索通过灵活的束宽$k$来权衡计算开销和搜索质量。
## 小结
*
预测不定长序列的方法包括贪婪搜索、穷举搜索和束搜索。
*
束搜索通过灵活的束宽来权衡计算开销和搜索质量。
-----------
> 注:本节与原书基本相同,[原书传送门](https://zh.d2l.ai/chapter_natural-language-processing/beam-search.html)
img/chapter10/10.10_beam_search.svg
0 → 100644
浏览文件 @
e28c7fb6
此差异已折叠。
点击以展开。
img/chapter10/10.10_s2s_prob1.svg
0 → 100644
浏览文件 @
e28c7fb6
此差异已折叠。
点击以展开。
img/chapter10/10.10_s2s_prob2.svg
0 → 100644
浏览文件 @
e28c7fb6
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录