Google's Neural Machine
Translation System: Bridging the
Gap between Human and
Machine Translation
中澤 敏明
2016年 黒橋・河原研 夏の勉強会
http://arxiv.org/abs/1609.08144
NMTの問題点
1. トレーニングも翻訳も(PBSMTに比べて)遅い
2. 低頻度語の翻訳が弱い
– 既存手法はattentionに頼っているが、attentionは
信頼性が低い
• Addressing the Rare Word Problem in Neural Machine
Translation
• On Using Very Large Target Vocabulary for Neural Machine
Translation
– 翻字(transliteration)するべきな時もある
3. 必ずしも入力文の全てを翻訳してくれない
4. いろいろ手法が提案されてるけど、scaleする?
Google’s Neural Machine Translation:
GNMT
• ベースはattentionモデル
• 8層LSTM RNN with residual connection
• 計算の並列化のために、attentionはdecoderの1
層目からencoderの最終層に対して行う
• 重みの量子化(quantization)による高速inference
• Tensor Processing Unit (TPU)
• 低頻度語をsub-word units (wordpieces)で扱う
• beam search decodingでlength normalizationと
coverage penaltyを使う
quality of the system gets closer to that of average
human translators
8層LSTM RNN
• encoderもdecoderも深い方がいい
– subtle irregularitiesを捉えることができる
• しかし単純に積むだけだと、トレーニングが遅
いしうまくトレーニングできない
– 勾配爆発/消失問題が起きるため
– 4層ぐらいが良い、6層は厳しい、8層は無理
• 画像認識で使われたresidual connectionを使
う
– 次の層の入力に、一つ前の層の入力を足す
並列化
• データ並列化: Downpour SGD
– Large Scale Distributed Deep Networks (NIPS2012)
– パラメータを共有している複数(実験では12)のモデル
を同時にトレーニングし、非同期にパラメータを更新
• モデル並列化: GPUをたくさん使う
– 各LSTMを別々のGPUに配置
– 最初の層以外はuni-directionalなので、前の層を待
たなくて良い
– softmax層も語彙ごとに別々のGPUに配置
低頻度語
• 既存研究
– 入力の低頻度語を(attention等で)出力にコピー
– 単語より小さい単位(sub-word unit)を使う
• Google音声認識で使われたwordpiece model
(WPM)を使う
– 日本語/韓国語のsegmentation問題のためらしい
Wordpiece Model: WPM
• “_”は単語の始まりを表す
– これを手掛かりに元の文を復元可能
• トレーニングコーパスとwordpiece数(8kから
32kが良いらしい)が与えられた時、言語モデ
ルの尤度が最小になるようwordpieceを選択
• 使う文字種の数も制限(西洋語で500ぐらい、
アジア言語はもっと多い)
• コピー機能を確保するため、両言語で共通の
wordpieceも用意し、分割が同じになるように
Jet makers feud over seat width with …
_J et _makers _fe ud _over _seat _width _with …
word:
wordpiece:
トレーニング方法
• 普通の最尤法の欠点=訓練とテストの乖離
– BLEUなどのタスクの目標に対して最適化してない
– BLEU値と出力の確率に相関がない
– デコーディング中のエラーに対してロバストでな
い
• 最尤法で訓練してから強化学習
– 実際には最尤方と強化学習の目的関数の重み
付き線形結合に対して最適化
BLEUの代わりに
GLEU: 正解と出力の
1-4 gramのprecision
かrecallの小さい方
量子化による高速化
• 細かいところはよくわからないのでパス!
• ポイントっぽいところ
– 訓練時にLSTMのメモリセルと隠れ層の値を[-δ, δ]に
(δはアニーリング)クリッピングし、後で16bitの整数値
で表現
• どうやって変換しているのか・・・?
– softmaxへの入力を[-γ, γ]に(γは25で固定)クリッピン
グ
• なぜこれが高速化につながるのか・・・?
– LSTM内の重みを丸めて8bit整数で表現
• 浮動小数点数演算を固定小数点数演算に置き
換えることで高速化
beam search decoding
• 通常のbeam search decodingは最も確率の高
い出力を探す
– 出力の長さは候補ごとに異なり、長いものほど確
率が低くなるため、短い出力が選ばれやすい
• length normalization
– 出力候補のlog-probabilityを以下の値で割る
lp(Y) =
(5+ |Y |)a
(5+1)a
coverage penalty
• 入力文の全てをカバーするようにするため
– pi,jは出力のj番目の、入力のi番目へのattention
確率
– attentionされなかった入力単語についてはΣpi,jが
1より小さくなり、ペナルティーがかかる
• 最終的に出力候補のスコアは以下の式
– 実験から、強化学習を行ったモデルでは効果は
非常に小さくなる
cp(X;Y) = b * log(min( pi, j,1.0))
j=1
|Y|
å
i=1
|X|
å
s(Y, X)= log(P(Y | X))/lp(Y)+cp(X;Y)
枝刈り (pruning)
• Beam幅は8-12程度が良いが、4とか2でもそ
こまで悪化しない
• 単語を出力する際、最も良い単語よりも一定
以上低いスコアの単語は考慮しない
• 最もスコアの高い出力候補のスコアより、一
定以上低いスコアの出力候補は枝刈り
• 出力の長さは入力の2倍まで
実験
• データ
– WMT En->Fr (36M), En->De (5M)
– Google En<->Fr, En<->Es, En<->Zh (WMTの100倍
から1000倍のデータサイズらしい)
• 評価
– BLEU, Google内部の7段階人手評価
• トレーニング
– gradient clipping = 5, Adam (60k steps, lr=0.0002)
-> SGD (lr=0.5), 128 mini-batch, lr annealing,
dropout
実験
• 1システムのトレーニング時間
– 最尤訓練: En->Fr (36M)で、96枚のNVIDIA K80
GPU(24GBメモリ)を使って6日間
• K80一枚約80万円ぐらいなので、これだけで8000万円
• 8アンサンブルしてるので全部で6億4000万?
– 強化学習: 400k steps行うのに3日間
• word-base modelのvocabulary size
– source: 212k, target: 80k
– それ以外の語は <first_char>UNK<last_char>に
結果
• WPM-32Kが最もよい
• 8アンサンブルでWMTデータセットでSOTA
• 強化学習の効果はBLEUではあったが、人手
評価ではなかった
• Googleのデータでは人手評価で人間の翻訳
と変わらないぐらいの精度が出たが、評価の
信頼性には疑問が残る
結論
• GPUを湯水のように使って、量子化してTPUも
使って、ネットワークを工夫すれば、精度を保
持したまま速度的にPBSMTをNMTに置き換え
るのも可能?
• 真似できるもんなら真似してみろ

