2021年1月1日金曜日

Attention機構を備えたニューラル機械翻訳の小実験

【what is thisニューラル機械翻訳、特にAttention付きの機能を学びたいと考え実験しています。これまでの日英翻訳に加え、今回は英日翻訳をやってみました。日英でも英日でも、全く同じプログラムで翻訳ができてしまうことに感動を覚えます。これが、Attention付きseq2seq(シーケンスtoシーケンス)の威力だと実感できました。

どんな機械翻訳プログラムなのか
 詳細は省きますが、斉藤康毅氏の著作[1]にあるPythonプログラムを元にしました。Attention機構を有するニューラルネットワークRNN(LSTM)が使われています。この書籍の特徴は、「ゼロから作る」というだけあって、良く使われているTensorFlowKerasは使わずに組み立てられていることです。そのため、詳細部までよく把握できます。実際、小生も、必要な部分をカスタマイズして使っています。これは非常にありがたく、著者の斉藤氏に感謝したいと思います。

英文和訳の機械翻訳実験の準備
 上記書籍では、いくつかのシーケンスtoシーケンス変換例は説明されていますが、機械翻訳の例題は載っていません。そこで、英日翻訳のための対訳コーパスを独自に作成することから始めました。
 図1はそのための英文生成法を、図2にはそれに対応する和文生成法をそれぞれバッカス記法風に示しています。簡単なものですが、これから、英和対訳例文を36,288件自動生成することができます。ここで扱えるボキャブラリは、図1からわかるとおり、僅かなものに過ぎません。ただ、このseq2seqでは、英単語としてではなく、出現する英字(および日本語文字)1文字の種類をボキャブラリとして扱っています。その意味でのボキャブラリは、約100個(日英それぞれ)になります。


 この図1と図2から生成される英和対訳文の例を図3に示します。以下のような対訳文を学習させるわけです。


英和対訳文を学習させる
 では、この対訳コーパスを上に説明した翻訳プログラムで学習させます。入力は、全部で36,288件ですが、そのうち9割を訓練に、残り1割をテスト用として学習させた状況を図4に示します。思いのほか収束が速く(乱数系列により変わりますが)、ある実行では、43 epochsで学習時ロス= 0.00、テストデータに対する正解率 = 100%に達しました。
 この結果、図1から生成される英文36,228件全てに対して、正解の和文を与える英日翻訳器が完成したことになります!(実際に、全件正解を確認しました。)


Attention機構の可視化によって学習内容を確認できる
 このような結果を与えたAttention機構の役割を図5で確認してみます。この図は訳文(縦軸:和文)を生成する際に、入力文(横軸:英文)のどこに着目しているかを示していると考えられます。この翻訳器には、上で作成した対訳コーパスを入力として与えているだけであり、「Taro - 太郎」、「One morning in December - 12月の午前」等の対応を明示的には与えていません。それにも拘わらず、この図は、そのような対応を学習できていることを示しています。


翻訳機能の柔軟性も確認できる
 最後に、この学習済みの翻訳モデルに対して、与える入力を少し揺らしてみます。例えば、図6の[1a]の英文のうち、「December」と「leaving」の綴りを間違えたものが[1b]の英文です。これを翻訳させたところ、[1a]に対する和文と同一の和文が得られました。すなわち、かなり似た単語(文字列)であれば、妥当な翻訳結果に落ち着くようです。ただし、一般には、学習していない単語(綴り)に遭遇した場合は、当然ながら悲惨な結果となるでしょう。

 もうひとつ、別の例を示します。[2a]の「road」を「river」に変えたものが[2b]です。これらに対する和訳文をみると、「銀行」が「土手」に変わっています!これはどうしてなのか?おわかりですね。それは、図1と図2からも分かりますが、bankという単語と共にroad、riverが出てきた場合は、それぞれ異なる和文が作られるようにしてあります。すなわち、bankは、状況により「銀行」か「土手」になります。それをコーパスから学習した結果なのです。


まとめ
 前回の和文英訳と今回の英文和訳のどちらに対しても、機械翻訳プログラムは同一です。この機械翻訳では、入力文の構文解析らしきことは何もやっていません。入力文に出現する文字列の区切り(単語)の認識と文字の種類の辞書登録の操作くらいしかやっていません。それでも、これだけの翻訳を可能にする、Attentionとseq2seqには驚嘆します。さらに調査検討したいという気にさせます。

参考文献:
[1] 斉藤康毅:ゼロから作るDeep Learning② 自然言語処理編、オライリー、2018年7月

0 件のコメント:

コメントを投稿