SlideShare una empresa de Scribd logo
1 de 22
Descargar para leer sin conexión
16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 1
Chainerによる
RNNLM・RNN翻訳モデルの実装
+@
Yusuke Oda
2016/03/07 関西MT勉強会
16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 3
Sequence-to-sequence 翻訳(一般人向け)
● 部分的な変換ルールは学習せず、文全体の情報を用いて翻訳
直訳手法
原言語
目的
言語
理解
原言語を解析
分解
細かいルールに分割
再構築
ルールを結合
原言語
目的
言語
理解
原言語の
意味を抽出
再構築
意味表現から
直接単語を生成
Sequence-to-sequence
意味表現
16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 4
ニューラルネット翻訳(一般人向け)
● Sequence-to-sequence 翻訳の一種
● 意味の解析・単語の生成にニューラルネットを使用
– 複雑さ: 従来の翻訳アルゴリズムよりも単純
– 翻訳精度: 設定次第で従来手法に匹敵
原言語
目的
言語
ニューラル
ネット
(単語生成)
ニューラル
ネット
(意味解析)
意
味
表
現
● Encoder-decoder 翻訳モデル
– 最も簡単な sequence-to-sequence 翻訳モデル
– リカレントニューラルネットを使用
16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 5
リカレントニューラルネット (1)
● リカレントニューラルネット (Recurrent Neural Network: RNN)
– フィードバック付きのニューラルネット
– 時系列データの解析によく用いられる
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
16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 7
Encoder-decoder 翻訳モデル (1)
● 原言語側と目的言語側の2本のRNNを結合
– 原言語側 … 入力単語の情報を蓄積
– 目的言語側 … 蓄積された情報を取り出しながら単語を生成
END runs he
走る は 彼
Encoder
Decoder
16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 8
Chainer で Encoder-decoder 翻訳
● Chainer - http://chainer.org/
– ニューラルネットのフレームワーク
– ソースコードの計算式がそのままニューラルネットの構造になる
● 複雑な形状のニューラルネットを記述するのに最適
は
(一例、他の定式化も可能)
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))
は
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関数、緑: 重み行列)
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
速い
茶色の
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]
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))
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]
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
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/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セル
赤: 記憶が行われるパス
青: ゲート
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の標準実装には
今の所ないようなので注意)
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]
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]
16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 21
Stacked RNN
● RNNの出力を次のRNNに入力
– 単純にRNNのdeep化とも考えられる(が、どういう影響があるのかはよく分からない)
– 3〜8段くらいが使われているようである
– 段ごとにRNNの方向を折り返すなどのバリエーションあり
LSTMなど
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投げて下さい。
16/03/23 Copyright (C) 2015 by Yusuke Oda, AHC-Lab, IS, NAIST 24
…ニューラルネット翻訳を実際に使うと
● 遅い
– GPUがないとお話にならない
● 簡単なコーパスなら「それなり」の文を生成できる
– …構造としては言語モデル、文法に対して非常に頑健だが
● 内容語を間違える
– 「Where is the station? →」   「レストランはどこですか。」
– PBMT・T2Sなど既存のSMTではほぼありえない間違い
● 未知語に弱い
– ニューラルネットの次元が固定長
● 学習に効かないレアな単語は落とすしかない
– 「辞書を追加」といった操作が難しい
● 中で何が起こっているのか分からない
– 人手によるチューニングは既存のSMT以上に困難
– 辛うじてattention系モデルは「アライメント」の可視化が可能(でも生成される単語は不明)
スライドおわり
沢山人がいるので
実際に試した人の
意見が聞きたい

Más contenido relacionado

La actualidad más candente

NIPS2013読み会: Distributed Representations of Words and Phrases and their Compo...
NIPS2013読み会: Distributed Representations of Words and Phrases and their Compo...NIPS2013読み会: Distributed Representations of Words and Phrases and their Compo...
NIPS2013読み会: Distributed Representations of Words and Phrases and their Compo...
Yuya Unno
 
Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9
Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9
Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9
Yuya Unno
 

La actualidad más candente (20)

Tf勉強会(5)
Tf勉強会(5)Tf勉強会(5)
Tf勉強会(5)
 
第3回アジア翻訳ワークショップの人手評価結果の分析
第3回アジア翻訳ワークショップの人手評価結果の分析第3回アジア翻訳ワークショップの人手評価結果の分析
第3回アジア翻訳ワークショップの人手評価結果の分析
 
Deep Learningと自然言語処理
Deep Learningと自然言語処理Deep Learningと自然言語処理
Deep Learningと自然言語処理
 
Chainer meetup20151014
Chainer meetup20151014Chainer meetup20151014
Chainer meetup20151014
 
論文紹介:「End-to-end Sequence Labeling via Bi-directional LSTM-CNNs-CRF」
論文紹介:「End-to-end Sequence Labeling via Bi-directional LSTM-CNNs-CRF」論文紹介:「End-to-end Sequence Labeling via Bi-directional LSTM-CNNs-CRF」
論文紹介:「End-to-end Sequence Labeling via Bi-directional LSTM-CNNs-CRF」
 
