论文阅读 seq2seq模型的copy机制

copy net 和 pointer softmax network都是在ACL 2016上提出的,目的是为了解决OOV的问题,本篇主要是想借此总结一下copy机制的原理。

  • 论文阅读
    • Incorporating Copying Mechanism in Sequence-to-Sequence Learning
    • Pointing Unknown Word
    • Pointer Network

论文阅读


Incorporating Copying Mechanism in Sequence-to-Sequence Learning

Jiatao Gu, Zhengdong Lu
The University of Hong Kong & Huawei Noah’s Ark Lab
ACL 2016

这篇提出了copynet的思路,同时结合了generative和copy两种方式,对OOV词采用直接copy的方式。attention中包含了两个部分,第一个部分是词表,用one hot向量表示的,第二个部分是encoder的隐藏状态,即输入的句子,之所以用隐藏状态是因为其包含有位置信息,这个对生成很重要。建模是通过两者的叠加,例子中就是Prob(“Jebara”) = Prob(“Jebara”, g) + Prob(“Jebara”, c)。

论文阅读 seq2seq模型的copy机制_第1张图片

p(yt|st,yt1,ct,M)=p(yt,c|st,yt1,ct,M)+p(yt,g|st,yt1,ct,M) p ( y t | s t , y t − 1 , c t , M ) = p ( y t , c | s t , y t − 1 , c t , M ) + p ( y t , g | s t , y t − 1 , c t , M )

M是输入隐藏层状态的集合, ct c t 是attention score, st s t 是输出的隐藏状态,g代表生成,c代表复制。

生成还是复制基于概率最大来选择,加了一个简单的限制规则,如果 yt y t 在输入中没出现,那么肯定不会是copy, p(yt,c|)=0 p ( y t , c | ∗ ) = 0 ;如果 yt y t 在只输入中出现,而词表中没有,那么肯定是copy, p(yt,g|)=0 p ( y t , g | ∗ ) = 0

为了复制较长短语,作者改变了 yt1 y t − 1 的表达式,加了一项selected read。 yt1 y t − 1 的表达式由两项拼接而成,第一项是词的embedding,第二项叫做selective read,其目的是为了拷贝较长的短语。理解的话很直观,如果前一个词在输入中出现了,那么有一个权重的累加,否则为零。

本文在summeraize上基本已经解决了OOV问题,在word level和char level都做了测试,word level表现更好。copynet缺点在于只能原封不动地复制,对于NMT和QA还是下一篇介绍的pointer softmax更常用。



Pointing Unknown Word

Caglar Gulcehre, Yoshua Bengio, ACL 2016

本篇提出了pointer softmax的机制,为了解决copy or generate 和 where to copy两个问题。也称为pointer-generator network。

  • copy or generate
    用一个参数 zt z t 来决定是point,copy还是generate,用一个多层感知机来预测。输入由当前时刻attention得出的语义向量 ct c t 和前一时刻decoder的隐藏层状态 st1 s t − 1 以及输出 yt1 y t − 1 拼接构成。

    其实这个多层感知机的输入和NMT中decoder预测下一状态的输入是一模一样的,只是一个是学习对应的位置,一个是学习预测每个词的概率。

  • where to point
    在attention softmax的基础上,额外用了一个location softmax来解决where to point的问题。
    目标是max p(lt|zt=0,(y,z)<t,x) p ( l t | z t = 0 , ( y , z ) < t , x )

从公式看反而更直观一些:
目标可以表示为 argmax pθ(y,z|x)=t=1TYpθ(yt,zt|y<t,z<t,x) p θ ( y , z | x ) = ∏ t = 1 T Y p θ ( y t , z t | y < t , z < t , x )

pθ(yt,zt|y<t,z<t,x)=pθ(ωt,zt|y<t,z<t,x)×pθ(lt,zt|y<t,z<t,x) p θ ( y t , z t | y < t , z < t , x ) = p θ ( ω t , z t | y < t , z < t , x ) × p θ ( l t , z t | y < t , z < t , x )

pθ(ωt,zt|y<t,z<t,x)=pθ(ωt|zt=1,y<t,z<t,x)×pθ(zt=1|y<t,z<t,x) p θ ( ω t , z t | y < t , z < t , x ) = p θ ( ω t | z t = 1 , y < t , z < t , x ) × p θ ( z t = 1 | y < t , z < t , x )

pθ(lt,zt|y<t,z<t,x)=pθ(lt|zt=0,y<t,z<t,x)×pθ(zt=0|y<t,z<t,x) p θ ( l t , z t | y < t , z < t , x ) = p θ ( l t | z t = 0 , y < t , z < t , x ) × p θ ( z t = 0 | y < t , z < t , x )

不加pointer softmax的seq2seq其实就是最大化 ωt ω t 的概率来训练attention权重,这里除了考虑attention多了一个 lt l t 的概率,指向对应输入中词的位置,用来学习位置的信息。

switch network目的是得到 zt z t ,通过训练学习 zt z t 的分布 pθ(zt|y<t,z<t,x) p θ ( z t | y < t , z < t , x )

论文阅读 seq2seq模型的copy机制_第2张图片


Pointer Network

Oriol Vinyals, Meire Fortunato, Navdeep Jaitly, Google Brain, 2015

顺带再提提这篇15年放在arkiv上的pointer network,思路比较简单,就是decoder不预测输出是什么,而是预测输出应该对应输入哪个词。pointer softmax的位置参数 lt l t 就是借鉴了这个思想。

论文阅读 seq2seq模型的copy机制_第3张图片

你可能感兴趣的:(自然语言处理)