Yuta Hayashibe

seq2seq: 系列変換モデル

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

構造

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

系列生成方法

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