文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル)
文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル)文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル)
文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル)
 
畳み込みLstm
畳み込みLstm畳み込みLstm
畳み込みLstm
 
Recurrent Neural Networks
Recurrent Neural NetworksRecurrent Neural Networks
Recurrent Neural Networks
 
[DL輪読会]Convolutional Sequence to Sequence Learning
[DL輪読会]Convolutional Sequence to Sequence Learning[DL輪読会]Convolutional Sequence to Sequence Learning
[DL輪読会]Convolutional Sequence to Sequence Learning
 
Deep learning実装の基礎と実践
Deep learning実装の基礎と実践Deep learning実装の基礎と実践
Deep learning実装の基礎と実践
 
Chainerの使い方と 自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と 自然言語処理への応用
 
最先端NLP勉強会2017_ACL17
最先端NLP勉強会2017_ACL17最先端NLP勉強会2017_ACL17
最先端NLP勉強会2017_ACL17
 
Chainer Meetup LT (Alpaca)
Chainer Meetup LT (Alpaca)Chainer Meetup LT (Alpaca)
Chainer Meetup LT (Alpaca)
 
NIPS2013読み会: Distributed Representations of Words and Phrases and their Compo...
NIPS2013読み会: Distributed Representations of Words and Phrases and their Compo...NIPS2013読み会: Distributed Representations of Words and Phrases and their Compo...
NIPS2013読み会: Distributed Representations of Words and Phrases and their Compo...
 
Long Short-term Memory
Long Short-term MemoryLong Short-term Memory
Long Short-term Memory
 
Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9
Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9
Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9
 
最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情
 
NLP2017 NMT Tutorial
NLP2017 NMT TutorialNLP2017 NMT Tutorial
NLP2017 NMT Tutorial
 
GPU上でのNLP向け深層学習の実装について
GPU上でのNLP向け深層学習の実装についてGPU上でのNLP向け深層学習の実装について
GPU上でのNLP向け深層学習の実装について
 
Deep learning勉強会20121214ochi
Deep learning勉強会20121214ochiDeep learning勉強会20121214ochi
Deep learning勉強会20121214ochi
 

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

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

RNN-based Translation Models (Japanese)
RNN-based Translation Models (Japanese)RNN-based Translation Models (Japanese)
RNN-based Translation Models (Japanese)
 
不完全な文の構文解析に基づく同時音声翻訳
不完全な文の構文解析に基づく同時音声翻訳不完全な文の構文解析に基づく同時音声翻訳
不完全な文の構文解析に基づく同時音声翻訳
 
構文情報に基づく機械翻訳のための能動学習手法と人手翻訳による評価
構文情報に基づく機械翻訳のための能動学習手法と人手翻訳による評価構文情報に基づく機械翻訳のための能動学習手法と人手翻訳による評価
構文情報に基づく機械翻訳のための能動学習手法と人手翻訳による評価
 
ICASSP2019音声&音響論文読み会 論文紹介(認識系)
ICASSP2019音声&音響論文読み会 論文紹介(認識系)ICASSP2019音声&音響論文読み会 論文紹介(認識系)
ICASSP2019音声&音響論文読み会 論文紹介(認識系)
 
PCFG構文解析法
PCFG構文解析法PCFG構文解析法
PCFG構文解析法
 
Extract and edit
Extract and editExtract and edit
Extract and edit
 
短距離古典分子動力学計算の 高速化と大規模並列化
短距離古典分子動力学計算の 高速化と大規模並列化短距離古典分子動力学計算の 高速化と大規模並列化
短距離古典分子動力学計算の 高速化と大規模並列化
 
深層学習フレームワークChainerの特徴
深層学習フレームワークChainerの特徴深層学習フレームワークChainerの特徴
深層学習フレームワークChainerの特徴
 
ニューラル機械翻訳の動向@IBIS2017
ニューラル機械翻訳の動向@IBIS2017ニューラル機械翻訳の動向@IBIS2017
ニューラル機械翻訳の動向@IBIS2017
 
【文献紹介】Abstractive Text Summarization Using Sequence-to-Sequence RNNs and Beyond
【文献紹介】Abstractive Text Summarization Using Sequence-to-Sequence RNNs and Beyond【文献紹介】Abstractive Text Summarization Using Sequence-to-Sequence RNNs and Beyond
【文献紹介】Abstractive Text Summarization Using Sequence-to-Sequence RNNs and Beyond
 
[DL輪読会]"Dynamical Isometry and a Mean Field Theory of CNNs: How to Train 10,0...
[DL輪読会]"Dynamical Isometry and a Mean Field Theory of CNNs: How to Train 10,0...[DL輪読会]"Dynamical Isometry and a Mean Field Theory of CNNs: How to Train 10,0...
[DL輪読会]"Dynamical Isometry and a Mean Field Theory of CNNs: How to Train 10,0...
 
[DL輪読会]Learning to Navigate in Cities Without a Map
[DL輪読会]Learning to Navigate in Cities Without a Map[DL輪読会]Learning to Navigate in Cities Without a Map
[DL輪読会]Learning to Navigate in Cities Without a Map
 
