ロボマインド・プロジェクト、第281弾!
こんにちは、ロボマインドの田方です。
高精度な文章を生成するAIが話題となってますよね。
GPT-3とか、GoogleのLaMDAとか。
でも、実際にやってるのは、大量の文書から、単語の並び順を学習してるだけです。
自然な文章になるように単語を並べるのが上手いだけで、意味を理解してるわけじゃありません。
それに対して僕らは、AIに言葉の意味をちゃんと理解させようとしています。
それが、ロボマインド・プロジェクトです。
でも、言葉の意味って、未だに、誰も定義出来てないんですよ。
言語学も含めて、何百年もできてないんです。
もちろん、意味論とか、それらしいものはありますけど、僕が目指してるのは、コンピュータに実装できる計算可能な定義です。
そんな難しいこと、僕らにできるのって思いますよね。
でも、勝算はあるんですよ。
何でかって言うと、何百年も、みんな、どこで間違ってたか、その理由がはっきりわかってるからです。
それは、言葉を言葉で定義しようとしてるってことです。
たとえば、辞書は言葉の意味を言葉で書いてますよね。
その意味を、さらに調べても言葉で書いてあります。
じゃぁ、その意味をさらに調べてって続けたら、どうなると思います?
元の単語に戻るんですよ。
これが、言葉を言葉で定義しても意味ないってことです。
じゃぁ逆に、人は、どうやって言葉の意味を理解してるんでしょう?
それは、言葉を頭の中でイメージしてるんですよ。
文章を読んだら、そのイメージを動かしていきます。
上手くイメージできたら、それが、言葉の意味を理解してるってことです。
つまり、イメージとか、動きとか、言葉を別の物で定義してるわけです。
言葉を言葉で定義してないんですよ。
僕らがやろうとしてるのは、人がやってることと同じことを、コンピュータでやろうとしてるわけです。
ただ、コンピュータで言葉を定義するだけなら、他でもやってます。
オントロジーとかセマンティックWebとかってのがあります。
でも、どれも、言葉で言葉を定義するってジレンマからは抜け出れてないんですよ。
ただ、今まで、誰もやったことのないことをやるって、結構大変なんですよ。
何が大変かっていうと、参考になる論文とは本とか、一切ないんです。
じゃぁ、どうやって言葉を定義してると思います?
それは、毎日、ミーティングで議論して決めてるんですよ。
これが、今回のテーマです。
全部見せます!
ロボマインド流、言葉を生み出す会議
それでは、始めましょう!
まず、最初にメンバーを紹介します。
ロボマインド・プロジェクトは、現在、3人で活動してます。
僕と、僕のYouTubeの動画編集をしてくれてるMさんと、開発者のSさんの三人です。
最初は、僕とMさんの二人で開発してました。
でも、僕のアイデアをコンピュータで実現するのって、結構、技術的に難しくて、それで優秀な開発者をメンバーに入れようってなってSさんが参加してくれました。
Sさんは、かなりの技術を持っていて、プログラム言語とかコンパイラも作れるんですよ。
これは、ロボマインド・プロジェクトにぴったりです。
何でかって言うと、僕のやろうとしてるのは言葉の意味理解です。
文を読んで、意味を理解するって処理に関しては、自然言語もプログラム言語も、構造的にはどっちも同じなんですよ。
違うのは、表現の中身です。
だから、プログラムを解釈、実行するみたいに、自然言語も解釈、実行すべきってのが僕の根本にあるアイデアです。
これ、今のAIと、考え方が全く違うってわかりますよね。
それから、プログラム言語の中でも、オブジェクト指向言語は、人間の思考をそのままプログラムで書けるように設計された言語です。
だから、自然言語を意味理解させるには、絶対、オブジェクト指向言語だって、ずっと思ってたんですよ。
それから、もうひとつ、意識は、スクリプト言語だってアイデアもありました。
だから、マインド・エンジンって、最終的には、オブジェクト指向スクリプト言語になるべきだって、ずっと思ってたんですよ。
だから、Sさんが、プログラム言語を作れるって知ったおとき、「おおっ!」ってなったんですよ。
「えぇ、それじゃぁ、こんなのも作れる?」って感じで。
まぁ、それが分かったのは、Sさんが入社して、しばらく経ってからなんですけどね。
今のマインド・エンジンの方向性は、こうやって決まったんです。
Sさんが来る前、僕とMさんは何をやってたかって言うと、ずっと、オントロジーを作ってました。
オントロジーっていうのは、単語の関係を表現するものです。
単語の関係は大きく二つに分けられます。
一つは、is-aとか概念っていう関係です。
哺乳類は動物の一種とか、イヌは哺乳類の一種とかって概念の上下関係です。
もう一つは、has-aとかpart-ofの関係です。
哺乳類は頭と頭部と脚部を持っていて、頭部は目を持っているって関係です。
こういう分類は1980年代の第二次AIブームのころからあって、この考え自体は、僕も正しいと思うんですよ。
それで、最初に取り組んだわけです。
ただ、どうしてもしっくりいかなかったんですよ。
そこで、ここでもオブジェクト指向言語で整理してみたんです。
オブジェクトというのは、人が頭の中でイメージするひとまとまりのデータです。
たとえば、犬をイメージするとき、足が4本あるとか、哺乳類とか、犬種とか、ワンワン吠えるとかってデータのまとまりでイメージしますよね。
これがオブジェクトです。
だから、オントロジーもオブジェクトを中心に組み立てるべきって思ったんですよ。
たとえば、犬は哺乳類の一種ですよね。
つまり、犬ってオブジェクトはis-aの関係で整理できるんですよ。
それから、オブジェクトはプロパティとメソッドを持ってます。
プロパティは、色とか犬種とかって、そのオブジェクトの属性です。
メソッドは、ワンワン吠えるとか、オブジェクトの動作の事です。
だから、あらゆる言葉を、オブジェクト、プロパティ、メソッドって三つに分類するんです。
こんな感じでツリー状に整理するわけです。
それで、犬オブジェクトは、犬種プロパティとワンワン吠えるメソッドを持ってるってデータを管理しておくんですよ。
それで、「犬」って単語が出てきたら、オントロジーからプロパティとメソッドを動的に組み合わせて犬オブジェクトを生成するんです。
それから、もひとつ、has-aツリーは必要です。
犬は胴体を持っていて、胴体は、頭と脚としっぽを持ってるって関係です。
これも、犬オブジェクトを生成するときに生成します。
これで、人間が「犬」と聞いたときに思い浮かべるのと同じものを生成できます。
さて、問題はメソッドです。
今までの話は、関係だけで表現できる言葉です。
でも、メソッドって動詞です。
動詞は、どうやって表現したらいいだろうかってことです。
動詞って何らかの動作ですよね。
動くってことは、動く前の状態と、動いた後の状態があるわけですよね。
そこで、僕が考えたのが、あらゆるメソッドを、BeforeとAfterで定義するってことです。
例えば、移動するは、移動前の位置と、移動後の位置で定義するとかです。
それで、まずは、簡単な動詞から定義していこうってなりました。
こっからが、今日の本題です。
ロボマインドのミーティングで、どうやって言葉を定義していってるかって話です。
まず、僕が、いくつか、思いつく動詞を出して、それを、Sさんに定義してもらいます。
定義するってのは、is-a、has-a、オブジェクト、Before,Afterで組み立てるってことです。
その定義を見て、3人で、ああだこうだってブラッシュアップしていくわけです。
たとえば、先日、やったのが「穴をあける」って動詞です。
これを、Sさんは、最初、こう定義しました。
Beforeとして、物体があると。
Afterとして、その物体がhas-aとして穴を持つと。
厳密には、Beforeの穴の数より、Afterの穴の数が多いって定義でした。
なるほど。
穴の数で定義するとは、プログラマーらしい考えです。
数を数えるって、計算可能ですし。
でも、なんか、ちょっと違うような気がします。
ここには、大事なことが表現されてないんじゃないかって思ったんですよ。
Has-aとして、穴を増やすのって、これ、穴でなくても何でも成り立ちますよね。
筆箱に鉛筆が一本増えましたって場合でも、has-aの鉛筆追加で表現できます。
つまり、ここで表現してるのは、何かが増えたってことで、穴の意味の本質は表現されてないんですよ。
そんなことを僕が指摘して、じゃぁ、まずは、穴の意味を先に定義しようってなりました。
そしたら、Mさんが、形じゃないかなって言います。
穴は、丸とか三角とかって形の一種じゃないかと。
だから、穴は属性、プロパティで定義すべきじゃないかと。
なるほど、それはありそうですよね。
Mさんは、オントロジーの登録をかなりしてたので、オントロジーの構造が、完璧に頭に入ってるんです。
物の形って概念の下には、2次元形状と三次元形状があって、穴は三次元形状の下位概念になるんじゃないかってことです。
ここまでは、問題なさそうです。
ただ、まだ、なにか足りない気がします。
そこで僕はこう言いました。
「穴」は形とは別の定義というか、別のレイヤーにあるんじゃないかって。
たとえば、三角形の定義だったら、三本の直線が、3点で交わる形とかって定義しますよね。
でも、穴は、そういう定義とは違うレイヤーにあるんじゃないかって。
じゃぁ、どういうレイヤーにあるかっていうと、機能的に表現するってレイヤーじゃないかと。
つまり、「穴」の意味は、形状に特徴があるんじゃないんですよ。
形じゃなくて、「入る」とか「出る」とかって機能で定義すべきなんですよ。
つまり、穴の本質は、メソッドなんですよ。
ということはですよ。
メソッドを持つって言うことは、「穴」というのは、プロパティというよりオブジェクトなんです。
ということは、さっきの図でいうと、
オブジェクトの下に入るの?ってなります。
でも、なんか、それは違いますよね。
ここで言うオブジェクトは、リンゴとか犬とか、一つのまとまりですし。
やっぱり、この図で「穴」を置くとすれば、プロパティの下になります。
でも、プロパティがオブジェクトになるって、意味がわからないです。
そこで、Sさんが言いました。
プロパティがオブジェクトになるのは問題ないと。
分かりにくいかもしれないですけど、オブジェクトのプロパティがオブジェクトってのは、オブジェクト指向言語で普通にあることです。
まぁ、ここは、分からなくても気にしなくてもいいです。
言いたいのは、「穴」というのはオブジェクトで定義するってことです。
穴オブジェクトはメソッドとして、「入る」と「出る」を持ってるんですよ。
そこで、最初の話に戻ります。
Sさんの「穴」をあけるの定義です。
まず、Beforeは物体があるわけです。
Afterは、物体にhas-aで「穴」が追加されるって定義。
これ、じつは、正しいんです。
「穴」オブジェクトが追加されたんです。
そして、その「穴」オブジェクトは、「入る」と「出る」のメソッドを持ってるわけです。
ここで、また一つ、僕は疑問を感じたんです。
物体に「穴」があるって、これはhas-aでいいの?
「穴」があるって、has-aじゃなくて、プロパティじゃないのって疑問です。
ちょっと整理します。
プロパティって属性の事です。
リンゴの色が赤いは、プロパティですよね。
味が「甘い」もプロパティですよね。
でも、自動車が、タイヤを持つは、has-aですよね。
じゃぁ、プロパティとhas-aの違いって何やろう?
分からなくなってきました。
そこで、僕は、手で触れるものはhas-aで、触れないものがプロパティじゃないかって提案しました。
だから、色とか味はプロパティで、タイヤはhas-aなんです。
そしたら、Mさんが言いました。
学校とPTAの関係はhas-aじゃないかと。
PTAは、手で触れません。
でも、PTAは、学校のプロパティじゃないですよねぇ。
PTAは手で触れないけど、has-aになりそうです。
そこで、Mさんは、続けてこういうんですよ。
has-aとなるのは、「ある」と言える場合じゃないかと。
「ある」と言わない場合はプロパティやと。
「学校にはPTAがある」っていうから、PTAはhas-aの関係やと。
なるほど、それは使えそうです。
リンゴは赤いとは言うけど、りんごには赤があるとは言わないですしね。
甘いがあるとも言わないですし。
穴があるっていうから、これはhas-aやと。
それや!って思いました。
さすが、Mさんです。
これが、ロボマインドで、毎日やってるミーティングです。
こうやって、マインド・エンジンを設計してるんです。
今まで、誰もやったことのないことって、こんな風に手探りでつくっていくんです。
普通の研究なら、論文で発表するんですけど、僕は、YouTubeで発表してるわけです。
ただ、見てる人は、みんな付いて来れてますかねぇ。
もし、この動画を見て、全く意味わからんって思ったら、まずは、この本から読んでください。
全体像が見えてくると思います。
次回も、この続きをやろうと思います。
はい、今回の動画が面白かったらチャンネル登録、高評価お願いしますね。
それじゃぁ、次回も、おっ楽しみに!