Attentionによる機械翻訳の論文を読む

ランニングできず 英語できず

(1) Attentionによる機械翻訳の論文を読む

 「Effective Approaches to Attention-based Neural Machine Translation」(2015/09/20)

https://arxiv.org/abs/1508.04025

 最近の自然言語処理ではAttentionは必ず聞く言葉なので、どの様な仕掛けか読んでみました。

 RNNを用いた機械翻訳は下図の様な2層型のseq2seqのEncode-Decode方式がbaseになっていています。

 これにAttentionを追加して学習させると大幅に翻訳精度が改善できるとの話です。

f:id:mabonki0725:20170919205551p:plain

 Attentionは翻訳の対応語間の関係をRNNの隠れ変数間の計算で代替するもので、この学習を反映すると精度が向上します。

(1.1)手法

    Attentionc_tはEncoder側の隠れ変数\bar{h}_sとDecoder側の隠れ変数h_tで定義されます。

 被翻訳をxとし翻訳をyとする時、Attention c_tを使って次に翻訳される言葉の確率は次式としています。

  p(y_t | y_1,y_2,\dots,y_{t-1},x) = softmax(W_s \cdot \tilde{h}_t) ①

        \tilde{h}_t = tanh(W_c,[c_t;h_t)]

        c_t = \sum_{s=1}^S  a(s) \bar{h}_s ②

     ここで

   \bar{h}_sはEncoder側の隠れ変数

   h_tはDecoder側の隠れ変数

   a_t(s)は両側の隠れ変数の荷重比率で次式で定義

    a_t(s) = align(h_t,\bar{h}_s) = \frac{\exp \left(score(h_t,\bar{h}_s) \right)}{\sum_{\acute{s}} \exp \left( score(h_t,\bar{h}_{\acute{s}}) \right)} ③

    score(h_t,\bar{h}_s) = v_a^T tanh(W_a(h_t;\bar{h}_s))

            但し W_s \ W_c \ W_a \ v_aは学習パラメータです。

     (a;b)はベクトル a と b の連結です

 上記を図示すると以下となります。f:id:mabonki0725:20170919214011p:plain

    上記は全センテンスの翻訳のAttentionで、これを大域的Attentionと云います。

 長文ではAttentionの構築が広いのでD語幅での局所Attentionが有効な場合があります。

 その場合のa_t(s)加重は言葉の意味位置p_tの偏差を使って次式で定義します。

  a_t(s) = align(h_t,\bar{h}_s) exp \left ( - \frac{(s - p_t)^2}{2\sigma^2} \right)

  p_t = S \cdot sigmoid(v_p^T tanh(W_p,h_t))

  ここで

           v_p \ W_pは学習パラメータです

          Sはencodeの数

          \sigma = \frac{D}{2}

(1.2) 結果

  英語→独語への翻訳結果の精度です。文長は50語以上を選んでいます。

  ここでは翻訳精度の評価としてperplexity(P_pl)とBLEUを使っています。

  比較対照はAttentionが無いseq2seqでBaseと記されています。

 ほぼ2倍の精度向上となっています。perplexityは低い方 BLEUが高い方が精度が高い

f:id:mabonki0725:20170919222609p:plain

ここで

 reverseとあるのは被翻訳文を逆順で入力しています

 globalは大域的Attentionを使っています

    local_pは局所的Attentionを使っています (D=10)

    feed input は 下図の様に求まった隠れ変数\tilde{h}_tを次のRNNに入れています

    BLEUの欄の(+ x.x)は他のAttention論文(Sutskever et al. 2014)との比較です

    unk replaceは出現頻度が低い言葉を一律 unkに置き換えています

 f:id:mabonki0725:20170919220522p:plain

 (1.3) 感想

 上記の仕掛けは翻訳される側とする側の言葉の位置関係を隠れ変数間で計算したAttentionを使うので、当然翻訳精度は高くなります。しかしこのAttentionのため学習パラメータが格段に増えています。下記の資料はこの実装の話で逆伝播のロジックが相当大変との報告です。 

http://www.logos.t.u-tokyo.ac.jp/~eriguchi/slide/20160413_DeepLearning.pdf