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月

2020年12月17日木曜日

神奈川工科大学で講義:自然言語処理と機械学習(事後編)

 【what is this】神奈川工科大学_情報工学科向けの「入門:自然言語処理と機械学習」講義後の報告です。前回の続編になります。現状の小生にとって、今年のn大ニュース(n ≦ 3)入りとなりました。 

久しぶりに約140名に90分講義(講演)
 前回記載のとおり、90分のオンライン講演を実施(2020-12-10)。対象は、約140名の2年生ですが、先生方や大学院生にも聴いていただきました。このコロナ禍ゆえ、自宅からZOOMを利用した講演でしたが、特にトラブルもなく終えることができました。
 熱心に聴講し質問もしてくれた学生諸君に、そして準備された担当の先生、応援して質問もしていただいた先生方に感謝したい。当方としてはここ2ヶ月間、構想を練り準備してきた甲斐があり、たいへん嬉しく思っています。下図のスクリーンショット、どこか良い雰囲気を醸し出しているような気がします。

2年生約140名と、院生、先生方にも参加していただいた

質問が出るのはオンラインのメリット
 上図右欄に見えますが、講演後に学生諸君から3件ほどの質問がチャットで寄せられました。対面授業では通常、ほとんど出ませんので、これは、オンライン授業の良い点のようです。ただ、質問時間は限られていたので、その場でパチパチ素早く質問を正確に打つのは難しかったと思います。後でメールでも質問できるように、当方のメールアドレスも講義スライドに記載はしておきました。

その場の反応が分からないデメリットも
 一方、受講状況が掴めません。私は、ユーモアというか、「ここで学生諸君を和ませよう」と、スライドの何カ所かに仕組んでいたものがあります。それに対する反応が分からないのです。対面であれば、大人数の場合でも、ちょっとどよめいたり、笑いが起こったりするのが分かります。それが知りたいのです。それは5カ所位あったのですが、例えば、以下のような所でした。「ここじゃない!ここ!(詳細はこちら)「日曜日は銀行はやっていない!(詳細はこちら)」It happens inevitably.

ここで、小さなどよめきや笑いが起こるのでは...

後日提出の受講レポートから反応を掴む
 ですが、この講義受講ではレポート提出が義務づけられているため、後で状況を掴むことができました。熱心によく受講してもらったことが分かりました。今後の参考にしたい。残念ながら(公式レポートにはそういうことは書かないものだが)、上記の笑いについて触れた学生はいませんでした!ちょっと残念。以下に、学生諸君からの反応をいくつか示します。(原文の意味を損なうことなく、抜粋、編集したところがあります。)
  1. メモは取ったが、講義資料が公開されていなければ、後で理解を深めることは困難だったが、それがあったので非常に助かった。((注)スライドが役立って良かった。)
  2. 資料を見返してしっかりとまとめたメモと見比べなんとなく理解するところまで行けたことは、個人的にとても大きかったです。((注)予習して臨んだようです。)
  3. 内容だけを見たらすごく難しいものを簡単に見せる工夫や見る側が興味を持つようなしゃべり方をしていたので参考にしたいと思いました。((注)よく分かってくれました!)
  4. 最初は基礎的な部分から、徐々に内容を複雑にしていって、尚且つ前のスライドでその話に持っていきやすいように、しっかりその情報の開示・整理を行っていたために理解しやすくて、((注)そこまで、よくぞ分かってくれました!「以心伝心」という言葉が頭に浮かんだ。)
  5. 退職後も自分の興味で調査や実験をしたという事を聞いて、私も自分自身で動く行動力や何にでも興味を持つ好奇心を忘れないようにしたいと思いました。((注)こんなところにも気がついてくれました!)
  6. 自身が気になったから実際に行ってみたという動機や実体験を元にした説明だったので、内容がわかりやすく伝えたい事も明確で、全体的にとても良かった((注)そのとおり。自分でやってみること!)
  7. Google翻訳を使っているが((注)そういう学生が非常に多かった!)、それに関連する技術や動向の概要が分かった。機械翻訳がこれほど凄い技術でなりたっているとは思わなかった。
  8. 数学の知識が不足しているのでそれを身に付けたい。((注)講義では、誤差逆伝播や微分等については直接言及しなかったのだが、学生は、数学的手法を感じ取った!)

時間配分に気を配る
 スライドは全部で62枚ありました。90分のうち、どの辺りにどの位時間をかけるのか、受講者もそれが分かると落ち着いて聴けるように思いした。少し余裕を持った時間配分とするのが良いと思います。結果としては、ある先生から(そして学生のレポートの中にも)、「ほぼ、時間配分どおりでしたね」と言われて、ちょっと安心。

