FreeStyleWiki

Seq2seqの単語繰り返し問題の解決

[機械学習]

Seq2seqの単語繰り返し問題の解決

  • Seq2seqでなんやかんやすると、系列変換後のsequenceに繰り返しが生じてしまう問題の解決

  情報元

  論文内容

既存のConstrained softmaxをsparsemaxに拡張した

通常のattentionではどの時刻tでも全ての単語に少なからずweightを与えてしまい、decode時のrepititionを引き起こしてしまう。

そこでattentionのweightがsparseになるsparsemaxに、attentionをかける単語数/回数に制約をかけるconstrained softmaxを組み合わせたconstrained sparsemaxを提案

Sparse and Constrained Attention for Neural Machine Translation #218

attentionで使っている活性関数をsoftmaxからcsparsemaxに変えてweightをいい感じに評価するもののようだ

sparsemaxとは

constrained softmaxとは

constrained sparsemaxとは

α, Δ^Jの定義 (ℝは実数全体の集合, ρ は z, uに従って中身を変化させる関数)

\( \begin{aligned} \alpha_t &= \rho(z_t, u_t) \\ \Delta^J &:= \left\{ \alpha \in \mathbb{R}^J | \alpha \geq 0, \Sigma_j \alpha_j = 1 \right\} \end{aligned} \)

  • J次元の確率単体を表す
    • z: スコアを表すベクター
    • u: それぞれの語が受け取れるattentionの総量を制限する, upper bound
    • z_t ∈ ℝ^J, u_t ∈ ℝ^J, α∈ℝ^Jで
csparsemax
右辺のargminを満たすようなαを算出する

\( {{\bf csparsemax}({\bf z;u}) := \underset{ \alpha \in \Delta^{J} }{argmin} \|\alpha-z\|^2 } \)

u (upper bounds)はどうするのか?
単語の位置(t = timestep)に従って α_τ の総和を求める, αはもちろん上記で求めたα

\( \begin{align*} & \alpha_t = {\bf csparsemax}(z_t\ ;\ \underbrace{f - \beta_{t-1} }_{u_t}) \\ & \beta_{t-1} := \Sigma_{\tau=1}^{t-1} \alpha_{\tau} \end{align*} \)

  • \( \beta_{t-1} := \Sigma_{\tau=1}^{t-1} \alpha_{\tau} \)
    • は論文の方で各ソースワードがこれまでに受けた累積的なattentionと書かれている通り
    • 累積なのでどんどん加算されるわけだが、f (=fertility) が定数で存在しているので、1回使うごとに確率が低くなる(=繰り返しが防げるというわけだ)
  • ここでの注意としては、条件として \( \alpha \ge 0\ \text{and}\ 0 < \alpha^*_j < u_j \) なので、少なくともuは0以上ということだ、uが0以下になったら0に補正しておく
提案1

\( \begin{align*} \alpha^* &= csparsemax(z;u) \\ sets A &= \{j \in [J] \ | \ 0 < \alpha^*_j < u_j\}, \\ A_L &= \{j \in [J] \ | \ \alpha^*_j = 0\}, and \\ A_R &= \{j \in [J] \ | \ \alpha^*_j = u_j\} \end{align*} \)

attentionへの適用