Encoder-Decoder構造

はじめに

  • Seq2seqで有名になった機械学習のEncoder-Decoderモデルについて、定性的な理解をするための情報をまとめた

構造と機能

https://6chaoran.wordpress.com/2019/01/15/build-a-machine-translator-using-keras-part-1-seq2seq-with-lstm/
  • Encoder
    • 翻訳したい文字列を単語(厳密にはトークン)に分け、それぞれを意味に応じた数値化処理(Embedding)を施す
      • 機械翻訳をする際、1まとまりとして扱う単位をトークンとしており、文章をトークンに分けるプログラムをtokenizerと呼ぶ
    • 1単語目と初期状態をRNN(LSTM、GRU等)に入力、2単語目と前段のRNNの出力をRNNに入力、…と順にRNNで処理させることで、文脈(単語の順番)に関する情報を持たせた状態をEncoderの出力として得ることができる
      • 状態を持つことができるRNNでなくCNN等のFeedforwardなニューラルネットワークの場合、時系列情報(単語の順番)に関する情報を持たせにくい
      • LSTMはLong Short Term Memoryの略で、記憶ゲートと忘却ゲートをもたせたRNN
      • GRUはGated Recurrent Unitの略で、LSTMと同様の機能を計算量を落として可能にしたRNN
    • 文脈に関する情報について、前の単語だけでなく後の単語の情報も有用であるため、Encoderには双方向のRNNを利用することが有用とされている
  • Decoder
    • Encoderの出力状態と文頭を示すトークン(図で言うと<GO>、他のトークンの場合もある)をRNNに入力、1段目のRNNの出力状態と1段目のRNNの出力トークンをRNNに入力、…と順にRNNで処理させることで、文脈の情報を紐解き、翻訳後の文章(target)を出力する

参考