在seq2seq的模型中,通常都是Encoder+Decoder的形式.
在输出y的过程,每次给的是一个概率,比如:
这代表着为词a的概率是0.6,为词b的概率是0.2.我们可以每个时序都取最大概率的词,让后将他们组合起来,这有些像贪心算法.
但是我们知道贪心算法并不一定是最好的,举个例子:
Jane is visiting Africa in September.
Jane is going to be visiting Afica in September.
在翻译过程中第三个词going
出现的概率比visiting
的概率大,但是从整体上来看,第一个句子要比第二个句子更好.
Beam Search的做法很简单就是每次对概率排前几名的进行搜索.搜索的多少用超参数B来控制:
这样做的目的是让句子整体的概率最大化:
为了防止连乘造成数值下溢,取对数:
式子中的每个概率都是小于1的数,连乘越多最终的结果就越小,所以优化器趋向于选择较小的,为了避免这个问题,将式子除以,其中是个超参数,可以取0~1之间的值.