seq2seq: 系列変換モデル
- RNNでは入力と出力の系列長や順序は一致しなくてはならない
- seq2seqは入力系列を別の系列に変換するモデル(翻訳など)
- 入力と出力の系列長が異なっていても良い
- 入力にBOSやEOSを含めることが多い?
- 入力と出力の語彙が異なっていてもよい(がNMTではマージして1つの共用語彙にすることが多い?)
- RNNLMの一種の拡張
- 2つのRNNLMをつなぎ,出力側のRNNLMの初期値を変えただけ
- 処理
- 入力系列Xから固定長の符号ベクトルzを生成する
- zから出力系列Yを生成する
- 入力をzだけに押し込んでいるので,長い入力だと出力の性能が悪化する
構造
- encoder embedding layer
- 入力: one-hotベクトル xi
- 出力: embedding xˉi=E(s)xi
- embedding間に依存関係は無いので並列処理可能
- encoder recurrent layer
- 入力: i番目の単語に相当するembedding xˉi
- 出力: 隠れ状態ベクトルhi(s)
- 多様な設計がありうる
- RNNの種類(最近ではGRUやLSTMが多い)
- 単方向or双方向,何層か
- decoder recurrent layerと同じモデルでも良いが,より複雑なモデルを使うことが多い
- decoder embedding layer
- 入力: decoder recurrent layerで選択された出力yj−1
- 出力: embedding yˉj=E(t)y_j−1.
- decoder recurrent layer
- 入力: decoder embedding layerの出力に対応する yj
- 出力: 隠れ状態ベクトル hj(t)
- decoder output layer
- 入力: 隠れ状態ベクトル hj(t)
- 出力: yjが生成される確率pj
系列生成方法