seq2seq: 系列変換モデル

  • RNNでは入力と出力の系列長や順序は一致しなくてはならない
  • seq2seqは入力系列を別の系列に変換するモデル(翻訳など)
    • 入力と出力の系列長が異なっていても良い
    • 入力にBOSやEOSを含めることが多い?
    • 入力と出力の語彙が異なっていてもよい(がNMTではマージして1つの共用語彙にすることが多い?)
  • RNNLMの一種の拡張
    • 2つのRNNLMをつなぎ,出力側のRNNLMの初期値を変えただけ
  • 処理
    • 入力系列$\bold{X}$から固定長の符号ベクトル$\bold{z}$を生成する
    • $\bold{z}$から出力系列$\bold{Y}$を生成する
  • 入力を$\bold{z}$だけに押し込んでいるので,長い入力だと出力の性能が悪化する

構造

  1. encoder embedding layer
    • 入力: one-hotベクトル $\bold{x}_i$
    • 出力: embedding $\bar{\bold{x}}_i = \bold{E}^{(s)} \bold{x}_i$
    • embedding間に依存関係は無いので並列処理可能
  2. encoder recurrent layer
    • 入力: $i$番目の単語に相当するembedding $\bar{\bold{x}}_i$
    • 出力: 隠れ状態ベクトル$\bold{h}_i^{(s)}$
    • 多様な設計がありうる
      • RNNの種類(最近ではGRUやLSTMが多い)
      • 単方向or双方向,何層か
    • decoder recurrent layerと同じモデルでも良いが,より複雑なモデルを使うことが多い
      • 逐次処理を行うという制限が無いため
  3. decoder embedding layer
    • 入力: decoder recurrent layerで選択された出力$\bold{y}_{j-1}$
    • 出力: embedding $\bar{\bold{y}}_j = \bold{E}^{(t)} \bold{y}_{j-1}$.
  4. decoder recurrent layer
    • 入力: decoder embedding layerの出力に対応する $\bold{y}_j$
    • 出力: 隠れ状態ベクトル $\bold{h}_j^{(t)}$
  5. decoder output layer
    • 入力: 隠れ状態ベクトル $\bold{h}_j^{(t)}$
    • 出力: $\bold{y}_j$が生成される確率$p_j$

系列生成方法

  • EOSが出てくるまで生成
  • ビーム探索
    • ビーム幅が1のとき,貪欲法とよばれる