G社のNMT論文を読んでみた

  • 1.
    Google's Neural Machine TranslationSystem: Bridging the Gap between Human and Machine Translation 中澤 敏明 2016年 黒橋・河原研 夏の勉強会 http://arxiv.org/abs/1609.08144
  • 2.
    NMTの問題点 1. トレーニングも翻訳も(PBSMTに比べて)遅い 2. 低頻度語の翻訳が弱い –既存手法はattentionに頼っているが、attentionは 信頼性が低い • Addressing the Rare Word Problem in Neural Machine Translation • On Using Very Large Target Vocabulary for Neural Machine Translation – 翻字(transliteration)するべきな時もある 3. 必ずしも入力文の全てを翻訳してくれない 4. いろいろ手法が提案されてるけど、scaleする?
  • 3.
    Google’s Neural MachineTranslation: GNMT • ベースはattentionモデル • 8層LSTM RNN with residual connection • 計算の並列化のために、attentionはdecoderの1 層目からencoderの最終層に対して行う • 重みの量子化(quantization)による高速inference • Tensor Processing Unit (TPU) • 低頻度語をsub-word units (wordpieces)で扱う • beam search decodingでlength normalizationと coverage penaltyを使う quality of the system gets closer to that of average human translators
  • 4.
    8層LSTM RNN • encoderもdecoderも深い方がいい –subtle irregularitiesを捉えることができる • しかし単純に積むだけだと、トレーニングが遅 いしうまくトレーニングできない – 勾配爆発/消失問題が起きるため – 4層ぐらいが良い、6層は厳しい、8層は無理 • 画像認識で使われたresidual connectionを使 う – 次の層の入力に、一つ前の層の入力を足す
  • 5.
    並列化 • データ並列化: DownpourSGD – Large Scale Distributed Deep Networks (NIPS2012) – パラメータを共有している複数(実験では12)のモデル を同時にトレーニングし、非同期にパラメータを更新 • モデル並列化: GPUをたくさん使う – 各LSTMを別々のGPUに配置 – 最初の層以外はuni-directionalなので、前の層を待 たなくて良い – softmax層も語彙ごとに別々のGPUに配置
  • 6.
    低頻度語 • 既存研究 – 入力の低頻度語を(attention等で)出力にコピー –単語より小さい単位(sub-word unit)を使う • Google音声認識で使われたwordpiece model (WPM)を使う – 日本語/韓国語のsegmentation問題のためらしい
  • 7.
    Wordpiece Model: WPM •“_”は単語の始まりを表す – これを手掛かりに元の文を復元可能 • トレーニングコーパスとwordpiece数(8kから 32kが良いらしい)が与えられた時、言語モデ ルの尤度が最小になるようwordpieceを選択 • 使う文字種の数も制限(西洋語で500ぐらい、 アジア言語はもっと多い) • コピー機能を確保するため、両言語で共通の wordpieceも用意し、分割が同じになるように Jet makers feud over seat width with … _J et _makers _fe ud _over _seat _width _with … word: wordpiece:
  • 8.
    トレーニング方法 • 普通の最尤法の欠点=訓練とテストの乖離 – BLEUなどのタスクの目標に対して最適化してない –BLEU値と出力の確率に相関がない – デコーディング中のエラーに対してロバストでな い • 最尤法で訓練してから強化学習 – 実際には最尤方と強化学習の目的関数の重み 付き線形結合に対して最適化 BLEUの代わりに GLEU: 正解と出力の 1-4 gramのprecision かrecallの小さい方
  • 9.
    量子化による高速化 • 細かいところはよくわからないのでパス! • ポイントっぽいところ –訓練時にLSTMのメモリセルと隠れ層の値を[-δ, δ]に (δはアニーリング)クリッピングし、後で16bitの整数値 で表現 • どうやって変換しているのか・・・? – softmaxへの入力を[-γ, γ]に(γは25で固定)クリッピン グ • なぜこれが高速化につながるのか・・・? – LSTM内の重みを丸めて8bit整数で表現 • 浮動小数点数演算を固定小数点数演算に置き 換えることで高速化
  • 10.
    beam search decoding •通常のbeam search decodingは最も確率の高 い出力を探す – 出力の長さは候補ごとに異なり、長いものほど確 率が低くなるため、短い出力が選ばれやすい • length normalization – 出力候補のlog-probabilityを以下の値で割る lp(Y) = (5+ |Y |)a (5+1)a
  • 11.
    coverage penalty • 入力文の全てをカバーするようにするため –pi,jは出力のj番目の、入力のi番目へのattention 確率 – attentionされなかった入力単語についてはΣpi,jが 1より小さくなり、ペナルティーがかかる • 最終的に出力候補のスコアは以下の式 – 実験から、強化学習を行ったモデルでは効果は 非常に小さくなる cp(X;Y) = b * log(min( pi, j,1.0)) j=1 |Y| å i=1 |X| å s(Y, X)= log(P(Y | X))/lp(Y)+cp(X;Y)
  • 12.
    枝刈り (pruning) • Beam幅は8-12程度が良いが、4とか2でもそ こまで悪化しない •単語を出力する際、最も良い単語よりも一定 以上低いスコアの単語は考慮しない • 最もスコアの高い出力候補のスコアより、一 定以上低いスコアの出力候補は枝刈り • 出力の長さは入力の2倍まで
  • 13.
    実験 • データ – WMTEn->Fr (36M), En->De (5M) – Google En<->Fr, En<->Es, En<->Zh (WMTの100倍 から1000倍のデータサイズらしい) • 評価 – BLEU, Google内部の7段階人手評価 • トレーニング – gradient clipping = 5, Adam (60k steps, lr=0.0002) -> SGD (lr=0.5), 128 mini-batch, lr annealing, dropout
  • 14.
    実験 • 1システムのトレーニング時間 – 最尤訓練:En->Fr (36M)で、96枚のNVIDIA K80 GPU(24GBメモリ)を使って6日間 • K80一枚約80万円ぐらいなので、これだけで8000万円 • 8アンサンブルしてるので全部で6億4000万? – 強化学習: 400k steps行うのに3日間 • word-base modelのvocabulary size – source: 212k, target: 80k – それ以外の語は <first_char>UNK<last_char>に
  • 15.
    結果 • WPM-32Kが最もよい • 8アンサンブルでWMTデータセットでSOTA •強化学習の効果はBLEUではあったが、人手 評価ではなかった • Googleのデータでは人手評価で人間の翻訳 と変わらないぐらいの精度が出たが、評価の 信頼性には疑問が残る
  • 16.