2020年12月12日土曜日

Attention-Seq2Seq翻訳実験での隠れ層ノード数

  【what is this】日英翻訳実験を行う上で、手頃なサイズの日英対訳コーパスが必要です。ここでは、簡単なものですが独自に用意してみました。そして、これまでの記事に書いた方式(Attentionを用いた)での学習実験を行いました。約4万件の和文のうちからランダムに選んだ9割について対訳英文を学習させた結果、残りの1割の和文全てに対して、正解の英訳文を生成できました。その際の、LSTM隠れ層のノード数に対する和英翻訳正解率の違いを観察しました。

独自のミニ和英対訳コーパスを作成する
 図1のフローに従い、左端から右端までのあらゆるパスを辿ると、語彙数38の範囲で和文41,472件が生成できます。一方、図2に従うと、それらの和文に対する英訳文を生成できるようになっています。英文の場合は、人称に応じて動詞(例えばexpectかexpectsか)の形を選択します。また、この動詞を使う場合は、図2の赤丸に示すように"to"を付加する必要があります。


どのような対訳文が生成されるか
 上記にしたがって生成された和文とその英訳文の例を3つほど示します。
[J1] 私は白い小さな花が早春に一斉に咲くのならばそこへ行くだろう
[J2] 彼女は黄色い斑な花が真夏に密集して開くことを期待している
[J3] 我々は紫の丸い花が晩秋に徐々に咲くことを期待している

[E1] I would go there if white small flowers bloom all at once in early spring
[E2] She expects yellow mottled flowers to open densely in midsummer
[E3] We expect purple round flowers to bloom gradually in late autumn

Attentionを利用した翻訳に上記コーパスを適用
 今回の翻訳方式は前回、前々回の記事に述べたとおりです。つまり、Attention付きseq2seqによるものです。それを構成するLSTMの隠れ層のノード数について実験的に検討しました。以下の結果は、いずれの場合も、約4万件の和英文の対の9割を学習させ、残り1割(約4,000件)を検査に使った場合です。

隠れ層のノード数をどう決める
 実用的な翻訳処理では、入力one-hot vectorの次元(語彙数)は50,000前後であり、隠れ層ノード数は500前後とされているようです。しかし、今回のように語彙数38と非常に少ない場合はどうなのでしょうか。それを確認してみました。以下の図3(a)〜(c)では、隠れ層のノード数が違います。検査用の和文に対して生成された英文の正解率の推移を示しています。

 まず、図3(a)は、隠れ層ノード数を16とした場合です。乱数系列を変えた2つのケースについて示しています。なかなか正解率が上がらず、使えそうにありません。


 次の図3(b)は、隠れ層ノード数を32とした場合です。かなり良いようです。epoch = 20では、すでに検査用和文約4,000件の全てに対して妥当な英訳が得られています!正解率100%!


 図3(c)は、隠れ層ノード数を64に倍増した場合です。より早めに正解率が高まるものの、途中の局所解で停滞したり、誤差低減に不安定が生じたりする傾向があります。


一応の結論
 こんな簡単な実験だけで何が言える?という面もありますが、今後の参考になるように思います。隠れ層のノード数が少なすぎると、入力語彙に対するベクトルにその意味情報が正確に盛り込めない。逆に、隠れ層のノード数が多すぎると、該当の語彙のベクトルに雑音が混じりやすいのではないか。それゆえ、今回のように語彙数38くらいでは、語彙数と同程度の隠れ層ノード数を設定するのがよさそうです。こんな見解、どんなものでしょうか。

0 件のコメント:

コメントを投稿