Seq2SeqにAttentionを足したら翻訳がよくなった、って話の中身が分からん
【疑問】Seq2Seqの翻訳、長い文になるとボロボロ。Attentionで何が解決したん?【G検定】
前提のおさらい。LSTMやGRUは、ゲートで情報の流れを調節して、ふつうのRNNより長い系列を扱える。系列を読み終わったときの隠れ状態に、それまでの内容がまとまる
>>1
Seq2Seqは、系列を入れて系列を出すモデル。エンコーダのRNNで入力の文を読みこんで1本のベクトルにまとめ、デコーダのRNNがそのベクトルから訳文を1語ずつ作る
サツケヴァーらの2014年の論文で、LSTMを使った翻訳として示された
>>3
問題は、どんなに長い文でも決まった長さのベクトル1本に押しこむこと。短い文ならええけど、50語の文を同じ大きさに詰めると、前のほうの情報がこぼれる
>>4
そこでAttention。デコーダが1語作るたびに、エンコーダの全時刻の隠れ状態を見直して、今どこを見るべきかの重みをつけて混ぜる
バダナウらの論文(2014年に公開)で翻訳に入れられた
>>5
数字で。入力の3語のエンコーダの状態が 、、 で、今のデコーダの状態との相性の点数が 2, 1, 0 やったとする
ソフトマックスで重みにすると約 0.67, 0.24, 0.09
この混ぜたベクトル(文脈ベクトル)を使って次の語を出す。1語目と相性がええから、1語目の情報が強く入る
>>6
1語ごとに見る場所を変えられるから、文が長くなっても、ベクトル1本に全部を詰める必要がなくなったんか
>>5
このように、デコーダ側(出力の文)からエンコーダ側(入力の文)を見るAttentionを、Source-Target Attentionという。入力と出力の2つの系列のあいだのAttention
>>8
重みを並べると、訳語と原語のどれが対応してるかも見える。英語と日本語みたいに語順が違っても、重みが大きいところが斜めにずれて並ぶ
>>9
ただ、これでもエンコーダもデコーダもRNNやから、1語ずつ順番に計算するしかなくて並列にできん。そこをRNNなしでAttentionだけにしたのがTransformer
管理人のひとこと
- Seq2Seqはエンコーダで入力の系列をベクトルにまとめ、デコーダが出力の系列を作る(サツケヴァーら、2014年の論文)。
- 決まった長さのベクトル1本に長い文を詰めると、前のほうの情報がこぼれる。
- Attentionは出力の1語ごとにエンコーダの全時刻の状態に重みをつけて混ぜる(バダナウら、2014年に公開)。点数 2, 1, 0 なら重み約 0.67, 0.24, 0.09 で、文脈ベクトルは約 (0.76, 0.33)。
- 出力側から入力側を見るのがSource-Target Attention。RNNのままでは並列に計算できない点が残った。