ラベル ニューラル機械翻訳 の投稿を表示しています。 すべての投稿を表示
ラベル ニューラル機械翻訳 の投稿を表示しています。 すべての投稿を表示

2021年1月1日金曜日

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

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

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

■英文和訳の機械翻訳実験の準備
 上記書籍では、いくつかのシーケンス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月

2020年12月8日火曜日

Attentionを用いたニューラル日英翻訳の実験(続)

 【what is this】Attention機能を利用した日英翻訳実験において、コーパスサイズ(入力データ量)を前回の3倍(約1万件→3万件)に増やしたところ、全検査データに対して100%正解翻訳出力するまでのepoch数は1/3(27回→8回)に激減した。

■何をしたのか
 前回の実験結果について、かっての同僚の先生から、「入力データを1/3にしたらどうなる?」とのコメントを戴きました。これがヒントになりました。でも、1/3にしてみるのではなく、前回は本来の1/3でやったのだ、と考えました。したがって、1/3にするのではなく、3倍にして観測する方が意味があると考えました。つまり、本来は3倍のデータでやるべきだったと考え直しました。

■Attentionの性能をあらためて実感
 詳細は略して結論を述べます。前回の日本語の(したがって英語の方も)語彙を少し増やして、コーパスサイズを10,368件から31,680件に3倍化しました。それぞれで、訓練用に8割、検査用に2割を使って学習させた結果が以下の図です。

 検査データの全てに対して正解英文を出力するまでに、前回27epochs、今回8epochsという著しい収束性能が明らかとなりました。小さなコーパスを何回も辿るよりも、大きなコーパスを使えば少ない走査で済む、という妥当な結果だと考えます。いずれにしても、Attention機能の素晴らしさを再確認できたように感じます。



 今回の収束状況の一例を示します。以下の図は、和文「夏に丸い赤い花がまばらに咲く」に対する翻訳状況です。epoch=1では、1単語が認識されているだけですが、epoch=2では、英単語は間違っていますがすでに英文の文型としてOKとなっています。つづくepoch=5では正解の英訳に達しました。




2020年12月7日月曜日

Attentionを用いたニューラル日英翻訳の実験

【what is this】Deep Learningでの重要度が高まっているAttention機能の仕組みを理解するため、独自作成の和英対訳コーパスを用いて、簡単な翻訳実験を行った。「はやぶさ2」の地球帰還ほどではないにしても、感動的な結果が得られた。極く限られた語彙だけを使う8,000件の日英対訳データの学習後には、例えば「盛夏に大きい赤い花が徐々に咲く」は、「large red flowers bloom gradually in midsummer」と自動翻訳された。

■何をしたいのか
 機械翻訳において、Deep LearningでのAttetion機能を理解しようとしていました。なかなか、コードレベルで実験しながら理解できるような情報が見つからなかったのですが、実は、2年前に購入した「ゼロから作る...自然言語処理編」[参考文献1]全412頁の最後の方(P.325〜)に、素晴らしい解説があることに気づきました。これだ!ということです。

■日英対訳コーパスを独自に用意する
 しかし、文献1には対訳コーパスを使った例はありませんでした。ならばと、極く簡単なものですが、図1に示すように、「花」に関して、開花時期、大きさ、形、色、密集の度合いなどを組み合わせて(語順も変えて)、約1万件の和英データを自作しました。なお、英訳の方は、図2に示すように、多様な日本語語順に対して、英文では語順は固定的にしてあります。(もちろん、日本語の単語が一つでも違えば、違う英文にしてあります。)


■日英対訳コーパスを使った学習の実験
 詳細は省きますが、さっそく、文献1にあったRNN-AttentionのPythonコードを利用させていただき、上記の対訳コーパスで学習させました。図3に示すとおり、最初は検査データに対する正解率が上がりませんでしたが、epoch = 20を越えるあたりから、急速に上昇し、epoch = 27 では、検査データ2,000件(学習用データは8,000件)に対する英訳がすべて正解となりました!これには感動を覚えました。


 一例として、和文「早春に 大きい 白い 花が 密集して 咲く」に対する翻訳状況を図4に示します。例えば、epoch = 5くらいまでは、僅かに、幾つかの単語が英訳されているに過ぎませんが、epoch = 27では、期待どおりの正解「large white flowers bloom densely in early spring」に達しています。



■Attention機能のビジュアル化で素晴らしさを実感
 このAttentionの美しさと能力は、以下の図5からも感じとることができます。学習が済んだ状態で、以下の和文を翻訳させた状況です。もちろん、正解が得られています。

 和文:紫の楕円の花が早春に一気に咲く
 正解:oval purple flowers bloom at once in early spring

 ここでは、何ら英語辞書は使っていません。上記のとおり、自前の対訳コーパスだけを使っています。それにも拘わらず、「紫の」「楕円の」「早春に」「一気に」等に対する英単語を自ら発見していることがわかります。驚異的です!



