9.8. 束搜索¶ Open the notebook in SageMaker Studio Lab
在 9.7节中,我们逐个预测输出序列, 直到预测序列中出现特定的序列结束词元“<eos>”。 本节将首先介绍贪心搜索(greedy search)策略, 并探讨其存在的问题,然后对比其他替代策略: 穷举搜索(exhaustive search)和束搜索(beam search)。
在正式介绍贪心搜索之前,我们使用与 9.7节中
相同的数学符号定义搜索问题。
在任意时间步
9.8.1. 贪心搜索¶
首先,让我们看看一个简单的策略:贪心搜索, 该策略已用于
9.7节的序列预测。
对于输出序列的每一时间步
一旦输出序列包含了“<eos>”或者达到其最大长度
图9.8.1 在每个时间步,贪心搜索选择具有最高条件概率的词元¶
如 图9.8.1中,
假设输出中有四个词元“A”“B”“C”和“<eos>”。
每个时间步下的四个数字分别表示在该时间步
生成“A”“B”“C”和“<eos>”的条件概率。
在每个时间步,贪心搜索选择具有最高条件概率的词元。 因此,将在
图9.8.1中 预测输出序列“A”“B”“C”和“<eos>”。
这个输出序列的条件概率是
那么贪心搜索存在的问题是什么呢? 现实中,最优序列(optimal
sequence)应该是最大化
图9.8.2 在时间步2,选择具有第二高条件概率的词元“C”(而非最高条件概率的词元)¶
图9.8.2中的另一个例子阐述了这个问题。 与
图9.8.1不同,在时间步
9.8.2. 穷举搜索¶
如果目标是获得最优序列, 我们可以考虑使用穷举搜索(exhaustive search): 穷举地列举所有可能的输出序列及其条件概率, 然后计算输出条件概率最高的一个。
虽然我们可以使用穷举搜索来获得最优序列,
但其计算量
9.8.3. 束搜索¶
那么该选取哪种序列搜索策略呢? 如果精度最重要,则显然是穷举搜索。 如果计算成本最重要,则显然是贪心搜索。 而束搜索的实际应用则介于这两个极端之间。
束搜索(beam search)是贪心搜索的一个改进版本。
它有一个超参数,名为束宽(beam size)
图9.8.3 束搜索过程(束宽:2,输出序列的最大长度:3)。候选输出序列是
图9.8.3演示了束搜索的过程。
假设输出的词表只包含五个元素:
从这十个值中选择最大的两个,
比如
从这十个值中选择最大的两个,
即
最后,基于这六个序列(例如,丢弃包括“<eos>”和之后的部分), 我们获得最终候选输出序列集合。 然后我们选择其中条件概率乘积最高的序列作为输出序列:
其中
束搜索的计算量为
9.8.4. 小结¶
序列搜索策略包括贪心搜索、穷举搜索和束搜索。
贪心搜索所选取序列的计算量最小,但精度相对较低。
穷举搜索所选取序列的精度最高,但计算量最大。
束搜索通过灵活选择束宽,在正确率和计算代价之间进行权衡。