NLP领域中Beam Search直观解释

文摘   科技   2024-09-03 07:44   江苏  
点击蓝字
 
关注我们










01


引言



许多 NLP 应用(如机器翻译、聊天机器人、文本摘要和语言模型)都会生成一些文本作为其输出。此外,图像字幕或自动语音识别(即语音到文本)等应用也会输出文本,尽管它们可能不被视为纯粹的 NLP 应用。
所有这些应用程序都会使用几种常用算法,作为产生最终输出结果的最后一步:
  • 贪婪搜索就是这样一种算法。由于它简单快捷,因此经常被使用。

  • 另一种方法是使用光束搜索(Beam Search)。它非常受欢迎,虽然它需要更多的计算,但通常能得到更好的结果。

在本文中,我将探讨 Beam Search光速搜索算法,并解释其使用原因和工作原理。作为对比,我们将简要介绍一下 "贪婪搜索",以便了解 Beam Search 是如何对其进行改进的。






02


NLP模型如何产生输出?


我们首先要了解一下 NLP 模型如何生成输出结果,这样才能理解光束搜索和贪婪搜索的作用。
让我们以序列到序列模型为例。这些模型经常用于机器翻译等应用。如下所示:

图1:用于机器翻译的序列到序列模型


例如,如果该模型用于将中文翻译成英语,那么它将以源语言中的句子(如中文中的 "我爱你")作为输入,并输出目标语言中的相应句子(如英语中的 "I love you")。

文本是由单词(或字符)组成的序列,而 NLP 模型构建的词汇包含源语言和目标语言中的全部单词。该模型将源句子作为输入,然后通过嵌入层和编码器。然后,编码器输出编码表示,紧凑地捕捉输入的基本特征。然后,该表示法将与"START"标记一起输入解码器,作为其输出的种子。解码器利用这些信息生成自己的输出,即目标语言中句子的编码表示。

然后通过输出层,输出层可能由一些线性层和一个 Softmax 层组成。线性层在输出序列的每个位置输出词汇表中每个单词出现可能性的分数。然后,Softmax 将这些分数转换为概率。

图2:词汇表中每个字符在输出序列中每个位置的概率

当然,我们的最终目标不是这些概率,而是最终的目标句子。为了实现这一目标,模型必须决定它应该预测目标序列中每个位置的哪个单词。

图3:模型根据概率预测输出句子

模型根据概率预测输出的句子,我们将在下文重点解释模型是如何做到的?





03


 贪婪搜索算法


一个相当明显的方法就是简单地选择每个位置上概率最高的单词,然后进行预测。这种方法计算迅速,易于理解,而且往往能得出正确的结果。

图4:贪婪搜索
事实上,"贪婪搜索 "非常容易理解,我们不需要花更多时间来解释。但我们能做得更好吗?终于说到正题了!




04


  光束搜索算法


光束搜索Beam Search 与 贪婪搜索Greedy Search 相比有两点改进。
  • 使用贪婪搜索时,我们只提取每个位置上的最佳单词。相比之下,Beam Search光束搜索扩大了这一范围,取最佳的N 个词。
  • 使用贪婪搜索时,我们孤立地考虑每个位置。一旦我们确定了该位置的最佳单词,我们就不会再检查它之前(即前一个位置)或之后的单词。与此相反,Beam Search 挑选出N个最佳序列,并考虑前面所有单词与当前位置单词的组合概率。

换句话说,光束搜索算法比贪婪搜索算法更加宽广一些,这也是它的名字由来。超参数N被称为光束宽度。

直观地说,这比贪婪搜索的结果更好。因为我们真正感兴趣的是最好的完整句子,而如果我们只挑选每个位置上最好的单个词,我们可能会错过这一点。




05


  光束搜索的作用


让我们举一个简单的例子,光速Beam的宽度为 2,如下所示:
图5:光束搜索示例,width = 2

  • 第一位置

考虑模型在第一个位置的输出。它从"<START>"标记开始,获取每个单词的概率。现在,它会选择该位置上的两个最佳字符,例如 "A "和 "C"。
  • 第二位置