深層学習による自然言語処理の研究動向
深層学習による自然言語処理の研究動向深層学習による自然言語処理の研究動向
深層学習による自然言語処理の研究動向
 
Spring 5に備えるリアクティブプログラミング入門
Spring 5に備えるリアクティブプログラミング入門Spring 5に備えるリアクティブプログラミング入門
Spring 5に備えるリアクティブプログラミング入門
 
論文輪読: Data-Dependent Initializations of Convolutional Neural Networks / All Y...
論文輪読: Data-Dependent Initializations of Convolutional Neural Networks / All Y...論文輪読: Data-Dependent Initializations of Convolutional Neural Networks / All Y...
論文輪読: Data-Dependent Initializations of Convolutional Neural Networks / All Y...
 
HiPPO/S4解説
HiPPO/S4解説HiPPO/S4解説
HiPPO/S4解説
 
福岡市LoRawan(TM)実証実験
福岡市LoRawan(TM)実証実験福岡市LoRawan(TM)実証実験
福岡市LoRawan(TM)実証実験
 
2020 03 05_mar_revenshtein_transformer_tmu_homma
2020 03 05_mar_revenshtein_transformer_tmu_homma2020 03 05_mar_revenshtein_transformer_tmu_homma
2020 03 05_mar_revenshtein_transformer_tmu_homma
 
Convolutional Neural Netwoks で自然言語処理をする
Convolutional Neural Netwoks で自然言語処理をするConvolutional Neural Netwoks で自然言語処理をする
Convolutional Neural Netwoks で自然言語処理をする
 
2021 10-07 kdd2021読み会 uc phrase
2021 10-07 kdd2021読み会 uc phrase2021 10-07 kdd2021読み会 uc phrase
2021 10-07 kdd2021読み会 uc phrase
 

Más de Yusuke Oda

複数の事前並べ替え候補を用いた句に基づく統計的機械翻訳
複数の事前並べ替え候補を用いた句に基づく統計的機械翻訳複数の事前並べ替え候補を用いた句に基づく統計的機械翻訳
複数の事前並べ替え候補を用いた句に基づく統計的機械翻訳
Yusuke Oda
 
Syntax-based Simultaneous Translation through Prediction of Unseen Syntactic ...
Syntax-based Simultaneous Translation through Prediction of Unseen Syntactic ...Syntax-based Simultaneous Translation through Prediction of Unseen Syntactic ...
Syntax-based Simultaneous Translation through Prediction of Unseen Syntactic ...
Yusuke Oda
 

Más de Yusuke Oda (9)

primitiv: Neural Network Toolkit
primitiv: Neural Network Toolkitprimitiv: Neural Network Toolkit
primitiv: Neural Network Toolkit
 
Neural Machine Translation via Binary Code Prediction
Neural Machine Translation via Binary Code PredictionNeural Machine Translation via Binary Code Prediction
Neural Machine Translation via Binary Code Prediction
 
複数の事前並べ替え候補を用いた句に基づく統計的機械翻訳
複数の事前並べ替え候補を用いた句に基づく統計的機械翻訳複数の事前並べ替え候補を用いた句に基づく統計的機械翻訳
複数の事前並べ替え候補を用いた句に基づく統計的機械翻訳
 
Learning to Generate Pseudo-code from Source Code using Statistical Machine T...
Learning to Generate Pseudo-code from Source Code using Statistical Machine T...Learning to Generate Pseudo-code from Source Code using Statistical Machine T...
Learning to Generate Pseudo-code from Source Code using Statistical Machine T...
 
Syntax-based Simultaneous Translation through Prediction of Unseen Syntactic ...
Syntax-based Simultaneous Translation through Prediction of Unseen Syntactic ...Syntax-based Simultaneous Translation through Prediction of Unseen Syntactic ...
Syntax-based Simultaneous Translation through Prediction of Unseen Syntactic ...
 
Tree-based Translation Models (『機械翻訳』§6.2-6.3)
Tree-based Translation Models (『機械翻訳』§6.2-6.3)Tree-based Translation Models (『機械翻訳』§6.2-6.3)
Tree-based Translation Models (『機械翻訳』§6.2-6.3)
 
翻訳精度の最大化による同時音声翻訳のための文分割法 (NLP2014)
翻訳精度の最大化による同時音声翻訳のための文分割法 (NLP2014)翻訳精度の最大化による同時音声翻訳のための文分割法 (NLP2014)
翻訳精度の最大化による同時音声翻訳のための文分割法 (NLP2014)
 
Pattern Recognition and Machine Learning: Section 3.3
Pattern Recognition and Machine Learning: Section 3.3Pattern Recognition and Machine Learning: Section 3.3
Pattern Recognition and Machine Learning: Section 3.3
 
Test
TestTest
Test
 

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系モデルは「アライメント」の可視化が可能(でも生成される単語は不明) スライドおわり 沢山人がいるので 実際に試した人の 意見が聞きたい