Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Upcoming SlideShare
Selective encoding for abstractive sentence summarization
Next
Download to read offline and view in fullscreen.

9

Share

Download to read offline

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

Download to read offline

Presented in 関西MT勉強会 (2016/3/7)

Related Books

Free with a 30 day trial from Scribd

See all

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

  1. 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. 2. 16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 3 Sequence-to-sequence 翻訳(一般人向け) ● 部分的な変換ルールは学習せず、文全体の情報を用いて翻訳 直訳手法 原言語 目的 言語 理解 原言語を解析 分解 細かいルールに分割 再構築 ルールを結合 原言語 目的 言語 理解 原言語の 意味を抽出 再構築 意味表現から 直接単語を生成 Sequence-to-sequence 意味表現
  3. 3. 16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 4 ニューラルネット翻訳(一般人向け) ● Sequence-to-sequence 翻訳の一種 ● 意味の解析・単語の生成にニューラルネットを使用 – 複雑さ: 従来の翻訳アルゴリズムよりも単純 – 翻訳精度: 設定次第で従来手法に匹敵 原言語 目的 言語 ニューラル ネット (単語生成) ニューラル ネット (意味解析) 意 味 表 現 ● Encoder-decoder 翻訳モデル – 最も簡単な sequence-to-sequence 翻訳モデル – リカレントニューラルネットを使用
  4. 4. 16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 5 リカレントニューラルネット (1) ● リカレントニューラルネット (Recurrent Neural Network: RNN) – フィードバック付きのニューラルネット – 時系列データの解析によく用いられる
  5. 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. 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. 7. 16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 8 Chainer で Encoder-decoder 翻訳 ● Chainer - http://chainer.org/ – ニューラルネットのフレームワーク – ソースコードの計算式がそのままニューラルネットの構造になる ● 複雑な形状のニューラルネットを記述するのに最適 は (一例、他の定式化も可能)
  8. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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系モデルは「アライメント」の可視化が可能(でも生成される単語は不明) スライドおわり 沢山人がいるので 実際に試した人の 意見が聞きたい
  • JunyaOkawa

    Jun. 30, 2018
  • norihiroyoshida0623

    May. 9, 2017
  • soichiroyamaguchi52

    Mar. 26, 2017
  • kentarorikimaru

    Nov. 25, 2016
  • karupagyu

    Sep. 15, 2016
  • TomoyaKita

    Jul. 22, 2016
  • moriemonmist

    Jul. 13, 2016
  • green_air

    Apr. 15, 2016
  • eve0917

    Mar. 26, 2016

Presented in 関西MT勉強会 (2016/3/7)

Views

Total views

9,372

On Slideshare

0

From embeds

0

Number of embeds

428

Actions

Downloads

69

Shares

0

Comments

0

Likes

9

×