逆翻訳は機械翻訳の錬金術師か?
逆翻訳 (Back-Translation) を用いた手法が驚くべき快挙を成し遂げました*1.
逆翻訳がヤバいスコアを叩き出しててびっくりした.おそらくAttention以降では最大の性能uphttps://t.co/ssaQw2s22f
— Ryobot | りょぼっと (@_Ryobot) 2018年11月15日
深層学習はえげつない手法が突然ポッとでてくるからおもろい pic.twitter.com/RwyrjCn8Rx
毎年開催される機械翻訳の国際会議 WMT18 のシェアードタスク*2にて人手評価の1位を獲得し,機械翻訳のベンチマークでは以前の最高スコアが 29.8 なのに対しこの手法は 35.0 を達成しています.
昨年登場した翻訳モデル Transformer *4も大きく評価スコアを上げましたが,逆翻訳はそれ以上の上がり幅です.逆翻訳が飛び抜けて有益であることがわかります.
ここでは逆翻訳がいかに機械翻訳の性能を向上させたのかわかりやすく解説したいと思います.元論文を読みたい方は Understanding Back-Translation at Scale を参照してください.
DeepL Translator の教訓
深層学習は極めてデータドリブンな技術です.「シェアードタスクだと成功するが手持ちのスモールデータだと失敗する」というは誰しも味わう経験だと思います.Andrew Ng 先生はインタビュー記事で「こんにちの深層学習は大規模データが得られる領域でしか真価を発揮しない」と発言しています.
Most of the value of deep learning today is in narrow domains where you can get a lot of data.
一方で大規模データが得られる領域では凄まじい真価を発揮します.例えば昨年 Google 翻訳を超える翻訳サービス DeepL Translator が注目を集めました.
プレスリリースで掲載された100人の翻訳家による人手評価では,すべての言語対で Google 翻訳を含む全翻訳サービスを上回るスコアを獲得しました.またベンチマークの評価スコアでは Transformer を大きく凌駕しました.DeepL は Linguee という対訳文検索エンジンからクロールした大規模・高品質なデータセットを用いて翻訳モデルを訓練しています.
このように機械翻訳では大規模・高品質な学習データがモデルの性能を著しく向上させます.
ただし闇雲にデータを増やせばよい訳ではありません.低品質なWebクロールデータを使用すると返って性能が悪化してしまいます*5*6.また低品質な既存コーパスのクリーニングも大きな課題です.最近では低品質な対訳文にフィルタをかける洗練された手法が提案され優れた結果を示しています*7*8
データ拡張としての逆翻訳
DeepL のように大規模な学習データが得られない時はどうすれば良いでしょうか?
データ拡張 (Data Augmentation) は既存のデータから擬似データを作成しデータ量を水増しする手法です.主に画像認識の研究で使われ,最近では AutoAugment が最適なデータ拡張(画像の移動・反転・回転など)を探索することで CIFAR と ImageNet の最高記録を更新しています*9.
逆翻訳 (Back-Translation) は順翻訳モデルで生成したターゲット文を逆翻訳モデルでソース文に戻す手法です.日英翻訳した英文を英日翻訳してセルフ英文校正をする方は多いと思います.実は逆翻訳は機械翻訳のデータ拡張として使えます.
対訳コーパス (Bilingual Corpus) に比べて単言語コーパス (Monolingual Corpus) は簡単に入手できます.例えば WMT は非常に大規模な単言語コーパスを提供しています*10.ここでターゲット言語に単言語コーパスを用意し,対訳コーパスで学習した逆翻訳モデルを用いてソース言語を生成することで擬似的な対訳コーパスを簡単に作成できます.水増しした対訳データで順翻訳モデルを学習するというカラクリです.ただし次に述べる探索手法が抱える問題によって,これまで逆翻訳によるデータ拡張はうまく機能しませんでした.
ニューラル機械翻訳ではターゲット文をデコーディング (出力) する時に貪欲探索やビーム探索が使われます.
貪欲探索 (Greedy Search) は各ステップで確率が最大の単語を探索し出力します.これは argmax と同義です.
この例では「Maximum Likelihood Estimator」の正しい訳語は「最尤推定量」ですが,1ステップ目で「最大」と誤訳してしまいその後も間違った生成を続けています.このように貪欲探索は一度選択ミスをすると取り返しがつかないという欠点があります.
ビーム探索 (Beam Search) は各ステップでそれまでの同時確率が高い候補文を上位k文探索し記憶します.kはビームサイズと言います.最終的に文全体の同時確率が最大の候補文を出力します.
この例では各ステップで常に2個の候補文を記憶しています (k=2).最終的に「最尤」x「推定」x「量」の同時確率が最大となるので「最尤推定量」を出力します.このように文全体の同時確率を考慮することで貪欲探索より正確な文生成が可能です.実装が気になる方は PyTorchで LSTM デコーダのビーム探索を書いたので参考にしてください (beam_search_for_nmt_with_pytorch).
さて順翻訳モデルのデコーディング時には貪欲探索やビーム探索がとても有効です.しかし逆翻訳モデルのデコーディング時にはある問題が発生します.
貪欲探索やビーム探索は事後確率が最大となる単語や文を出力するアルゴリズムなのでMAP推定 (Maximum A-Posteriori Estimation) に分類されます.MAP推定はモデル分布 (逆翻訳モデルが生成する確率分布) の頂点付近のみを探索し出力するので,真のデータ分布を適切にカバーしない規則的かつ多様性が低いソース文を出力します.これはMAP推定で作られた擬似対訳文は順翻訳モデルにとって学習が容易であり十分な訓練信号を提供しないことを意味します.
錬金術の調合レシピ
逆翻訳で適切なデータ拡張を行うにはどうすれば良いでしょうか?
逆翻訳論文の著者らはモデル分布から出力単語を確率的にサンプリングしたり,ビーム探索にノイズを付加したりといったストレートフォワードな手法を提案しています.これにより不規則的かつ多様性が高い擬似ソース文が生成されます.
- トップ10 (top10): 上位10単語を選択・再正規化した中からサンプリングします.MAP推定とサンプリングの中庸と言えます.
- サンプリング (sampling): モデルの確率分布に従ってサンプリングします.多様性は極めて高いですが時折不自然な文を生成します.
- ノイズ付加 (beam+noise): 3種類のノイズを付加します.1) 0.1の確率で単語を削除.2) 0.1の確率でマスク単語に置き換え.3) 一様分布の確率で単語をランダムに交換.この場合,順翻訳モデルはノイズ除去オートエンコーダだと捉えられます.
500万文の対訳コーパスと2400万文の単言語コーパスを用いた実験では,サンプリングやノイズ付加はMAP推定に比べて飛躍的に順翻訳モデルの評価スコアを向上させています.
なぜサンプリングやノイズ付加はMAP推定より優れているのでしょうか?
実際の擬似ソース文の比較では,サンプリングやノイズ付加はMAP推定に比べて適切な文ではないことがわかります.
サンプリングやノイズ付加はMAP推定より予測困難なソース文を生成することで順翻訳モデルの学習を難しくしていると考えられます.著者らは擬似ソース文の多様性をパープレキシティという情報量の指標で評価しています.一般的にパープレキシティが高いほど多様性が高いです.
ターゲット文を統一して順翻訳モデルのパープレキシティを比較した実験では,サンプリングはビーム探索に比べてパープレキシティが非常に高い結果です.興味深いことにパープレキシティと前述の評価スコアには明白な相関があります.この結果はサンプリングやノイズ付加は順翻訳モデルの学習を困難にし,ノイズに対して頑健にし,豊富な訓練信号を提供していることを示唆しています.
このように適切なデータ拡張を行うことによって逆翻訳モデルは順翻訳モデルを訓練するための黄金 (豊富な訓練信号) を生み出す錬金術師だと言えます.
他の実験では低資源環境 (8万対訳文) ではそもそも逆翻訳モデルが貧弱 (予測困難な擬似ソース文) なのでサンプリングは逆効果になること,本物の対訳文と単言語コーパスの逆翻訳で得られる擬似対訳文はかなり似た性能をもたらす結果を示しています.
2.26億文の単言語コーパスを用いた大規模実験 (128GPUで22.5時間の訓練) では,評価スコアは 35.0 を達成しています.WMT が提供するコーパスに限れば8月時点での以前の最高スコアは 29.2 (ParaCrawlありで29.8) でした*11.現在ソースコードは公開されていませんが Back-Translation training に再現方法が記されています.
今後の発展
今回の実験では対訳コーパスのみで逆翻訳モデルを学習しました.著者らは Future Work として End-To-End 学習による逆翻訳モデルの最適化を挙げています.End-To-End 学習とは複数のモデル間を微分可能にし,複数モデル全体を同時に最適化する学習手法です.GANによる言語生成ではすでに End-To-End 学習が使われています*12*13.
簡易には逆翻訳モデルが生成した確率分布を (argmax で one-hot ベクトルを作らず) そのまま順翻訳モデルの埋め込み行列で埋め込むことで順/逆翻訳モデル間を微分可能にします.ただし著者らが提案したアイデア (サンプリングやノイズ付加) がどのように実装させるかは今のところ不明です.
また別のアプローチとして Dual Learning も検討できるでしょう*14*15.Dual Learning ではソース言語にも単言語コーパスを用意して双方向で逆翻訳を行い連続的に逆翻訳モデルの質を向上させます.Dual Learning は教師なし機械翻訳の主要技術でもあります.
去年は Transformer や ConvS2S などのモデル設計が精査され,今年は教師なし機械翻訳や逆翻訳などの学習方法に研究がシフトし成果をあげました.来年はどのような進歩が待っているかとても楽しみです.解説は以上です.
過去2年内に最高性能 (State-of-the-Art) を主張した論文の一覧です*16.
人工知能が黄金を錬金しているサムネ画像です.
*1:Understanding Back-Translation at Scale [Sergey Edunov, EMNLP 2018, 2018/8]
*2:Findings of the 2018 Conference on Machine Translation (WMT18) [Ondrej Bojar, 2018/10]
*3:各論文は最下部に掲載しました.訓練は WMT のシェアードタスクで提供される対訳コーパス・単言語コーパスのみ使用し,評価は WMT newstest2014 En-De テストセットに対する multi-bleu.perl スクリプトの BLEU スコアです
*4:Attention Is All You Need [Ashish Vaswani, 2017/6]
*5:On the Impact of Various Types of Noise on Neural Machine Translation [Huda Khayrallah, 2018/5]
*6:ニューラル機械翻訳はソース文のノイズには頑健ですが,ターゲット文 (教師信号) のノイズには極めて脆弱です
*7:Margin-based Parallel Corpus Mining with Multilingual Sentence Embeddings [Mikel Artetxe, 2018/11]
*8:多言語コーパスを用いて文を埋め込み表現に変換するエンコーダ・デコーダモデルを学習します.次にクリーニングしたいコーパスの対訳文の埋め込み表現間のコサイン類似度を計測し閾値以下の対訳文をデータセットから除去します.このフィルタを大規模・低品質な対訳コーパス ParaCrawl に適用して1000万対訳文のデータセットを作成しています
*9:AutoAugment: Learning Augmentation Policies from Data [Ekin D. Cubuk, 2018/5]
*10:Common Crawl の場合,英語は31億文,ドイツ語は29億文,中国語は17億文
*11:WMT 以外の大規模対訳コーパスを用いた DeepL は 33.3,去年話題を集めた Transformer は 28.4 です
*12:Adversarial Generation of Natural Language [Sai Rajeswar, 2017/5]
*13:Language Generation with Recurrent Generative Adversarial Networks without Pre-training [Ofir Press, 2017/6]
*14:Multi-Agent Dual Learning [ICLR'19 Anonymous, 2018/9]
*15:Dual Learning: Theoretical Study and Algorithmic Extensions [ICLR'19 Anonymous, 2018/9]
*16:label は冒頭の棒グラフと対応しています.trans は Transformer 使用の有無です.Back-Translation, Dual Learning 1, Dual Learning 2 では逆翻訳のために単言語コーパス News Crawl を使用し,Corpus Mining, Scaling NMT では対訳コーパス ParaCrawl を使用しています