翻訳を考えると、入力と出力の長さが違います。「こんにちは」は4文字で"Hello"は5文字。単語数も文法構造も言語によって異なるので、入力と出力を1対1で対応させることができません。
Encoder-Decoder(Seq2Seq)モデルは、入力系列を一旦ベクトルに圧縮して、そこから別の系列を生成するという構造でこの問題に対処します。
Encoderが入力を圧縮し、Decoderが出力を生成する
構造はシンプルです。Encoder(符号化器)が入力系列を順に処理して、最終ステップの隠れ状態を1つの固定長ベクトル \( v \) にまとめます。これをコンテキストベクトルと呼びます。
Decoder(復号化器)は、このベクトル \( v \) を初期状態として受け取り、出力系列を1トークンずつ生成していきます。
数式で書くと、Decoderは中間ベクトル \( v \) を介して条件付き確率 \( P(y_1, \dots, y_m \mid x_1, \dots, x_n) \) を最大化しようとしています。EncoderもDecoderもRNN(やLSTM)で実装されることが多く、前回までの知識がそのまま使えます。
固定長ベクトルがボトルネックになる
この構造の弱点は、入力がどれだけ長くても1つの固定長ベクトルに圧縮しなければならない点です。
10単語の文も100単語の文も同じサイズのベクトルに押し込むので、長い文では情報が落ちます。特にEncoderがRNNベースだと、系列の後半の情報ばかりが強く残り、冒頭の情報が薄れる。前回書いたRNNの長期記憶ের 限界が、ここでも効いてきます。
2014年にSutskeverらが発表したSeq2Seqの論文では、入力文を逆順にするという工夫で冒頭の情報をDecoder側に近づけていました。効果はあったようですが、根本的な解決にはなっていません。
振り返りができない
人間が翻訳するとき、文章全体を一度要約してからそれだけを頼りに訳すということはしません。原文を見ながら、必要な箇所を都度参照して訳語を選んでいます。
Encoder-Decoderモデルにはこの「振り返り」がない。コンテキストベクトルに圧縮した時点で、入力の個々の単語に戻ることができなくなる。この問題意識が、次回扱うAttention(注意機構)の出発点になっています。
まとめ
Encoder-Decoderは、入力を固定長ベクトルに圧縮してから出力を生成する構造です。入力と出力の長さが異なるタスクに対応できますが、長い入力では情報が失われるボトルネックがあります。
次回は、このボトルネックを解消するAttentionメカニズムについて書きます。