データナード

機械学習と自然言語処理についての備忘録 (旧ナード戦隊データマン)

WMT19 Robustness Taskの論文の1つをざっくりまとめる

WMT19のRobustness Task1とは、MTNT2のようなノイズありテキストに対する翻訳タスクです。

今回は、そのうちの一つとして、NTT’s Machine Translation Systems for WMT19 Robustness Task3 をざっくりまとめてみます。

Robustness Taskの概要

Robustness Taskでは、以下の言語ペアに対する翻訳をします。

  • フランス語 <--> 英語
  • 日本語 <--> 英語

ノイズありテキストは、ソーシャルメディアの投稿などで見られるテキストで、過去に記事として説明しました。 MTNTデータセットとは何か - ナード戦隊データマン

日本語と英語のペアの場合、WMT19で使えるデータは、MTNTの他に、KFFT4, TED5, JESC6があります。MTNTはドメイン内データであるのに対して、それ以外はドメイン外データです。

これらのデータを使って、blind test dataに対する翻訳を実行することによって結果を出し、その結果を提出するようです。 データの量は以下です。

bilingual sentences words
MTNT (for En-Ja) 5,775 280,543
MTNT (for Ja-En) 6,506 128,103
KFTT 440,288 9,737,715
JESC 3,237,376 21,373,763
TED 223,108 3,877,868
monolingual sentences words
MTNT (Japanese) 32,042 943,208
MTNT (English) 81,631 3,992,200

論文の手法の概要

以下の手法が使われています。

  1. データの前処理手法: qe-cleanを含む様々な前処理を実行しています。
  2. Placeholder: 絵文字やEmoticonsを前処理でタグで置き換えてから、後処理で前処理前のものをコピーして置換する。
  3. Syntheticコーパスの作成: 提供されているMTNTのmonolingualコーパスを利用して逆翻訳を実行します。
  4. ファインチューニング: Syntheticコーパスを含むドメインコーパスでファインチューニングします。

NMTモデル

利用しているモデルは、Transformerで、transformer_base セッティングを基にしています。fairseq toolkit7の実装に基づきます。

説明 設定
Embeddingの次元 512
隠れ層の次元 512
フィードフォワードの次元 2048
headsの数 8
  • モデルは、encoder/decoderのword embeddingとdecoder output layerでパラメータを共有します。(three-way-weight-tying)
  • 各々のレイヤーはdropout=0.3で接続されています。
  • Adamを利用し、lr=0.001, beta1=0.9, beta2=0.98という設定を使います。
  • root-square dacay learning rate scheduleを4000ステップのlinear warmupと共に利用します。
  • GPUを効果的に使うためにmixed precision trainingを適用します。
  • 各々のバッチは8000サブワードです。
  • gradients accumulationを128 minibatchで使います。
  • 20000イテレーション回します。
  • 200イテレーションごとにモデルを保存し、最後の8つのcheckpointのaverageをとります。

Note: 訓練は、4つのNVIDIA V100 GPUを用いて1.5日かかります。

前処理

  • KFFTをja_prepro.pl8で修正します。
  • Ja-EnとEn-Jaでは異なる前処理を適用します。
  • Ja-Enでは単純に各々の言語サイドで32000のサイズを持つsentencepiece9を適用します。
  • En-JAでは、Kytea10を日本語、Moses11を英語に使い、mosesではtruecasedを使います。さらに、トーカナイズされたものをBPEで共有の16000語でトーカナイズします。

モノリンガルデータ

モノリンガルデータは、フィルタリングしてから逆翻訳して、さらにalignmentします。

  1. src-tgtモデルとtgt-srcモデルを両方訓練しておきます。
  2. 単語頻度を文ごとに求めて、その標準偏差が6以上の文を除外します。
  3. scapy12でトーカナイズして、80トークンより多い文を除外します。
  4. 逆翻訳してsyntheticコーパスを構築します。
  5. KFFT, TED, MTNT を利用して、qe-clean13によってsyntheticコーパスをalignmentします。

Placeholder

  • 絵文字を <PH>に変えます。これは絵文字への正規表現14によって対応できます。
  • emoticonを <PH>に変えます。emoticonの検出にnagisa15を使います。
  • 先頭の">"を <PH>に変えます。

これらのplaceholderは前処理によって<PH>へ変換され、翻訳後の後処理によって戻されます。

ファインチューニング

  • Ja-Enは、MTNTとsyntheticコーパスを用いてファインチューニングします。
  • En-JAは、MTNTのみを用いてファインチューニングします。

BLUEスコア

スコアはcase sensitive BLUEを使います。

f:id:mathgeekjp:20190903105339g:plain

参考