Publicité
Publicité

Contenu connexe

Similaire à ChainerによるRNN翻訳モデルの実装+@(20)

Publicité
Publicité

ChainerによるRNN翻訳モデルの実装+@

  1. 16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 1 Chainerによる RNNLM・RNN翻訳モデルの実装 +@ Yusuke Oda 2016/03/07 関西MT勉強会
  2. 16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 3 Sequence-to-sequence 翻訳(一般人向け) ● 部分的な変換ルールは学習せず、文全体の情報を用いて翻訳 直訳手法 原言語 目的 言語 理解 原言語を解析 分解 細かいルールに分割 再構築 ルールを結合 原言語 目的 言語 理解 原言語の 意味を抽出 再構築 意味表現から 直接単語を生成 Sequence-to-sequence 意味表現
  3. 16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 4 ニューラルネット翻訳(一般人向け) ● Sequence-to-sequence 翻訳の一種 ● 意味の解析・単語の生成にニューラルネットを使用 – 複雑さ: 従来の翻訳アルゴリズムよりも単純 – 翻訳精度: 設定次第で従来手法に匹敵 原言語 目的 言語 ニューラル ネット (単語生成) ニューラル ネット (意味解析) 意 味 表 現 ● Encoder-decoder 翻訳モデル – 最も簡単な sequence-to-sequence 翻訳モデル – リカレントニューラルネットを使用
  4. 16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 5 リカレントニューラルネット (1) ● リカレントニューラルネット (Recurrent Neural Network: RNN) – フィードバック付きのニューラルネット – 時系列データの解析によく用いられる
  5. 16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 6 リカレントニューラルネット (2) ● 時間方向に伸展したRNN – 中間層には入力の種類と順序に関する情報が蓄積される(はず) データ1 データ2 データ3 データ1 データ1  →データ2 データ1  →データ2   →データ3
  6. 16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 7 Encoder-decoder 翻訳モデル (1) ● 原言語側と目的言語側の2本のRNNを結合 – 原言語側 … 入力単語の情報を蓄積 – 目的言語側 … 蓄積された情報を取り出しながら単語を生成 END runs he 走る は 彼 Encoder Decoder
  7. 16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 8 Chainer で Encoder-decoder 翻訳 ● Chainer - http://chainer.org/ – ニューラルネットのフレームワーク – ソースコードの計算式がそのままニューラルネットの構造になる ● 複雑な形状のニューラルネットを記述するのに最適 は (一例、他の定式化も可能)
  8. 16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 9 Chainer で Encoder-decoder 翻訳 ● Chainer - http://chainer.org/ – ニューラルネットのフレームワーク – ソースコードの計算式がそのままニューラルネットの構造になる ● 複雑な形状のニューラルネットを記述するのに最適 import numpy as np import chainer.functions as F import chainer.links as L from chainer import Variable xi = L.EmbedID(VOCAB, EMBED) ip = L.Linear(VOCAB, HIDDEN) pp = L.Linear(HIDDEN, HIDDEN) ... x = Variable(np.array([[w]], dtype=np.float32)) i = F.tanh(xi(x)) p = F.tanh(ip(i) + pp(p)) は
  9. 16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 10 Encoder-decoder 翻訳の実装 # encoding _p, p = init()­­­­­­­­­­­­­­­­­­­­­­­­­­何か初期化 for word in reversed(sentence):   x = Var([[stoi(word)]])­­­­­­­­­­­­­­­単語ID化   _p, p = lstm(_p, xp(x) + pp(p))­­­­­­­LSTMに入力 ­­­­­­この時点でpに入力系列の情報が入っている(はず)­­­­­­ # decoding y = stoi('SOL') while y != stoi('EOL'):   _p, p = lstm(_p, yp(y) + pp(p))­­­­­­­デコーダの状態遷移   y = softmax(py(p)).data.argmax()­­­­­­次の単語   print(itos(y))              ● Enc-dec のナイーブな実装 (赤字: Chainer/NumPy関数、緑: 重み行列)
  10. 16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 11 Decoder Attention (1) ● Attention ... 入力の情報から必要な情報をその都度生成 – 入力長に(あまり)依存しない解析が可能 – 使いやすいらしく、割と色々応用されている ● 翻訳、キャプション生成、画像生成(ビットマップ、ベクタ)、構文解析、etc – 詳しくは http://www.slideshare.net/yutakikuchi927/deep-learning-nlp-attention SRC TRGEncoder DecoderEnc-dec Attention A quick brown fox jumps ... Enc 速い 茶色の
  11. 16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 12 Attention (2) ● Global attention ... 現在のデコーダ状態から各単語の重みを計算、線形和 [Luong et al., 2015, Effective Approaches to Attention-based Neural Machine Translation]
  12. 16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 13 Attention (3) ● Global attentionのナイーブな実装 (赤字: Chainer/NumPy関数、緑: 重み行列) a_list:入力単語のベクトル表現(encoderの出力), p:デコーダの状態 _p, p = init() y = stoi('SOL') while y != stoi('EOL'):   e_list = []­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­重みのリスト   e_sum = zeros(...)­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­分母   for a in a_list:     w = tanh(aw(a) + pw(p))­­­­­­­­­­­­­­­­­­­­­­­­­何か変換して     e = exp(we(w))­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­重み計算     e_list.append(e)     e_sum += e   c = zeros(...)­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­線形和   for a, e in zip(a_list, e_list):     e /= e_sum     c += reshape(batch_matmul(a, e), ...)   _p, p = lstm(_p, ch(p) + hh(p) + yh(Var([[y]])))­­次の状態   y = softmax(py(p)).data.argmax()­­­­­­­­­­­­­­­­­­次の出力   print(itos(y))
  13. 16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 14 Attention (4) ● Local attention ... 原言語の1か所に集中する縛りを導入 – Attentionの特性が鮮鋭になる 正規分布を掛け合わせて 中心から外れたところの重みを無視 (わりと雑…) Chainerで実装する場合は この式を追加するだけ [Luong et al., 2015, Effective Approaches to Attention-based Neural Machine Translation]
  14. 16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 15 LSTM (long/short-term memory) (1) ● LSTM ... 過去のRNNの全状態の線形和で次回の出力を生成 – 長距離のbackpropagationが「まともに」計算できるので、長周期の構造学習が可能 – Encoder-decoder系のネットワークでは使わないとお話にならない 電気回路っぽく書いた LSTMセル sigmoid tanh
  15. 16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 16 LSTM (long/short-term memory) (2) ● LSTM ... 過去のRNNの状態の線形和で次回の出力を生成 – 長距離のbackpropagationが「まともに」計算できるので、長周期の構造学習が可能 – Encoder-decoder系のネットワークでは使わないとお話にならない 電気回路っぽく書いた LSTMセル 赤: 記憶が行われるパス
  16. 16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 17 LSTM (long/short-term memory) (3) ● LSTM ... 過去のRNNの状態の線形和で次回の出力を生成 – 長距離のbackpropagationが「まともに」計算できるので、長周期の構造学習が可能 – Encoder-decoder系のネットワークでは使わないとお話にならない 電気回路っぽく書いた LSTMセル 赤: 記憶が行われるパス 青: ゲート
  17. 16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 18 LSTM (long/short-term memory) (4) ● LSTM ... 過去のRNNの状態の線形和で次回の出力を生成 – 長距離のbackpropagationが「まともに」計算できるので、長期の構造学習が可能 – Encoder-decoder系のネットワークでは使わないとお話にならない 電気回路っぽく書いた LSTMセル 赤: 記憶が行われるパス 青: ゲート 緑: Peephole connection (Chainerの標準実装には 今の所ないようなので注意)
  18. 16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 19 GRU (Gated Recurrent Unit) (1) ● GRU: LSTMとは異なる種類の記憶素子 – 内部に明示的なメモリセルは持たない – 新しい情報に更新するか、元の情報を残すかのみ判断 [Chung et al., 2014, Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling]
  19. 16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 20 GRU (Gated Recurrent Unit) (2) ● GRU: LSTMとは異なる種類の記憶素子 – 内部に明示的なメモリセルは持たない – 新しい情報に更新するか、元の情報を残すかのみ判断 – LSTMとどちらが良いのかは一概に言えない – Chainerに入っているので簡単に切り替え可能(lstmをgruに変更) Nottingham MuseData [Chung et al., 2014, Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling]
  20. 16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 21 Stacked RNN ● RNNの出力を次のRNNに入力 – 単純にRNNのdeep化とも考えられる(が、どういう影響があるのかはよく分からない) – 3〜8段くらいが使われているようである – 段ごとにRNNの方向を折り返すなどのバリエーションあり LSTMなど
  21. 16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 22 動くコード例 ● https://github.com/odashi/chainer_examples/ – Encoder-decoder – Attention ● Global attention ● Local attention ● LSTM/GRU ● Stacked LSTM – どちらもそこまで頑張って実装してないので速度はそれなり – いくつかLSTMの実装が入っている (@prajdabreさんありがとう!) 何か要望があったら 適当にissue/pullreq投げて下さい。
  22. 16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 24 …ニューラルネット翻訳を実際に使うと ● 遅い – GPUがないとお話にならない ● 簡単なコーパスなら「それなり」の文を生成できる – …構造としては言語モデル、文法に対して非常に頑健だが ● 内容語を間違える – 「Where is the station? →」   「レストランはどこですか。」 – PBMT・T2Sなど既存のSMTではほぼありえない間違い ● 未知語に弱い – ニューラルネットの次元が固定長 ● 学習に効かないレアな単語は落とすしかない – 「辞書を追加」といった操作が難しい ● 中で何が起こっているのか分からない – 人手によるチューニングは既存のSMT以上に困難 – 辛うじてattention系モデルは「アライメント」の可視化が可能(でも生成される単語は不明) スライドおわり 沢山人がいるので 実際に試した人の 意見が聞きたい
Publicité