在第二个位置时,它会重新运行模型两次,通过固定第一个位置的可能字符来生成概率。换句话说,它将第一个位置上的字符限定为 "A "或 "C",并生成两组概率的两个分支。具有第一组概率的分支对应于位置 1 中的 "A",而具有第二组概率的分支对应于位置 1 中的 "C"。
现在,它会根据前两个字符的综合概率,从两组概率中选出两个最佳字符对。上述例子中选择的两个字符对为"AB"和 "AE"。
  • 第三位置
到第三个位置时,它会重复这一过程。它将前两个位置限定为 "AB"或 "AE",重新运行模型两次,并再次生成两组概率。
再次,它将根据两组概率中前三个字符的综合概率,选出两个最佳字符的三连组合。因此,我们现在有了前三个位置的两个最佳字符组合,例如 "ABC "和 "AED"。
  • 重复

它将继续这样做,直到为某个位置挑选出一个"END"标记作为最佳字符,从而结束该序列分支。
最后,它得出两个最佳序列,并预测出总概率较高的序列。






06


  光束搜索工作原理

现在,我们从概念上理解了光束搜索Beam Search。让我们再深入一层,了解其工作原理的细节。我们将继续使用相同的示例,并使用宽度为2的光束宽度。
继续我们的序列到序列模型,编码器和解码器很可能是由一些 LSTM 层组成的递归网络。或者,也可以使用Transformer而不是RNN来构建。

图6:基于 LSTM 的序列到序列模型
让我们重点关注解码器组件和相关的输出层。
  • 第一位置
在第一个step中,它使用编码器的输出和"START"标记的输入来生成第一个位置的字符概率。

图7:第一位置的字符概率
现在,它会选择概率最高的两个字符,例如 "A"和 "C"。
  • 第二位置
在第二个step中,它将使用编码器的输出运行解码器两次。在第一次解码器运行中,除了第一个位置的"START"标记外,它还强制第二个位置的输入为 "A"。在第二个解码器运行中,它强制第二个位置的输入为 "C"。
图8:第二位置的字符概率

它会生成第二个位置的字符概率。但这些是单个字符的概率。它需要计算前两个位置的字符对的综合概率。“AB"字符对的概率是字符"A"出现在第一个位置的概率乘以 "B"出现在第二个位置的概率,前提是 "A"已经固定在第一个位置。下面的示例展示了计算过程。

图9:计算前两个位置上字符对的概率

它在两次解码器运行中都是这样操作的,并挑选出两次运行中综合概率最高的字符对。因此,它会选择 "AB "和 "AE"。

图10:该模型根据综合概率选出两个最佳字符对

  • 第三位置

在第三个step中,解码器再次运行两次。在第一次运行解码器时,除了在第一位置输入"START"标记外,还强制第二位置和第三位置的输入分别为 "A"和 "B"。在第二次解码器运行中,它强制将第二个位置和第三个位置的输入分别设为 "A"和 "E"。

图11:第三个位置的字符概率


它计算前三个位置的字符三的综合概率。


图12:计算前三个位置的字符三的概率

它在两次运行中选出两个最好的,因此选出了 "ABC "和 "AED"。

图13:模型根据综合概率选出两个最佳字符三元组

  • 重复


它会重复这一过程,直到生成以"END"标记结尾的最佳序列。然后,它选择综合概率最高的序列进行最终的预测输出。







07


  总结

本文让我们了解了光束搜索Beam Search 的功能、工作原理以及为什么它能提供更好的结果。但这是以增加计算量和延长执行时间为代价的。因此,我们应该权衡这种策略对于我们应用程序的用例是否合理。
您学废了吗?






点击上方小卡片关注我




添加个人微信,进专属粉丝群!


AI算法之道
一个专注于深度学习、计算机视觉和自动驾驶感知算法的公众号,涵盖视觉CV、神经网络、模式识别等方面,包括相应的硬件和软件配置,以及开源项目等。
 最新文章