Speech and Language Processing 9章 RNNによる系列の処理

Speech and Language Processing 9章 RNNによる系列の処理

68f09427f1f07e782003aff23700ec3b?s=128

CookieBox26

June 30, 2020
Tweet

Transcript

  1. Speech and Language Processing 9章 RNN による系列の処理 +α Dan Jurafsky

    and James H. Martin. Speech and Language Processing (3rd ed. draft). https://web.stanford.edu/~jurafsky/slp3/ 2020 年 6 月 30 日 三原 千尋 テキスト
  2. 9章 RNN による系列の処理 9.1 Simple RNN 9.2 RNN の応用 9.3

    多層 RNN と双方向 RNN 9.4 文脈の管理 ― LSTM と GRU 9.5 単語、部分語、文字 10章 エンコーダ-デコーダモデル、アテンションと文脈の埋め込み 10.1 ニューラルネット言語モデル再訪 10.2 エンコーダ-デコーダネットワーク 10.3 アテンション 10.4 エンコーダ-デコーダネットワークの応用(本文ほぼなし) 10.5 Self-Attention と Transformer (本文なし)
  3. 言語は単語(文字、音素…)の系列データになっており、私たちは単語(文字、音素…)を 流れてきた先から順に処理している。→ 言語処理モデルはこのような流れを考慮している? ナイーブベイズ分類器(4章)、ロジスティック回帰による分類器(5章): • これらは何番目にどの単語がきたかを考慮するモデルではない(特徴の設計によっては単語の並 びを部分的には考慮できるが)。文章の途中までに対して何か特徴を出すようなこともしない。 固定長の単語列を入力して何か予測するニューラルネットモデル: • これは何番目にどの単語がきたかを考慮しているが、文章の途中までに大して何か特徴を出すよ

    うなことはしない。また、任意の長さの文章を扱うことはできない。 固定ウィンドウ幅を入力にしたニューラルネット単語予測モデル(7章): • これは文章に対して順にウィンドウ内の単語とその並びを参照し、次の単語を予測していく。 • ただし、ウィンドウの範囲に入っていない過去の単語は参照できない。 • ウィンドウをスライドさせていく方式は語のまとまりの意味を捉えにくい(※)。 9章 RNN による系列の処理 constituency ― 構成素。語のまとまり。 ground the in hole there lived ground the in hole there lived 入力単語 予測対象 ※ the ground というフレーズは、ある ステップでは入力の2語目と3語目にな るが、次のステップでは1語目と2語目 になる(右図)。ネットワークは両方 のパターンを学習しなければならない。 そこで、再帰的ニューラルネットワーク(RNN: Recurrent Neural Networks)を導入すると 文章の流れ(文脈)を取り扱うことができ、可変長の入力も扱うことができる。
  4. U + W g V f U + W g

    V f + W g V f x1 x2 x3 h1 h2 h3 U h0 y1 y2 y3 9.1 Simple RNN + W g V f xt U ht yt RNN ― 再帰路をもつニューラルネットワーク構造のこと。i.e. 現在のステップの出力を計算 するのに過去のステップの(中間)出力を利用するニューラルネットワークのこと。 Elman Networks or Simple RNN (SRN) (Elman, 1990) • 最も基本的な RNN であり、より複雑な RNN の基礎となる。 • 今後単に RNN といったとき、このネットワーク構造を指す。 * * + 重みの行列 活性化関数 足し算 ~ ~ ht-1 現在の 入力 現在の隠れ状態 前回の隠れ状態 現在の 出力 再 帰 路 任意の長さの 入力系列を 扱える 前回までの文脈を 取り入れられる ( U がどれだけ取り 入れるかを決める) 時間方向 に展開 ℝ ℝ×ℎ ℝℎ×ℎ ℝℎ ℝ ℝℎ× …
  5. 9.1.1 Simple RNN による推論 現在の出力 を計算するには、現在の入力 と前回の隠れ状態 ℎ−1 を用いる。 前回の隠れ状態

    ℎ−1 を得るのには前回の入力 −1 と前々回の隠れ状態 ℎ−2 が必要なため、 結局 を得るには、現在までの全ての入力 1 , 2 , ⋯ , と隠れ状態の初期値 ℎ0 (典型的には 0 にする)を用いて逐次的に ステップ計算することが必要になる。 Simple RNN 1 1 ℎ1 ℎ0 Simple RNN 2 2 ℎ2 Simple RNN 3 3 ℎ3 ℎ−1 Simple RNN ℎ … 1ステップ 計算後 2ステップ 計算後 3ステップ 計算後 ステップ 計算後 ℎ = ℎ−1 + = (ℎ )
  6. 9.1.2 Simple RNN の訓練 Simple RNN で学習する対象は重みの行列 , , である。いま時刻

    の出力 に対する損失が であったとする。このとき , , をどう更新すべきか考える。 , () = , () , () , () = , () ′ , ≡ out,, + ℎ−1 損失 ℎ () () () () = , + , , + , , () , () = ሚ ℎ,, , ① の第 j 成分に関する勾配までたどる。便利のためこの勾配を out,, と表記する。 ℎ, = ෍ , () , () ℎ, = ෍ , () σ′ ′ ℎ,′ ℎ, = ෍ , () = , () , () = , () σ′ ′ ℎ,′ = out,, ℎ, ① ② さらに ② の (j, k) 成分に関する勾配までたどる。これが の に関する勾配。 ③ さらに ③, ④ の第 k 成分に関する勾配までたどる。便利のため ④ での勾配を ሚ ℎ,, と表記する。 , + , = ෍ , () , () ℎ, ℎ, , + , = ෍ , () ′ , + , ≡ ሚ ℎ,, ④ ⑤ ⑥ さらに ⑤, ⑥ の (k, l) 成分に関する勾配までたどる。これが の , に関する勾配。 = ሚ ℎ,, ℎ−1, ※ 図の notation を採用する。 教科書 (9.2) 式の g’は f’の誤植と思われる。 out, ሚ ℎ, (9.2) (9.3) 中間層 の誤差 出力層 の誤差
  7. 9.1.2 Simple RNN の訓練(続き) 時刻 での を小さくするだけなら , , を以下にしたがって更新すればよい。

    = ሚ ℎ,, ℎ−1, = ሚ ℎ,, , = out,, ℎ, + ℎ−1 損失 ℎ () () () () ① ② ③ ④ ⑤ ⑥ out, ሚ ℎ, 但し、④ の箇所(中間層)における値は だけでなく +1 , +2 , ⋯ の値に影響するので、それも考慮すると ሚ ℎ, を修正する必要がある。 ℎ−1, = ෍ , () , () ℎ−1, = ෍ , () σ′ ′ ℎ−1,′ ℎ−1, = ෍ ሚ ℎ,, ⑦ −1, + −1, = ℎ−1, ℎ−1, −1, + −1, = ෍ ሚ ℎ,, ′ −1, + −1, ⑧ ሚ ℎ,, ( + 1) = ෍ 1 ሚ ℎ,+1,1 1 ′ , + , ሚ ℎ,, ≡ ෍ , () ′ , + , ሚ ℎ,, ( + 1) を導出するため、前頁の続きで、さらに ⑦, ⑧ までたどる。 ሚ ℎ,, ( + 2) = ෍ 1 ሚ ℎ,+1,1 + 2 1 ′ , + , ℎ,, = ሚ ℎ,, + ሚ ℎ,, + 1 + ሚ ℎ,, + 2 + ⋯ = ෍ 1 ෍ 2 ሚ ℎ,+2,2 21 ′ +1,1 + +1,1 1 ′ , + , への 影響 +1 への 影響 +2 への 影響 これが ሚ ℎ,−1, なので、 ሚ ℎ,, ( + 1) や ሚ ℎ,, ( + 2) は以下のようになる。 (9.4) ※ 独自の notation である。 1 が繰り返し掛け算 されるので勾配爆発 or 消失しやすい。 中間層 の誤差 出力層 の誤差
  8. 9.1.2 Simple RNN の訓練(続き) 実際の RNN の訓練には BPTT のような手法を用いる。 Backpropagation

    through time (BPTT) ― Simple RNN などの RNN を訓練するときに用いられる 一般的なアルゴリズム(以下の例は Backpropagation through time - Wikipedia を参考にした)。 1 1 ℎ1 ℎ0 2 2 ℎ2 ℎ−2 −1 −1 … ℎ−1 out, ሚ ℎ, 1 1 ℎ1 ℎ0 2 2 ℎ2 ℎ−2 −1 −1 … ℎ−1 ሚ ℎ,−1 () ሚ ℎ,2 () ሚ ℎ,1 () 1. ネットワークを ステップまで展開 し、ℎ0 , 1 , 2 , ⋯ , から逐次的に隠れ 状態と出力を計算する。時刻 にお ける損失 が求まる。 2. 時刻 における out, と ሚ ℎ, がまず 求まる。さらにさかのぼっていくと ሚ ℎ,−1 , ⋯ , ሚ ℎ,2 , ሚ ℎ,1 が求まる。 3. ネットワークを以下で更新する。 4. アルゴリズムの次のステップのため ℎ1 = ℎ0 + を求めておく。 5. 1. に戻って ℎ1 , 2 , 3 , ⋯ , +1 に対し 同じ手順を繰り返す。 ← − out, ℎ ℎ ℎ መ ℎ, = ሚ ℎ, + ෍ =1 −1 ሚ ℎ,− ← − መ ℎ, ← − መ ℎ, ℎ−1
  9. 9.1.3 計算グラフとしてのネットワークの展開 • 文章を単語レベルの系列とみて学習するような場合、入力する個々の文章の長さに応じて ネットワークを展開し、それを用いて推論や通常の誤差逆伝播をすることがある。 • 音声認識や文字レベルの文章の学習のときは一系列がとても長くなるので、適当な固定長 で区切って取り扱うのが一つの方法である。

  10. 9.2 RNN の応用 9.2.1 再帰的ニューラルネット言語モデル (Mikolov et al., 2010) これまでに扱った次の単語を予測するモデルは以下があった。

    • N-gram 言語モデル(3章) • 固定ウィンドウ幅ニューラルネット単語予測モデル(7章) これらのモデルは直前の N 語しか用いないので以下を仮定しているという制約がある。 1 −1 ≈ −+1 −1 1 −1 = ො = softmax ℎ RNN を用いたモデルは原理的には隠れ状態を通じて過去のすべての単語の情報を受け取れる ので、この制約は取り払われる。 Simple RNN を用いたモデルは を − 1 番目の単語の埋め込みとして以下のように表せる。 ℎ = ℎ−1 + 訓練時の損失関数は交差エントロピー(予測が正しい確率の対数の -1 倍)を用いる。 ො , = −log ො , ො は 次元のベクトル は語彙サイズ 正しい単語のインデックス
  11. 9.2.1 再帰的ニューラルネット言語モデル(続き) 言語モデルを用いるとランダムな文章を生成することができる (Shannon, 1951)。 • 文頭トークン <s> を入力して予測分布を生成し、文の最初の単語をサンプリングする。 •

    同様に、文の最初の単語を入力して予測分布を生成し、2番目の単語をサンプリングする。 • 文末トークン </s> がサンプリングされてくるか、単語数が上限に達したら終わる。 生成された文章のよさの評価指標にパープレキシティがある。小さいほどよい。 () = ෑ =1 1 ( |−1 ) このような文章生成を autoregressive generation といい、後に機械翻訳、要約、質問応答 モデルでも利用されている。それらでは生成すべき文章に応じた ℎ0 をフィードする。 実際のコーパス内 の経験分布 RNN 1 ℎ0 埋め込み Sample 1 0 = <s> RNN 2 ℎ1 埋め込み Sample 2 ℎ2 Sample 3 RNN 3 埋め込み ℎ3 Sample 4 RNN 4 埋め込み ℎ4 ランダムな文章 単語の予測分布
  12. 9.2.2 系列ラベリング RNN で系列の各要素にタグ付けもできる。→ 典型例は品詞タグ付けタスク。 RNN 1 ℎ0 埋め込み 1

    RNN 2 ℎ1 埋め込み ℎ2 RNN 3 埋め込み ℎ3 RNN 4 埋め込み ℎ4 品詞の予測分布 2 3 4 系列ラベリングの他の例: 固有表現抽出 ― 文章のどの部分が人名/地名/組織名/…なのか を判定する。 Denver United cancelled the flight from Francisco to San B O B O O O O B I IOB エンコーディング (Ramshaw and Marcus, 1995) 固有表現抽出時のアノテーション方法であり、以下の B, I, O のラベルを付けることで、「文章から 固有表現部分を抽出するタスク」を「単語ごとのクラス分類タスク」に帰着させることができる。 • B ― 興味がある固有表現の開始位置である • I ― 興味がある固有表現の内側である • O ― 興味がある固有表現の外側である 「人名」「地名」「組織名」のようにタイプ別で判定したいときは、B, I のラベルを B-PER, B-LOC, B-ORG, I-PER, I-LOC, I-ORG のように増やす。 文章中の単語
  13. 9.2.2 系列ラベリング(続き) 系列ラベリングの他の例: 文構造の予測(structure prediction)― 文章を入力して構文木 (parse tree)や意味表現(meaning representation)を出力するタスク。→ 15章参照。

    ビタビアルゴリズムと条件付き確率場(CRF) 8章(品詞タグ付け)でみたように、各単語に対して予測確率最大のタグを採用すると、必ず しも系列全体のタグ付けとして最適にならない。IOBラベル予測の場合、不正なラベル列が出 現する可能性もある(Ex. O → I や B-PER → I-LOC など)。 これへの対策として、予測分布列に対して改めてビタビアルゴリズムを適用することができる。 実際には、ネットワークの最終層に CRF 層を加える方法がとられる (Lample et al., 2016) 。
  14. 9.2.3 系列のクラス分類 RNN で系列全体を分類することもできる。 • センチメント分類 • トピック分類 • スパムメール検知

    • お客様のお問合せ内容の分類 この場合、文章全体を入力し終わった時点での隠れ状態 hn が文章全体の特徴となっていると 考え、これを適当な feedforward network で変換してクラスの予測分布にする。 U + W g U + W g + W g x1 x2 x3 h1 h2 h3 U h0 + W g FFN softmax xn yn hn-1 hn 文章全体の特徴 予測分布 … 分類対象の文章 (の各単語の埋め込み) この場合、専ら文章の最後の単語を入れた時点での損失に対し てネットワークを学習することになる(文章の途中での出力に ついては何にフィットさせるとかはない)。 このように(中間タスクを置かず)最終目標に対してネット ワーク全体を学習するやり方を end-to-end training という。
  15. 9.3 多層 RNN と双方向 RNN 9.3.1 多層RNN(Stacked RNN) RNN は積み重ねてもよい

    (Stacked RNN)。 1 2 3 1 2 3 RNN(1) ℎ 0 (1) RNN(1) RNN(1) RNN(1) … ℎ 1 (1) ℎ 2 (1) ℎ 3 (1) ℎ −1 (1) ℎ (1) RNN(2) ℎ 0 (2) RNN(2) RNN(2) RNN(2) … ℎ 1 (2) ℎ 2 (2) ℎ 3 (2) ℎ −1 (2) ℎ (2) RNN(3) ℎ 0 (3) RNN(3) RNN(3) RNN(3) … ℎ 1 (3) ℎ 2 (3) ℎ 3 (3) ℎ −1 (3) ℎ (3) • Stacked RNN は層ごとに異なる抽象度の特徴を学習することができる。 • 実際、Stacked RNN はさまざまなタスクで1層 RNN の性能を上回ることが確かめられている。 • 何層重ねるとよいかはタスクに依存するが、層数を増やすと学習コストは急激に増大する。
  16. 9.3.2 双方向 RNN (Bi-RNN) (Schuster and Paliwal, 1997) 最初から文章全体を参照することができる場合は、ある単語の特徴を求めるのに前方だけで なく後方の情報も利用した方がよい。→

    もう一つ別に逆向きの RNN を用意する。 RNN f ℎ 0 RNN f RNN f RNN f … ℎ 1 ℎ 2 ℎ 3 ℎ −1 ℎ RNN b ℎ1 RNN b RNN b RNN b … ℎ2 ℎ3 ℎ4 ℎ ℎ+1 1 2 3 1 2 3 ℎ 1 ℎ 2 ℎ 3 ℎ ℎ ℎ1 ℎ2 ℎ3 ℎ 1 ℎ1 ℎ 2 ℎ2 ℎ 3 ℎ3 ℎ ℎ その単語 の特徴 (concat) • Bi-RNN は系列のクラス分類に効果的である: 通常の RNN では文章の終わりの方の入力に強い 影響を受けてしまう。そこで、後ろ向きの RNN を組み合わせると文章の前の方も考慮できる (図 9.12)。 ※ 特徴の組み合わせ方は concat に限らず、和、 平均、アダマール積など が用いられることもある。 前向き 後ろ向き
  17. 9.4 文脈の管理 ― LSTM と GRU 実際には RNN で何ステップも離れた単語の特徴を反映することは難しく、考慮できる範囲 は局所的になってしまう。しかし、実際には離れた単語の情報がクリティカルなこともある。

    例えば、以下の文章の were の箇所に(was でなく)were を正しく割り当てるには、flights を覚えていなければならない。 The flights the airline was cancelling were full. Simple RNN で何ステップも情報を伝達する ことが難しい理由は主に2点ある。 1. 行列 U が異なる2つの役割を担わされて しまっている。 • 前回の特徴をどれだけ取り入れるか • 現在の特徴を次回にどれだけ受け渡す か 2. 勾配消失問題 ― 未来の損失を現在まで 誤差逆伝播させると中間層が何回も掛け 合わされ、勾配が消失する。 U + W g V f U + W g V f + W g V f x1 x2 x3 h1 h2 h3 U h0 y1 y2 y3 h1 を どれだけ 取り入れ るか h2 を どれだけ 受け渡す か ሚ ℎ,, ( + 2) = ෍ 1 ෍ 2 ሚ ℎ,+2,2 21 ′ +1,1 + +1,1 × 1 ′ , + ,
  18. 9.4.1 Long short-term memory (LSTM) (Hochreiter and Schmidhuber, 1997) LSTM

    は以下の仕組みを導入した。 • 記憶セルを設置し、そこに必要 な情報を書き加えたり、そこか ら不要な情報を消去したりして 情報を伝達していく方式にする ことで勾配消失を防いだ。 • ゲート(現在の入力と前回の隠 れ状態に応じて情報を適宜マス キングする仕組み)を導入し、 複数のゲートで役割分担して情 報の流れを制御した。 + × + + + tanh × + tanh × −1 ℎ ℎ−1 ℎ Forget Gate Output Gate Input Gate × はアダマール積 記憶セル 出力 現在の入力 = ℎ−1 + , = ⊙ −1 = tanh ℎ−1 + ② 通常の RNN 同様に現在の特徴を読み取る。 = ℎ−1 + , = ⊙ ③ 特徴をどれだけ記憶に取り入れるべきか計算し (Input Gate)、特徴に適用する。 ④ ①に③を足し合わせて記憶を更新する。 ① 記憶をどれだけ忘れるべきか計算し(Forget Gate)、記憶に適用する。 = ℎ−1 + , ℎ = ⊙ tanh( ) ⑤ 記憶をどれだけ出力すべきか計算し(Output Gate)、出力する。 = +
  19. 9.4.2 Gated Recurrent Units (GRU) (Cho et al., 2014) +

    + × + tanh × ℎ ℎ−1 ℎ Update Gate Reset Gate 現在の特徴 現在の入力 = ℎ−1 + ෨ ℎ = tanh ( ⊙ ℎ−1 ) + ② Simple RNN 同様に現在の特徴を読み取る。 ただし、① のリセットを適用する。 = ℎ−1 + ③ 前回の特徴をどれだけ更新すべきか計算する (Update Gate)。 ④ ③ の更新率にしたがって特徴を更新する。 ① 前回の特徴をどれだけリセットすべきか計算 する(Reset Gate)。 Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation + × 1 − ෨ ℎ ℎ = 1 − ℎ−1 + ෨ ℎ LSTM は長期記憶性能がよいものの、訓練対象 がこれだけあり訓練が高コストになる。 記憶セル、 ゲート機構が ない場合はこ れだけ Gated Recurrent Units (GRU) はゲートの役割 分担をある程度維持しつつパラメータを節約する。
  20. 9.4.3 Gated Units, Layers and Networks LSTM や GRU は複雑なネットワーク構造をしているが、全体を一つのユニット(カプセル)

    と考えれば、ネットワークの設計上、ゲート機構のない RNN と同様に扱える(※ LSTM は 記憶セルがあるので隠れ状態が2本あるようにみえる)。 LSTM も GRU も 9.2 節の RNN の応用例で使用できるし、9.3 節のように多層にしたり双方 向にしたりもできる。 ℎ−1 ℎ + tanh ℎ−1 ℎ RNN ℎ−1 ℎ LSTM −1 ℎ−1 ℎ GRU
  21. 9.5 単語、部分語、文字 Words, Subwords and Characters ここまで基本的に文章を単語列だと捉えて処理してきたが、単語ベースのアプローチでは上 手く処理できないケースもある。 • 言語や応用によっては、単語数が埋め込むには多すぎることがある。

    • 十分大きな辞書を学習することができる場合でも、モデルの利用時に未知語、スペルミス、 他言語からの借用語などが混じってくることがある。 • 単語より細かい形態素(意味がある最小単位の文字の並び)も有用な情報をもつ。 単語レベル未満の情報を抽出するために以下のようなアプローチが編み出されてきたが、ど の方法が適するかは言語や応用に依存する。 • 単語の情報は完全に無視して文字系列として処理する。 • バイト対符号化や発音単位などをもとにした部分語に分割して処理する。 • 本格的に形態素解析する。 一つの有用な手法として、単語の埋め込みと文字系列の埋め込みを組み合わせる方法がある (次頁)。
  22. 9.5 単語、部分語、文字 Words, Subwords and Characters(続き) concat RNN 1 ℎ0

    1 品詞の予測分布 concat RNN 2 ℎ1 2 単語として 埋め込み 文字レベル Bi-RNN 単語として 埋め込み 文字レベル Bi-RNN 単語として 埋め込み 文字レベル Bi-RNN concat RNN 2 ℎ2 3 文章中の単語 ℎ3 =“Janet” RNN f RNN b 文字として 埋め込み RNN f RNN b 文字として 埋め込み RNN f RNN b 文字として 埋め込み RNN f RNN b 文字として 埋め込み RNN f RNN b 文字として 埋め込み concat J a n e t 初期値 初期値 単語の埋め込みベクトル を文字レベルの情報で拡 張する。 文字レベルの埋め込みも 訓練対象の文章全体を通 じて学習される。
  23. 9.6 まとめ • RNN は現在の入力だけでなく前回までの文脈も考慮した特徴を出力することができる。 • RNN は通常の FFN の誤差逆伝播法を拡張した方法で訓練できる(BPTT)。

    • RNN の自然言語処理への利用例としては以下のようなものがある。 • 確率的言語モデル(与えられた単語列に続く単語の予測) • 訓練した言語モデルによる文章生成 • 系列ラベリング(各要素へのラベリング)― 例. 品詞タグ付け • 系列クラス分類(系列全体のクラス分類) ― 例. スパム分類、センチメント分類 • Simple RNN は勾配が消失しやすいため、長いステップを間に空けた依存関係を学習する ことが難しい。 • LSTM や GRU は記憶セルを設置したりゲートを設置したりすることでその問題を克服し ている。
  24. ★ RNNの起こりと利用 • 1980年代 ― UC San Diego の Parallel

    Distributed Processing (PDP) グループがヒトの認知のモデル として RNN を研究する (Rumelhart et al., 1986b) (McClelland et al. 1986)。 • 1994年 ― 信号処理や言語処理でも RNN の研究が盛んになる (Giles et al., 1994)。 ★ RNNの構造の発展 • 1986年 ― 出力層を再帰するモデルが提案される (Jordan, 1986)。 • 1986年 ― RNN の FFN への展開が議論される (Rumelhart et al., 1986b)。 • 1990年 ― Elman Network が提案される (Elman, 1990)。 • 1995年 ― 隠れ層の前に再帰的なコンテクスト層を加えたモデル (Mathis and Mozer, 1995)。 • 1997年 ― Bi-RNN が提案され、TIMIT 音声認識で性能が示される (Schuster and Paliwal, 1997)。 • 1997年 ― LSTM が提案され (Hochreiter and Schmidhuber, 1997)、後に様々なタスクで特筆すべき 性能を示す。 • 信号処理と言語処理の境界領域のタスク (Graves and Schmidhuber, 2005)。 • 手書き文字認識 (Graves et al., 2007)。 • 音声認識 (Graves et al., 2013)。 ★ RNNと自然言語処理 • 2008-2011年 ― 様々な自然言語処理の代表的なタスクが、単語埋め込み + 畳込みネットワークに よって人手でつくった特徴量なしに解かれる (Collobert and Weston, 2008) (Collobert et al., 2011)。 • 2013年 ― word2vec + LSTM が提案される(Mikolov et al., 2013)。 • 2014年 ― GLOVE + LSTM が提案される(Pennington et al., 2014)。 • 2015-2016年 ― 単語埋め込みと LSTM の組み合わせがさまざまなタスクを席巻する。 • 品詞タグ付け (Ling et al., 2015) • syntactic chunking (Søgaard and Goldberg, 2016) • named entity recognition via IOB tagging (Chiu and Nichols, 2016) (Ma and Hovy, 2016) • opinion mining (Irsoy and Cardie, 2014) • semantic role labeling (Zhou and Xu, 2015) • AMR parsing (Foland and Martin, 2016)
  25. 10章 エンコーダ-デコーダモデル、アテンションと文脈の埋め込み 9章の RNN のモデルはどれも入力系列の各ステップごとに適切な文脈や単語を出力するもの だった。これを拡張して、入力系列から適切な長さの系列を出力するモデル = エンコーダ- デコーダモデル(seq2seqモデル)にする。エンコーダ-デコーダモデルは機械翻訳、要約、 質問応答、会話モデルなどに広く利用されている。

    具体的には、入力系列をエンコーダでコンテクストベクトルに変換し、それをデコーダで出力系列に 変換する。 1 ℎ0 ℎ1 1 2 ℎ2 2 3 ℎ3 3 4 ℎ4 4 1 , 2 , ⋯ , 9章はこうだった 1 , 2 , ⋯ , … エンコーダ 1 , 2 , ⋯ , 1 , 2 , ⋯ , デコーダ 10章ではこうしたい ℎ コンテクストベクトル contextualized representation 具体的にはこうする 適切な長さの系列
  26. 10.1 ニューラルネット言語モデル再訪 9.2.1節では適宜訓練した言語モデルに文頭トークンを入れてランダム文を生成した。 → 文頭トークンの代わりに “hole in the ground” というフレーズを入れて文を生成し始め

    たら、これに続く尤もらしい単語列が補われ、文が完成するはずである。 RNN ℎ0 埋め込み Sample 1 0 = <s> RNN ℎ1 埋め込み Sample 2 ℎ2 Sample 3 RNN 埋め込み ℎ3 Sample 4 RNN 埋め込み ℎ4 ランダムな文章 … RNN ℎ3 埋め込み Sample RNN ℎ4 埋め込み Sample ℎ5 Sample RNN 埋め込み ℎ6 Sample RNN 埋め込み ℎ7 “hole in the ground” に続きそうな単語列 … RNN ℎ2 埋め込み RNN ℎ1 埋め込み RNN ℎ0 埋め込み hole in the ground there lived a hobbit “hole in the”を受けた特徴
  27. 10.1 ニューラルネット言語モデル再訪(続き) → では、例えば英文とそれに対応する仏文を concat した文章のデータセットで言語モデル を学習すれば、英文を入力するとそれに対応する仏文を生成する機械翻訳モデルになるは ずである。 実際このアプローチは高性能を示し、本章で紹介するモデルの基礎となった。 RNN

    ℎ3 埋め込み Sample RNN ℎ4 埋め込み Sample ℎ5 Sample RNN 埋め込み ℎ6 Sample RNN 埋め込み ℎ7 “It is cloudy </s>” に続きそうな単語列 = It is cloudy の仏訳 … RNN ℎ2 埋め込み RNN ℎ1 埋め込み RNN ℎ0 埋め込み It is cloudy </s> Le temps est couvert Thanks </s> Merci </s> I see </s> Je comprends </s> I am busy </s> Je suis occupé </s> I want it </s> Je le veux </s> … 訓練データ(例) 推論(例) “It is cloudy”を受けた特徴 ※ 例の文章は適当。 ※ 機械翻訳モデルの学習に用いる言語Xの文章と言語Y の文章のペアのセットを bitexts という。 ※ 機械翻訳では翻訳対象の文章を source、それが翻訳 された文章を target という。
  28. 10.2 エンコーダ-デコーダモデル エンコーダ-デコーダモデルは以下の3要素からなる。 入力系列 1 を特徴系列 ℎ1 にする。 エンコーダ コンテクストベクトル

    特徴系列を適当に変換したベクトル = (ℎ1 ) であって、 デコーダに運ぶべき情報を運ぶ。 コンテクストベクトル から出力側の特徴系列 ℎ′ 1 を生成 し、さらに出力系列 1 を生成する。 デコーダ RNN ℎ3 埋め込み Sample RNN ℎ4 埋め込み Sample ℎ5 Sample RNN 埋め込み ℎ6 Sample RNN 埋め込み ℎ7 … RNN ℎ2 埋め込み RNN ℎ1 埋め込み RNN ℎ0 埋め込み It is cloudy </s> Le temps est couvert コンテクストベクトル エンコーダ デコーダ さっきの翻訳モデルはこれに当てはまる構成をしている。 コンテクストベクトルとして特徴系列の最後尾だけをつかっていることになる。
  29. 10.2 エンコーダ-デコーダモデル(続き) エンコーダ • Simple RNN, LSTM, GRU, CNN, transformer

    などがエンコーダとして利用できる。 • 積み重ねてもよいし、双方向にしてもよい。 • stacked Bi-LSTM が広く用いられている。 デコーダ • autoregressive generation によって出力系列を得る。 • 但し、コンテクストベクトルをデコーダRNNの隠れ状態の初期値にするアプローチで は入力系列の情報がすぐ減衰してしまう。これへの対策としては、以下が考えられる。 • 毎ステップの隠れ状態をコンテクストベクトルの関数にもする。ℎ () = (ෝ −1 , ℎ−1 , ) • 毎ステップの出力をコンテクストベクトルの関数にもする。ෝ () = (ෝ −1 , , ) RNN() ℎ 0 () embed() 1 () ℎ 1 () 2 () ℎ 2 () … ℎ −1 () () ℎ () ℎ 0 () ෝ 1 () = <s> ℎ 1 () ℎ 2 () ℎ 3 () sample ෝ 2 () ෝ 2 () ෝ 3 () ෝ 3 () ෝ 4 () RNN() RNN() RNN() RNN() RNN() embed() embed() embed() embed() embed() sample sample
  30. 10.2 エンコーダ-デコーダモデル(続き) ビームサーチ デコーダから毎ステップ出力される分布にしたがって出力系列を生成するとき、毎ステップ 確率最大の単語を選んでいたのでは、文章全体として意味が通るとは限らない。9.2.2 節では CRF 層を追加することで同様の問題に対処したが、翻訳タスクは部分タスクにすることがで きず同じ解決方法が取れない。→ ビームサーチを用いる。

    • デコード1単語目は上位B単語まで選ぶ。 • デコード1単語目のそれぞれに対して2単語目を生成した後、1単語目と2単語目の確率の積 が大きい方からB番目までのパスに絞る(ことで探索パス数が爆発するのを防ぐ)。 • B本のパスのそれぞれが文末トークンに出くわすまで続ける。 ただし、こうれで最終的に得られるB個の文章の長さはそれぞれ異なりうるので、最終候補を 選ぶときに単純に確率の積で比較することはできない。何か正規化することになる。
  31. 10.3 アテンション コンテクストベクトルは入力系列の長さに寄らず同じ次元のベクトルでなければならないが、 • 単にエンコーダの最後の隠れ状態を採用すると、文章の前方の情報を捉えにくい。 • Bi-RNN にする、毎ステップの隠れ状態の和にする、…などの方法もあるが、どうしても 入力の各ステップの特徴の情報を損ねてしまう。 そこで、デコード時の各ステップで、入力の各ステップの特徴を固定長のベクトルにまとめて

    取り込むための重み付けを学習すればよい(アテンション)。 RNN() ℎ 0 () 1 () ℎ 1 () 2 () ℎ 2 () … ℎ −1 () () ℎ () ℎ 0 () ෝ 1 () = <s> ℎ 1 () ℎ 2 () ℎ 3 () sample ෝ 2 () ෝ 2 () ෝ 3 () ෝ 3 () ෝ 4 () RNN() RNN() RNN() RNN() RNN() sample sample attn × ℎ 1: () ℎ 1: () デコードの 番目のとき、現在の状況が入力時の各 番目の特徴とどれくらい関連しているか score(ℎ −1 , ℎ ) を計算 し softmax した 個の重み。score は単なる内積でもよいが、 score ℎ −1 , ℎ = ℎ −1 Tℎ とすればよりタスクに 適合できる。重みを改めて ℎ 1: () に適用することで固定長のベクトルにまとめられる。 attn embed() embed() embed() embed() embed() embed() テキストでは利用していないが 入力を利用することもある。 10.2 節の最後 Context のブロックにある内容 隠れ状態の初期値にしたり、そのまま 何かの関数の引数にする限りでは、 attn × ℎ 1: () attn × ℎ 1: ()