【参考文献】
斉藤康毅:ゼロから作るDeep Learning (2) 自然言語処理編、オライリージャパン、2018年7月

2020年11月20日金曜日

機械翻訳:bankは銀行か土手か

【what is this】機械翻訳に関する下記 [参考文献] を読んだことからヒントを得てこの記事を書いています。ただし、本内容は、小生の独自調査にもとづく見解です。

●英語の単語 bank
 bank
には、銀行、土手(堤)などの意味があります。人間ならば、それが出現する文脈からどちらの意味かは容易に判断できます。では、現代の機械翻訳はどうなのでしょうか?


 ・文例(a) I got to the bank after crossing the road.
 ・文例(b) One sunny Sunday, I got to the bank after crossing the river.

●現代の機械翻訳は人間の常識や感覚も取り入れている
 まず、文例(a)をご覧下さい。これは易しいです。代表的な4つの機械翻訳器(Google, IBM, Amazon, Microsoft)はいずれもほぼ同じ翻訳結果を出力しました。つまり、bankは銀行でした。bankとroadは何か関係がありそうな気もしますが、特に問題はありません。


 では次に、文例(b)を見てみましょう。文例(a)の末尾のroadをriverに置き換えたものです。さらに、先頭にOne sunny Sunday(ある晴れた日曜日に)を追加しました。小生の気持ちとしては、「晴れた日曜日に川を渡った」のですから、銀行へではなく、土手へ(散歩に)行ったのだ、と伝えたかったのです。この文例(b)に対する4つの機械翻訳器の結果は興味深いものがあります。

 GoogleとIBMの翻訳結果は、文例(a)の翻訳にあった「道路」を単に「川」に置き換えただけであり、「銀行」はそのままでした。一方、AmazonとMicrosoftは、人間の感覚(常識)と同じく、bankを「銀行」ではなく「土手」と捉えています。素晴らしい!

 「銀行は日曜日はやっていない」(ATMは別として)のだから「銀行ではなく土手だろう」という認識を機械翻訳器が持ったとは思えません。そうではなく、bankとriver(およびsunnyやSunday)が共起するケースをどれだけ学習していたかの違いではないでしょうか。そして、RNN系のニューラルネットワークでは、この場合、bankに対してriverやSundayがちょっと離れていることが問題なのかも知れない。ああ、そこが分布意味論!

●その他の機械翻訳器も試してみる
 上記の4つ以外にも、web上で使える機械翻訳はかなりあるようです。そのいくつかを加えて、翻訳結果をまとめます。文例(b)にあるbankをどう訳したかです。
 ・bankを銀行と訳した翻訳器:Google, IBM, Weblio
 ・bankを土手と訳した翻訳器:Amazon, Microsoft, Excite, DeepL

●日本語の文のsimilarity(類似度、関連度)の計算サービスで確認する
 いろいろあるでしょうが、例えば、NTT CommunicationsのKOTOHAを利用して、上記に述べた事項(銀行 or 土手)を判断するための計算結果が得られました。おうー、納得!やはり、日曜日は銀行はやっていない。だから土手へ散歩に行きます!
 ・「晴れた日曜日に川を渡った後に着いた」⇔「銀行」のsimilarity = 0.106
 ・「晴れた日曜日に川を渡った後に着いた」⇔「土手」のsimilarity = 0.515

●まとめ
 この一例だけから、上記の機械翻訳器の優劣に言及する意図は全くありません。実際、私にはそれはできません。しかし、ここで見えてきたのは、どの機械翻訳器も、人間の常識(感覚)に沿うように進化を続けているのだろう、ということです。(現在、2020-11-20です。上記結果は短期間のうちに変わる可能性があります。新たな研究開発が進んでいても、一般公開までには時間がかかるでしょう。英-日は、英-独や英-仏よりもサポートが遅れることもあるでしょう。)

[参考文献]
Google AI Blog:
https://ai.googleblog.com/2017/08/transformer-novel-neural-network.html


2020年11月6日金曜日

ニューラル機械翻訳方式の独自解釈

  Google翻訳など、ニューラル機械翻訳技術は近年著しく発展して、実用レベルにあると言われています。実際に使用してみて、確かにそのように感じます。しかし、その処理内容の全貌はなかなか掴みきれません。一例ですが、Google翻訳で、以下の和文を入れてみると、次のように英文に翻訳されました。

「学生は物理学を教授から」→ Students learn physics from a professor

 うん?「学ぶ」とは言っていないのに、なぜ、「learn」と翻訳されたのか?これについて、小生が独自に(勝手に情報を設定して、思い切った簡略化をして)推測してみた結果を以下の図に示します。恐らく、「当たらずと雖も遠からず」と思っていますが、いかがなものでしょうか。いずれにしても、単語(および単語列)のベクトル(分散表現)と、その間のコサイン類似度等が根底にあり、それに基づくAttentionという機能が使われているのはまちがいないようです。

ニューラル機械翻訳の大胆な簡略化による説明