01
引言
贪婪搜索就是这样一种算法。由于它简单快捷,因此经常被使用。
另一种方法是使用光束搜索(Beam Search)。它非常受欢迎,虽然它需要更多的计算,但通常能得到更好的结果。
在本文中,我将探讨 Beam Search光速搜索算法,并解释其使用原因和工作原理。作为对比,我们将简要介绍一下 "贪婪搜索",以便了解 Beam Search 是如何对其进行改进的。
02
NLP模型如何产生输出?
图1:用于机器翻译的序列到序列模型
例如,如果该模型用于将中文翻译成英语,那么它将以源语言中的句子(如中文中的 "我爱你")作为输入,并输出目标语言中的相应句子(如英语中的 "I love you")。
文本是由单词(或字符)组成的序列,而 NLP 模型构建的词汇包含源语言和目标语言中的全部单词。该模型将源句子作为输入,然后通过嵌入层和编码器。然后,编码器输出编码表示,紧凑地捕捉输入的基本特征。然后,该表示法将与"START"标记一起输入解码器,作为其输出的种子。解码器利用这些信息生成自己的输出,即目标语言中句子的编码表示。
然后通过输出层,输出层可能由一些线性层和一个 Softmax 层组成。线性层在输出序列的每个位置输出词汇表中每个单词出现可能性的分数。然后,Softmax 将这些分数转换为概率。
图2:词汇表中每个字符在输出序列中每个位置的概率
图3:模型根据概率预测输出句子
模型根据概率预测输出的句子,我们将在下文重点解释模型是如何做到的?
03
贪婪搜索算法
一个相当明显的方法就是简单地选择每个位置上概率最高的单词,然后进行预测。这种方法计算迅速,易于理解,而且往往能得出正确的结果。
04
光束搜索算法
使用贪婪搜索时,我们只提取每个位置上的最佳单词。相比之下,Beam Search光束搜索扩大了这一范围,取最佳的N 个词。 使用贪婪搜索时,我们孤立地考虑每个位置。一旦我们确定了该位置的最佳单词,我们就不会再检查它之前(即前一个位置)或之后的单词。与此相反,Beam Search 挑选出N个最佳序列,并考虑前面所有单词与当前位置单词的组合概率。
换句话说,光束搜索算法比贪婪搜索算法更加宽广一些,这也是它的名字由来。超参数N被称为光束宽度。
直观地说,这比贪婪搜索的结果更好。因为我们真正感兴趣的是最好的完整句子,而如果我们只挑选每个位置上最好的单个词,我们可能会错过这一点。
05
光束搜索的作用
第一位置
第二位置
第三位置
重复
06
光束搜索工作原理
第一位置
第二位置
它会生成第二个位置的字符概率。但这些是单个字符的概率。它需要计算前两个位置的字符对的综合概率。“AB"字符对的概率是字符"A"出现在第一个位置的概率乘以 "B"出现在第二个位置的概率,前提是 "A"已经固定在第一个位置。下面的示例展示了计算过程。
图9:计算前两个位置上字符对的概率
它在两次解码器运行中都是这样操作的,并挑选出两次运行中综合概率最高的字符对。因此,它会选择 "AB "和 "AE"。
图10:该模型根据综合概率选出两个最佳字符对
第三位置
在第三个step中,解码器再次运行两次。在第一次运行解码器时,除了在第一位置输入"START"标记外,还强制第二位置和第三位置的输入分别为 "A"和 "B"。在第二次解码器运行中,它强制将第二个位置和第三个位置的输入分别设为 "A"和 "E"。
图11:第三个位置的字符概率
它计算前三个位置的字符三的综合概率。
图12:计算前三个位置的字符三的概率
它在两次运行中选出两个最好的,因此选出了 "ABC "和 "AED"。
图13:模型根据综合概率选出两个最佳字符三元组
重复
它会重复这一过程,直到生成以"END"标记结尾的最佳序列。然后,它选择综合概率最高的序列进行最终的预测输出。
07
总结
点击上方小卡片关注我
添加个人微信,进专属粉丝群!