【DeepLearning特訓】RNN応用 seq2seq編
E資格向けの自習アウトプット
自分用メモ
seq2seq は Encoder-Decoderモデルとも呼ばれている
RNNを使って、系列データを固定次元ベクトルへ変換(エンコード)、逆に固定次元ベクトルから系列を生成できる(デコード)
エンコーダ:系列データをある規則に基づいて変換する(固定長ベクトルへ)
デコーダ:系列データへ変換(可変ベクトルへ)
日本語から英語への翻訳で考えてみると
seq2seq の構造
エンコーダでは、各タイムステップの出力は使わず隠れ層の出力を伝播させる、最終単語の隠れ層の出力をデコーダに渡す
区切り文字
エンコーダとデコーダの構造が違っても良い
seq2seq の問題点
エンコードの出力は固定長ベクトル
➔入力系列が長すぎるとうまくいかない
Attention Mechanism
エンコーダの各ステップの出力を利用する
「入力と出力でどの単語が関連しているか」という対応関係を seq2seq に学習させる
Encoderの改良
最後の隠れ状態だけを Decoder に渡していたのを、入力される文章のすべてステップの出力の集合を作る
「ひとつの固定長ベクトル」という制約から開放
Decoder の改良
各ステップでRNNの出力結果を用いて重要度を算出する
終わりに
seq2seq からの、Attention Mechanism は非常に強力らしい
ただ、numpy で書いていくにはちょっと面倒なので、また TensorFlow Keras などでサクッと試してみようかな