语言模型的解码
△:在讲义中这部分内容是神经机器翻译NMT中,我认为这个适用于所有语言模型所以就单列出来了
(1)贪心解码:每一步都取最可能的单词,用前一步的输出作为下一步的输入(存在问题:有一个预测偏差,会导致后面的生成不可挽回,最终结果不尽人意)
(2)穷举解码:顾名思义,尝试计算每一个可能的序列y,取概率最大的一个(显而易见,复杂性太高)
(3)波束搜索解码:在解码器的每一步上,跟踪k个最可能的假设,假设的得分是其对数概率,我们搜索得分较高的假设,跟踪每一步的前k个假设
Attention机制
seq2seq with attention
(1)序列-序列模型(又叫seq2seq模型或Encoder-Decoder模型):一个神经网络接受输入并产生神经表示(编码),另一个网络基于该神经表示产生输出(解码)
(CNN、RNN、LSTM、AE等其实都可以归为seq2seq模型)
注意力机制最早用在seq2seq模型上,这里我们也以seq2seq模型中的注意力机制来分析
(2)核心思想:在解码器的每一步上,使用与编码器的直接连接来关注源序列的特定部分
(3)理解
在文本处理领域,一类常见的任务就是由一个句子(Source)生成另一个句子(Target)
Source经过Encoder生成中间的语义编码C,C经过Decoder时,先根据\(C\)生成 \(y_1\) ,再根据 \(C,y_1\) 生成 \(y_2\) ,以此类推
传统的循环神经网络中,\(y_1,y_2,y_3\)的计算都是基于同一个C。深入思考一下,发现这可能并不是最好的方案,因为 Source 中不同单词对 \(y_1,y_2,y_3\) 的影响是不同的,所以,很自然地就有了如下思路:对 \(y_1\) 使用\(C_1\),对 \(y_2\) 使用 \(C_2\cdots\)
权重向量\(a_t\)即为下图中的Attention Output,接下来会讲具体是怎么计算的
(4)对步骤的具体计算
在第t个时间步长(生成第t个单词时)下,会进行如下运算:
编码器的隐藏层: \(h_1,\cdots,h_N\)
解码器的隐藏层: \(s_t\)
那么我们的注意力得分 \(e^t=[s_t^Th_1,\cdots,s_t^Th_N]\)
那么我们的注意力分布 \(a^t=softmax(e^t)\)
那么我们的注意力输出 \(a_t=\displaystyle\sum_{i=1}^Na_i^th_i\) (此即为权重向量)
最后将注意力输出与解码器的隐藏层连接起来,按照无注意力的seq2seq模型处理
(5)意义
①注意力机制显著提高了NMT的性能
②提供了一个更加“拟人化”的MT模型
③解决了瓶颈问题
④有助于消除梯度问题
⑤提供了可解释性
attention variants
(1)种类:
①Basic dot-product attention: \(e_i=s^Th_i\)
②Multiplicative attention: \(e_i=s^TWh_i\)
③Reduced-rank multiplicative attention: \(e_i=s^T(U^V)h_i=(Us)^T(Vh_i)\)
④Additive attention: \(e^T=v^Ttanh(W_1h_i+W_2s)\)
(2)注意力机制是一种通用的学习技巧,更通用定义为:给定一组向量值和一个向量查询,注意力是一种根据查询计算值的加权和的技术。