论文阅读:CopyNet

论文《Incorporating Copying Mechanism in Sequence-to-Sequence Learning》

CopyNet 是在 Seq2Seq + Attention 的基础上,引入了拷贝机制,对某些任务会有所擅长。模型结构如下图

论文阅读:CopyNet_第1张图片

实现上有关键两点(即图中右边的上下两个矩形框),

Prediction with Copying and Generation

即从 decoder hidden state, st s t ,到预测输出单词 yt y t 的过程。本来直接一个线性映射就可以了,现在有点麻烦。

p(yt) p ( y t ) 的概率分两个模式构成,

  • Generate-Mode
    • 对于在输出词表 V V 中的单词 vi v i ,有
      φ(yt=vi)=Wost,viVUNK(1) (1) φ ( y t = v i ) = W o s t , v i ∈ V ∪ UNK
    • 上面 WoR(N+1)×ds W o ∈ R ( N + 1 ) × d s stRds s t ∈ R d s ds d s st s t 的维度大小。
  • Copy-Mode
    • 对于在输入中出现的单词,预测的概率有
      φ(yt=xj)=σ(MWc)st,xjX(2) (2) φ ( y t = x j ) = σ ( M W c ) s t , x j ∈ X
    • M={h1,h2,...,hTs} M = { h 1 , h 2 , . . . , h T s } 是 encoder hidden state, Ts T s 是输入的单词的个数
    • 上面的 MRTs×dh,WcRdh×ds,stRds M ∈ R T s × d h , W c ∈ R d h × d s , s t ∈ R d s dh,ds d h , d s 分别是 ht,st h t , s t 的维度
    • 为什么要加 σ σ ?论文里说用 tanh non-linearity 比线性映射效果好,但是没有解释为啥

State Updates

对于 seq2seq 中的 Attention,发生在更新 st s t 上,即 st=f(yt1,st1,ct) s t = f ( y t − 1 , s t − 1 , c t ) ,其中 ct c t 是 context vector,也就是 Attention 模块,其计算公式如下,

ct=τ=1TSαtτhτ,αtτ=eη(st1,hτ)τeη(st1,hτ)(3) (3) c t = ∑ τ = 1 T S α t τ h τ , α t τ = e η ( s t − 1 , h τ ) ∑ τ ′ e η ( s t − 1 , h τ ′ )

CopyNet 的 yt1 y t − 1 在这里有些不同,这里被表示成了 [e(yt1),ζ(tt1)] [ e ( y t − 1 ) , ζ ( t t − 1 ) ] ⊤ ,前一项是 word embedding;多出来的后一项 ζ(tt1) ζ ( t t − 1 ) ,叫做 selective read,是为了能连续拷贝较长的短语。计算的公式有点像 Attention 模块。

ζ(yt1)=τ=1Tsρtτhτ,ρtτ={1Kp(xτ,c|st1,M),0,xτ=yt1otherwise(4) (4) ζ ( y t − 1 ) = ∑ τ = 1 T s ρ t τ h τ , ρ t τ = { 1 K p ( x τ , c | s t − 1 , M ) , x τ = y t − 1 0 , otherwise
注意归一化项 K K 是加和做为分母,而不是 Softmax 之类。 ρ ρ 是一个权重,概率 p p 论文里没有给出解释,我觉得是预测 xτ x τ 的概率,直接一个线性映射来实现。当 xτyt1 x τ ≠ y t − 1 的时候,权重是零,这个有点暴力。

其实 selective read 就是想找 yt1 y t − 1 这个单词对应输入的 hidden state,如果出现一次或者多次则累加;如果 yt1 y t − 1 没有在输入中出现,那么 ζ(yt1)=0 ζ ( y t − 1 ) = 0 .


不明白的点,

  1. 在 encoding RNN 中, X X 要不要做 word embedding?如果有,那不得是很大,而且肯定比 V V 要大。decode-RNN 倒是没看到要用 X X 的 word embedding
  2. generate-mode 和 copy-mode 联合起来,生成的类别数目每次都是不定的,具体是拼到一起吗?
  3. 比较公式 (7), (8),为什么 copy-mode 需要加激活函数?实践出真知?
  4. selective reader ζ(yt1) ζ ( y t − 1 ) 的作用
  5. 公式 (9) 中的概率 p() p ( ⋅ ) 没有给出实现方式
  6. encode RNN 是怎么把位置信息融合到 hidden state 中去的
  7. Section 3.4 的说法很抽象,没有给出有力的解释

你可能感兴趣的:(NLP,论文)