针对本文的翻译和解释有很多,具体的内容不在此处细说。我们这里主要讨论论文中的两个技术,分别是Pointer-generator network和Coverage mechanism。大多数博客对这两个技术进行了描述,但是为什么该技术可以解决论文中提出的问题,并没人进行过说明。我们详细的研究讨论了这两个技术,下面将进一步阐明。
Pointer-generator network:
如文中所述,该网络允许decoder在第步的输出来自于encoder的输入或一个固定的decoder词典。使用一个生成概率控制输出来自于哪个源。生成概率写作:
(1)
为encoder的第步的输出,为decoder第步的输出,是decoder输出对encoder输出的attention向量。decoder的的输出单词概率分布描述为:
(2)
此处我的理解是生成一个针对动态词典的输出,如果encoder的输入的词包含在固定的词典中,则取二者的一个加权和,如果只存在固定词典不存在在encoder的输入词中则只使用固定词典的logits加权值,否则只使用encoder输入词的加权值。这里就构造了一个包含固定词典和encoder输入的一个动态词典,decoder的输出依据上述加权值做softmax实现。
Coverage mechanism:
Coverage mechanism主要是为了解决重复attention问题,强化每一步的attention的对象为没有被强attention的词。
(3)
下面用一个例子展示:
encoder的输入 | |||
0.8 | 0.1 | 0.1 | |
0 | 0 | 0 | |
0 | 0 | 0 | |
0.2 | 0.6 | 0.2 | |
0.8 | 0.1 | 0.1 | |
0.2 | 0.1 | 0.1 | |
0.1 | 0.3 | 0.6 | |
1.0 | 0.7 | 0.3 | |
0.1 | 0.3 | 0.3 | |
...... |
从公式(3)中我们看出我们将对encoder第单词的步的attention权重作为一个输入去计算对第单词的第步的attention值,这样可以让第步感知之前的attention结果,论文又设计了一个,从描述中我们可以看出这个这个损失函数的取值是之前步attention值的和与第步attention值之间的最小值,我们以表格中的为例,实际计算时,这里最小化就是最小化这三项,表示第3步对encoder第1个单词的attention值相对于之前步的attention值的和较小,也就是encoder第1个单词之前被attention的比较多,那当前就应该少attention这个位置,最小化就是让当前attention对encoder第1个单词关注最低,与相似不作解释,对于表示当前的attention值大于之前的所有时间步对encoder第3个单词的attention值的和,可以理解为之前的时间步对encoder第3个单词的attention比较少,因此我们要强化该时间步对encoder第3个单词的attention,反过来就是最小化之前的attention和。
通过上述解释我们就可以搞清楚Coverage mechanism为何可以解决重复attention问题了。