[機械学習]
Seq2seqの単語繰り返し問題の解決
- Seq2seqでなんやかんやすると、系列変換後のsequenceに繰り返しが生じてしまう問題の解決
情報元
- 論文(HTML化)
- 有志のサマリー
論文内容
既存の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をいい感じに評価するもののようだ
- csparsemax自体は別論文2つの組み合わせから生まれたらしい、いいですね
- アルゴリズム部分は以下の論文(有料)
sparsemaxとは
constrained softmaxとは
- Martins and Kreutzerによってconstrained softmaxという関数が提案されている
- softmaxはわかるが、constrained softmaxとはなんだ
- 解説は別ページのconstrained softmaxにて
constrained sparsemaxとは
- 本命、sparsemax + csoftmax => csparsemax というわけだ
- α, Δ^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*} \)
- 疑似コード
- 無いかと思っていたが、実装がOpenNMT-py側にあった
- constrained_sparsemax.py
attentionへの適用
- Attentionの解説
- 【論文】"Attention is all you need"の解説
- 上記でわかるように、最後にsoftmaxを適用しているのでそれをcsparsemaxに変更すればいいと思われる