ラビットチャレンジ 深層学習Day3 その3
Section5 Seq2Seq
Seq2Seq2は、2014年にGoogleにより発表された技術であり、機械翻訳やチャットボットのようなシーケンシャルなデータの処理に向いた技術である。
基本的な構造は下図のようになっている。
入力データを中間データに変換するEncoderと言われる構造があり、中間層に中間データを送る。そして、中間層は、Decoderと呼ばれる構造にデータを送り、Decoderは、送られたデータを出力データに変換する。
Seq2SeqはこのようなEncoder-Decoderと呼ばれる構造をとっている。
5-1 Encoder RNN
Seq2SeqのEncoderとして用いられるEncoder RNNの説明をする。
ユーザーがインプットしたテキストデータ尾w、単語などのトークンに区切って渡す構造になっている。
Encoder RNNがテキストデータを処理する手順は、次のとおりである。
1. 文章を単語などに分割し、トークンごとのIDに分割するTakingと呼ばれる処理をする。
2. IDからそのトークンを表す分散表現ベクトルに変換するEmbeddingと呼ばれる処理をする。
3. 2で変換したベクトルvecをRNNに入力し、hidden stateを出力する。このhiddem stateと次の入力vecをRNNに入力してhidden stateを出力という流れを繰り返す。
4.最後のvecを入力した時のhidden stateをfinal stateとする。このfinal stateがthought vectorと呼ばれ、入力した文章の意味を示すベクトルとなる。
5-2 Decoder RNN
中間層からのデータを、単語などのトークンごとに出力データとして生成する構造。
Decoder RNNの処理手順は次のようになる。
1.前述のEncoder RNNのthought vectorをDocoderRNNのinitial stateとして設定し、Enbeddingを入力。tokenの生成確率を出力する。
2.生成確率に基づいてtokenをランダムに選ぶsamplingという処理を行う
3.2で選ばれたtokenをEmbeddingして、Decoder RNNの次の段の入力とする。
4.1-3を繰り返し、2で得られたtokenを文字列に直すDetokenizeという処理を行う。
- 確認テスト
下記の選択肢から、seq2seqについて説明しているものを選べ
(1)時刻に関して順方向と逆方向のRNNを構成し、それら2つの中間層表現を特徴量として利用するものである。
(2)RNNを用いたEncoder-Decoderモデルの一種であり、機械翻訳などのモデルに使われる。
(3)構文木などの木構造に対して、隣接単語から表現ベクトル(フレーズ)を作るという演算を再帰的に行い(重みは共通)、文全体の表現ベクトルを得るニューラルネットワークである。
(4)RNNの一種であり、単純なRNNにおいて問題となる勾配消失問題をCECとゲートの概念を導入することで解決したものである。
[解答](2)
(1)→双方向RNN
(2)→seq2seq
(3)→通常のRNNなど
(4)→LSTM
- 演習チャレンジ
機械翻訳タスクにおいて、入力は複数の単語からなる文章であり、それぞれの単語はone-hotベクトルで表現されている。Encoderにおいて、それらの単語は単語埋め込みによる特徴量に変換され、そこからRNNによって(一般にはLSTMを使うことが多い)時系列の情報を持つ特徴へとエンコードされる。以下は入力である文(文章)とを時系列の情報を持つ特徴量へとエンコードする関数である。ただし_activation関数は何らかの活性化関数を表すとする。
(き)にあてはまるコードを示せ。
[解答]
E.dot(w)
単語wはone-hotベクトルであり、それを単語埋め込みにより別の特徴量に変換する。これは埋め込み行列を用いてE.dot(w)と書ける。
5-3 HRED
過去n-1個の発話から次の発話を生成する技術。
seq2seqは、会話の文脈無視の応答だったが、HREDでは、前の単語の流れに即して応答されるため、より人間らしい文章が生成される。
HREDの構造は、seq2seq+context RNNである。context RNNは、Encoderのまとめた各文章をまとめて、これまでの会話コンテキスト全体を表すベクトルに変換する構造である。過去の発話の履歴を加味した応答を出来る。
HREDの課題
HREDは確率的な多様性が字面にしかなく、会話の「流れ」のような多様性がない。そのため、同じコンテキストを与えられても、答えの内容が名毎回会話の流れとしては同じものしか出せない。
また、HREDは短く情報量に乏しい答えをしがちで、短いよくある答えを学ぶ傾向がある。たとえば、「うん」「そうだね」など。
5-4 VHRED
HREDにVAEの潜在変数の概念を追加したもので、HREDの課題をVAEの洗剤変数の概念を追加することで解決した構造である。
- 確認テスト
sesq2seqとHRED、HREDとVHREDの違いを簡潔に述べよ。
[解答]
・seq2はEncoderとDecoderを接続した構成で、会話の文脈を読み取れないが、HREDは、context-RNNを導入することで、過去の会話を踏まえた文章を生成できる。
・HREDは会話の流れのような多様性がないが、VHREDは、VAEの潜在変数の概念を追加することで会話の流れをより把握できる。
5-5 VAE
VAEは変分オートエンコーダ(Variational Autoencoder)で、ニューラルネットワークを用いた生成モデルの一種である。
5-5-1 オートエンコーダ―
オートエンコーダとは、教師無し学習の一つである。
そのため学習時の入力データは、訓練データのみで教師データは利用しない。
- オートエンコーダの構造
オートエンコーダの構造の概念図は下記になる。
入力データからencoderと呼ばれるニューラルネットワークで潜在変数zに変換し、逆にDecoderで潜在変数zから元画像を復元する。
zの次元が入力データのより小さい場合は、次元削減とみなすことが出来る。
5-5-2 VAE
通常のオートエンコーダの場合は、何かしら潜在変数zにデータを押し込んでいるが、その構造がどのような状態か分からない。
VAEはこの潜在変数Zの確率分布z~N(0.1)を仮定した。それにより、データ同士の関係性が示せるようになった。
- 確認テスト
VAEに関する下記の説明文中の空欄に当てはまる言葉を答えよ。
自己符号化器の潜在変数に_____を導入したもの。
[解答]
確率分布z_N(0.1)
VAEは、自己符号化器の潜在変数内で、データ同士の関連性を示すために、確率分布を導入している。
そのため、生成モデルとして使用される。
Section6 Word2vec
RNNでは、単語のような可変長の文字列をニューラルネットワークに与えることはできないため、固定長形式で単語を表す必要がある。
そこで単語をベクトルに変換して表現する方法が開発された。
まず、One-hotベクトル表現がある。これは、各単語ごとに簡便なロジックで表現が出来るが、1万語あれば、1万次元のベクトルが必要になり、しかもほとんどゼロの疎なベクトルである。これは計算リソース上無駄が多いので、数百次元で単語を表現できる分散表現が考案された。
分散表現
one-hotベクトルでは、すべてのベクトル値を1か0で表すが、分散表現では、様々な数値をとる。また、単語同士の演算も可能で、単語の類似度も計算が出来る。
one-hotベクトルに比較して少ない次元数で表現が可能なので、データサイズを抑えることが出来る。
Word2vecの仕組み
Word2vecの基本的な仕組みは、2層のニューラルネットワークを用いて文章中の単語を予測するものである。
Word2Vecには、CBowと、skip-gramの2つのニューラルネットワークモデルが搭載されている。
- CBOW
周囲の単語からある単語を予測するモデル
- Skip-gram
ある単語からその周囲の単語を予測するモデル。
Section7 Attention Mechanism
seq2seqでは、2単語でも100単語でも固定次元ベクトルの中に入力をしなくてはならず、長い文章への対応は難しい。
そこで、文章が長くなるほどそのシーケンスの内部表現の次元が大きくなる仕組みとしてAttention機構が考案された。これは、「入力と出力のどの単語が関連しているのか」の関連度を学習する仕組みである。
attentionは、どの要素に注目すべきかを推論し、その部分を集中的に処理することで、推論の精度を向上させる。自然言語処理で注目されたが、その後画像処理にも応用されている。
- 確認テスト
RNNとword2vec,seq2seqとAttentionの違いを簡潔に述べよ
[解答]
・RNNは時系列のデータを処理するのに適したネットワークである。word2vecは単語の分散表現を得るためのネットワークである。
・seq2seqは、ある時系列データから、別の時系列データを得るための手法である。Attentionは、時系列データの関連性にそれぞれ重みをつける手法である。