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を追加して学習させると大幅に翻訳精度が改善できるとの話です。
Attentionは翻訳の対応語間の関係をRNNの隠れ変数間の計算で代替するもので、この学習を反映すると精度が向上します。
(1.1)手法
AttentionはEncoder側の隠れ変数とDecoder側の隠れ変数で定義されます。
被翻訳をとし翻訳をとする時、Attention を使って次に翻訳される言葉の確率は次式としています。
①
)]
②
ここで
はEncoder側の隠れ変数
はDecoder側の隠れ変数
は両側の隠れ変数の荷重比率で次式で定義
③
但し は学習パラメータです。
はベクトル a と b の連結です
上記を図示すると以下となります。
上記は全センテンスの翻訳のAttentionで、これを大域的Attentionと云います。
長文ではAttentionの構築が広いのでD語幅での局所Attentionが有効な場合があります。
その場合の加重は言葉の意味位置の偏差を使って次式で定義します。
ここで
は学習パラメータです
はencodeの数
(1.2) 結果
英語→独語への翻訳結果の精度です。文長は50語以上を選んでいます。
ここでは翻訳精度の評価としてperplexity()とBLEUを使っています。
比較対照はAttentionが無いseq2seqでBaseと記されています。
ほぼ2倍の精度向上となっています。perplexityは低い方 BLEUが高い方が精度が高い
ここで
reverseとあるのは被翻訳文を逆順で入力しています
globalは大域的Attentionを使っています
local_pは局所的Attentionを使っています (D=10)
feed input は 下図の様に求まった隠れ変数を次のRNNに入れています
BLEUの欄の(+ x.x)は他のAttention論文(Sutskever et al. 2014)との比較です
unk replaceは出現頻度が低い言葉を一律 unkに置き換えています
(1.3) 感想
上記の仕掛けは翻訳される側とする側の言葉の位置関係を隠れ変数間で計算したAttentionを使うので、当然翻訳精度は高くなります。しかしこのAttentionのため学習パラメータが格段に増えています。下記の資料はこの実装の話で逆伝播のロジックが相当大変との報告です。
http://www.logos.t.u-tokyo.ac.jp/~eriguchi/slide/20160413_DeepLearning.pdf