注意力机制
编码器输出的每个隐藏状态和注意力机制给出的权重的加权和就是上下文向量,这样就可以不简单的使用最后一个隐藏层状态作为全部语义表示而是用到了编码器的全部隐藏层状态信息,并且在不同时刻我们生成的权重也不同,这表示我们在不同时刻生成的权重也是不同的。
如何生成注意力分数?
从概率上来说非常好的一种方法是基于采样的方法,也就是连续采样,有时也被称为祖先采样,当我们已经生成了t-1个词的时候,接下来,基于我们的模型,得到第t个词的概率分布,然后我们根据模型的概率分布一次采样一个词,这样一个词一个词的生成。直至生成结尾处的结尾符号。也就是我们生成一个词后,基于我们目前所得,按概率分布对下一个词进行采样,并一直重复下去。这种方法理论上得到的是一个无偏且渐进准确的模型,但在实践中,因为其方差非常大,每次解码同一个句子时得到的结果不相同
实际中用到的方法:
贪婪搜索:
但是无法保证整体生成最好的句子因为我们使用的是贪婪决策,每一步都可能犯错,因此高效但不是最优的
beam search