「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
コチラで説明した通り。
詳細 †
Encoder-Decoder †
- 入力
翻訳前単語列(x1, x2, ... ,xi)
- 出力
- 翻訳後単語[確率]列(P(y1), P(y2), ... ,P(yi))
- この確率分布(p(yi))から(BEAM searchで)単語(yi)を選ぶ。
- Encoder:
GRUを使用して、
- 文(x1, x2, ... ,xi)を意味ベクトルCへ変換。
- 意味ベクトルCは一番最後の再帰段階の隠れ状態(C = Sn^(e))
- P(yi) = P(yi|yi-1, Si^(d), C)
P(yi):単語の確率, yi-1:前の単語, Si^(d):隠れ状態, C:意味ベクトル
- RNNにはどの再帰の段階でも意味ベクトルCと隠れ状態(Si^(d))を入力する。
- 一番最初の再帰段階のRNNへの入力は[BOS]で、
隠れ状態は、例外的に意味ベクトルCを指定する。
- RNNの出力(Affine変換+Softmax)、単語の確率分布(p(yi))から単語(yi)を選ぶ。
- ニ番目以降の再帰段階のRNNへの入力は前段で選択した単語(yi-1)
<注意表現を学習する仕組み>
- 論文中は、AttentionではなくAlign(softalign / softsearch)(?)
- Attentionとは簡単に言うと、
- 注意の英単語である Attentionからきている。
- 従来の意味ベクトルではなく、入力単語への参照を追加した文脈を加味した単語ベクトル。
- 「時間の重み」の概念をネットワークに組み込んだもの。
- 近年、Attention機構を追加することにより精度が向上したモデルも多い。
- Attentionの重みによってどの時間の入力を重視しているか確認することが可能。
- LSTMなどで使用されているゲート機構に似ている。
- 必要な情報は強調し、不必要な情報は目立たなくする。
- より良い注意表現を学習できれば膨大な情報から
注意を向けるべき情報に焦点を当てて処理をすることが可能になる。
- Enc-Dec、Seq2Seqの問題は
- 「本質」の意味ベクトルが固定次元なので長い系列の場合、意味が入り切らない点。
- 実際に、機械翻訳タスクで長文では単語数が増えるに連れて精度が下がって行く。
- この問題を解決するために、Attentionは固定次元の意味ベクトルに入力系列への参照を追加した。
- 機械翻訳タスクでは、文中の単語の意味を理解する時に、
文中のどの単語に注目すれば良いかを表すスコアとなる。
- 入力単語~出力単語、どれに対応しているか?(対応付けの良さ)の重みを計算する。
- 入力の各単語のベクトルの重みを足して、出力が注意を向けるべき情報を入力から得る。
- 例えば英語でitが出て来たら、その単語だけでは翻訳できない。
itを含む文章中のどの単語にどれだけ注目すべきかというスコアを表す。
<RNN Encoder-Decoder>
- 入力
翻訳前単語列(x1, x2, ... ,xi)
- 出力
- 翻訳後単語[確率]列(P(y1), P(y2), ... ,P(yi))
- この確率分布(p(yi))から(BEAM searchで)単語(yi)を選ぶ。
- Encoder:
Bidirectional な GRUを使用し、
- 文(x1, x2, ... ,xi)の前後の文脈を加味して単語をベクトル化(Annotation)。
- コレは→方向と←方向の2つのベクトル(→hj, ←hj)をconcatして縦ベクトルに変換したもの(hj)。
- ←方向のEncoderの一番最後の再帰段階の単語ベクトルをDecoderの最初の隠れ状態として使用する(S0^(d) = ←h1)。
- P(yi) = P(yi|yi-1, Si^(d), Ci)
P(yi):単語の確率, yi-1:前の単語, Si^(d):隠れ状態, Ci:文脈を加味した単語ベクトル
- RNNにはどの再帰の段階でも隠れ状態(Si^(d))を入力する。
- 一番最初の再帰段階のRNNへの入力は[BOS]で、
隠れ状態は、例外的に←方向のEncoderの一番最後の再帰段階の単語ベクトルを指定する(S0^(d) = ←h1)。
- RNNの出力(single maxout+Softmax)、単語の確率分布(p(yi))から単語(yi)を選ぶ。
- ニ番目以降の再帰段階のRNNへの入力は前段で選択した単語(yi-1)
- C → Ci は、従来の意味ベクトルではなく、入力単語への参照を追加した文脈を加味した単語ベクトル。
再帰セルに2層のNNを重ね(Attention機構、Align(softalign / softsearch))、どの単語に注目するかSi^(d)とhjで重みeijを決め、
αはSoftmax(eij)で計算されるのでCiはΣが1になるようにhjに重みを付け(≒注目)てΣしたもので、以下の計算を行い決定する。
- eij = tνa tanh(WSi-1^(d) + Uhj) ※ tνa はνaの転置
- Si^(d):Decoderの隠れ状態(再帰セルの出力)
<Q、K、VからAttentionを計算する図>
- Q、K、V
QとKを使って加重が計算され、Vの加重和がAttention
- Query Q
decoderのRNNセルから出力される情報:Si-1^(d)
- Key K
encoderから連動される各語彙のembeddingベクトル:hj
- メモリセルをKey・Valueの対で構成し、
Queryに近いKeyでメモリセルからValueを返すと言う、
KVSが語源になっているが実際の仕組みは全然違う。
- y = f(x, h(, r)) の精度向上に関する情報 r を、
x, h に応じて、メモリから拾い上げる機能を実現する。
参考 †
Qiita †
YouTube? †