事前に決めておいた時間配分(配布スライドにも記載)

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くらいでは、語彙数と同程度の隠れ層ノード数を設定するのがよさそうです。こんな見解、どんなものでしょうか。

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年12月2日水曜日

神奈川工科大学で講義:自然言語処理と機械学習(事前編)

 【what is this】情報工学科2年生向けの「入門:自然言語処理と機械学習」の概要です。90分のオンライン講義用です。(事後編はこちら

久しぶりの90分授業
 縁あって今回(2020-12-10)、神奈川工科大学情報工学科2年生向けに、90分のオンライン講義をすることになりました。全部で15回あるオムニバス形式の情報工学特別講義の1回分です。

 内容は、「自然言語処理と機械学習」です。ここ2,3年、興味をもって調べたり、自分で実験してみた事項に基づいています。自然言語処理の基本的な解析から機械翻訳までの重要と思われる技術について述べます。

 本当は学生諸君の顔を見ながらの対面授業でやりたいのですが、このコロナ禍のもとでは致し方ありません。しかし、自宅の机上から講義するのですから、やりやすい面もあります。

講義のタイトル

講義の全体構成と時間配分目安

講義にあたって留意したこと

  1. スライド枚数を適切に抑えて、講義時間を超過しないこと。最終的には、目次なども含めて、全62枚のスライドを準備し、(90分だが)85分で終了することをめざす。
  2. 全体を大きく4分割し、それぞれ20分程度の話として明確に区分すること。またそれら各部の相互関連も示すこと。
  3. できる限り、独自の例題、独自のプログラム、独自撮影の画像、身近な話題などを使って、当方の取り組み姿勢を示す。
  4. インパクトのある素晴らしい、他の人の成果は積極的に引用させていただく。
  5. 技術の詳細の講義ではないが、「ふわー」としたお話しに終わらずに、なるべく一定の深さまで掘り下げ、具体例をあげ、簡単な計算例なども加えること。
  6. 一方、詳細な技術内容には立ち入れないとしても、何か「凄いぞ!」「こんなことも考えられているのか!」と驚きを感じ興味を持ってもらう場面も作ること。

講義予定のスライド一覧
 以下は、4区分したスライドの縮刷版です。実寸スライドは(先生方にはすでにご覧いただいていますが)講義時までに学生諸君へ公開します。

part1 人工言語、自然言語、機械学習、サービス

part2 基本解析、形態素解析、係り受け解析、分類問題、コーパス

part3 単語の意味理解、共起語、単語の実数ベクトル空間への埋込み

part4 機械翻訳(用例的、統計的、ニューラル、Attention)、参考文献

このあとどうする
 この講義は、「入門」としています。このあとはどうするか、少しギャップがあると思いますが、技術的にさらに深めたものを作りたいと思っています。特に、最新の機械翻訳の仕組みを明確に説明できることを目指したい。

【参考文献】
 以下の文献等から、多くのことを学びました。また、それらにある例題や図表の一部を引用させていただきました。感謝致します。
  1. 黒橋禎夫改訂版 自然言語処理、放送大学教育振興会、2020年:基本概念とアルゴリズムを簡潔かつ精緻に叙述した定評の教科書。手計算できる小さな例題で理解を深める。改訂版では、最近の機械翻訳(20ページ)が追加された。(全202頁)
  2. 杉本徹・岩下志乃Javaで学ぶ自然言語処理と機械学習、オーム社、2018年:基本概念と基本技術が、幅広く丁寧に解説されている。明解なJavaプログラムとその解説があり、それを動かしながら理解を深められる。(全262頁)
  3. 斉藤康毅ゼロから作るDeep Learning(2)自然言語処理編、オライリー、2018年:定番の「ゼロから作る…」の第2弾、自然言語処理編。じっくり一歩づつ(Pythonでプログラムしながら)進む。最初の方にDeep Learningの一般的解説もある。(全412頁)
  4. 柴原一友自然言語解析アルゴリズムBERT(前編)、日経ソフトウェア2020年7月:情報検索や機械翻訳で注目されているBERTの考え方のやさしい解説。BERTの中核であるTransformerとAttentionがどんなものかをイメージすることができる。 (全13頁)
  5. 奥野陽他2自然言語処理の基本と技術、翔泳社、2016年:広範な話題を数式を使わずやさしく解説しようとしている。初心者が技術の概観を得るのに適す。機械翻訳の解説もあるが、発行が少し前のためか、ニューラル機械翻訳は含まれない。(全239頁)

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銀行でした。bankroadは何か関係がありそうな気もしますが、特に問題はありません。


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

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

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

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

日本語の文のsimilarity(類似度、関連度)の計算サービスで確認する
 いろいろあるでしょうが、例えば、NTT CommunicationsKOTOHAを利用して、上記に述べた事項(銀行 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月7日土曜日

[算数 ≒ 数学 – 難しい + 楽しい]の解

  自然言語処理では、単語の実数ベクトル空間への埋め込みが重要な役割を担っています。大規模コーパスのもとで、全単語ベクトルはすでに計算されていて(ツールWord2Vec等を用いて)、何種類かが公開されています。これによれば、単語ベクトルから、例えば、以下のような意味関係が成り立つことが分かっています。多くの書籍やweb解説にも掲載されています。

        King - Queen ≒ man - womam
    (KingとQueenの差ベクトルは、manとwomanの差ベクトルと類似)

 さて、そのような大規模コーパスではなく、以下のような単純な10例文だけの世界を考えます。(助詞などは取りあえず考えないので薄字にしてあります。)この世界では、12単語しか出現しません。このような範囲で、単語をベクトル空間へ埋め込んでも、上記と同様に、単語の意味関係は掴めるでしょうか?


 ここでは、注目単語に対して、window size = 2の範囲に共起した単語を認識するよう、ニューラルネットワークを学習させます。例えば、注目単語「確率論」を入力とした場合、「難しい」と「数学」を教師信号として学習させます。これを、全文全単語について行います。学習終了後のニューラルネットワークにおいて、入力から中間層(隠れ層)のノードへの辺の重みが、その単語のベクトル要素となります。このようにして、全単語について、2次元(中間層のノード数が2の場合)のベクトルを得ます。その結果を下図に示します。

12単語に対する2次元ベクトル

 この結果を見ると、「算数、百マス、児童、早朝」および、「確率論、学生、数学、徹夜」など関連性の高い単語がそれぞれ一つのベクトル上(白線矢印)にのっていることがわかります。

 実は、この結果は一つの解に過ぎません。恐らく、無数に解(すなわち、単語ベクトルの組み)は存在するはずです。ここではそのうちの、[解1]と[解2]を示しました。[解2]は、[解1]を原点を中心に30度ほど回転させたものになっているようです。ここで、「数学」と「算数」の差ベクトルと、「難しい」と「楽しい」の差ベクトルに着目します。この2つの差ベクトルは平行に近いです。したがって、下記が成り立ちます。

        数学 - 算数 ≒ 難しい – 楽しい
        算数 ≒ 数学 – 難しい + 楽しい

 こんな小さな実験コーパスでも、単語の意味関係が掴めたと思います。

2種類の2次元単語ベクトルの組み

 上記は2次元ベクトルでしたが、3次元ベクトルを生成(中間層のノード数を3に設定)した結果が下図です。次元を上げれば、見えてくる情報量も増える傾向にある?かも知れません。ここでも2種類の解を示しますが、いずれも、上記の意味関係が保たれていることが分かります。

2種類の3次元単語ベクトルの組み

2020年11月6日金曜日

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

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

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

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

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


2020年11月3日火曜日

国立国語研究所から届いたマスキングテープ

 最近は、自然言語処理(機械学習は重要な手段の一つ)を勉強しています。それに不可欠なのが、言語コーパスです。言語コーパスとは、言語による文例を大規模に収集して、一定の処理を施した後に、各種の情報(形態素、構文情報等)を付加したデータベースと考えられます。国立国語研究所では、その主要な業務のひとつとして、多様なコーパス群を研究開発し、公開しています。

 少し前に、これらのコーパスを利用した「KOTONOHA検索コンテスト2020」が開催され、小生もこれに作品応募しました。(少しは期待していたのですが)入選はできなかったのですが、参加賞としてマスキングテープ4個が送られてきました。研究所や検索ツールのロゴ(NINJAL、中納言など)がデザインされています。ちょっとうれしかったのですが、はて、これ何につかうもの?目隠し、目張りに使う?

国立国語研究所のマスキングテープ

 そんな時には、「Ok Google, マスキングテープはどのように使う」です。お見事!

 さらに納得!百円ショップへ行った時のこと。カラフルな様々な模様を印刷したマスキングテープが大量に売られていました。上記のとおり、小物やバックやスマホなどのデコレーション用として、今人気上昇中であることが分かりました。粘着性が高いのに、不要になった際に剥がしやすいのもよいらしいです。

市販されているマスキングテープ

 それでは、ということで、小生もiPhoneの裏に、国立国語研究所のマスキングテープで飾ってみました。ちょっと渋いですが、気分転換になりそうです。

iPhoneの裏に国立国語研究所のマスキングテープ