第121回 「風が吹けば桶屋が儲かる」をAIは理解できるか 前編


ロボマインド・プロジェクト、第121弾!
こんにちは、ロボマインドの田方です。

人って、頭の中で、ごちゃごちゃ理考えますよね。
理屈を考えて、それで、他人を説得しようとしたり。
理屈って、いかにも人工知能ができそうなことなんですけど、今のAIじゃ、絶対無理なんですよ。

だって、今のAIって、大量の文書を解析して、単語が出現する確率とかを計算してるだけですよ。
理屈もへったくれもないんですよ。
じゃぁ、理屈をこねるAIを作るには、どうやったらいいんでしょうねぇ?

僕がやってるのは、コンピュータに言葉の意味を理解させることです。
そのために、人間が頭の中で思い描いてるのと同じことを、コンピュータで再現しようとしてます。
だから、頭の中でごちゃごちゃ理屈をこねたりできないといけないんですよ。

そこで、今回は、理屈や屁理屈を理解するプログラムを考えようと思います。
どんな屁理屈を理解しようかと考えたんですけど、日本人なら、これでしょってことで、
「風吹けば、桶屋が儲かる」をコンピュータに理解させることにします。

ところで、このロボマインド・プロジェクト、キンドルで出版することになりました。
タイトルは、「普通に会話ができる ドラえもんの心のつくり方」です。
第一巻のサブタイトルは「コンピュータに意識が発生するまで」です。
意識の仮想世界仮説までの話です。
内容は、大幅に加筆修正してます。
この動画の説明欄にリンクを貼っとくので、良かったら、読んでください。

それじゃ、話を戻します。
「風吹けば、桶屋が儲かる」でしたよね。
理屈の話ですけど、いきなり、「風が吹けば、桶屋が儲かる」の話は難しいので、最初は、超簡単な話から始めますね。

たとえば、ここにシーソーがあります。(ホワイトボード)
シーソーの端を下に押すと、押した側が下がって、反対側が上がります。
理解できますよね。
理屈が合ってるってことです。
押した側が上に上がりましたじゃ、理屈に合わないです。

じゃぁ、理屈に合ってるって理解するには、どうすればいいでしょう?
原因と結果をデータベースに登録したらどうでしょう?

たとえば、(ホワイトボード)
シーソー
原因:端を押す
結果:押した側が下がって、反対側があがる。
こんなことを文章で書いても、これは、意味を理解したといえないですよね。

だって、押すんじゃなくて、座っても下がりますしね。
荷物を置いても下がります。
それじゃぁ、押すとか、座るとか、全部をデータベースに書いていけばいいんでしょうか?
そんなことしてたら、きりがないですよね。

それじゃぁ、この二つの絵をデータベースに登録したらどうでしょう?
矢印が力を示すわけです。
手で押しても座っても、矢印と同じ意味なので、全てを書き出す必要はないです。

でも、これも意味ないです。
なぜかと言うと、この絵がシーソーを意味するとか、矢印が力を意味するとか、それが理解できるのは、人間だからできるんです。
僕らはシーソーがぎっこんばったんするとか、矢印の意味を知ってるから、この図の意味が理解できるんです。
それを知らないコンピュータに理解させるには、どうしたらいいでしょう?

じゃぁ、どうすればいいんでしょう?
そこで、ロボマインド・プロジェクトでは、3DCGを使います。
具体的にはUnityっていうゲームエンジンを使ってます。
3DCGなので、支点で板を支えたり、重力が表現できます。
ゲームエンジンはシミュレーションができるので、ぎっこんばったん動かすことができます。

さらに、ゲームエンジンには、便利な機能がいっぱいあって、あたり判定なんて機能があります。
たとえば、シーソーの板にあたり判定を使って、物があたった場所、向き、力の大きさなんかが分かります。
だから、シーソーの端を手で押したり、座ったりすると、シーソーの板が傾いて、押した側が下がって、反対側が上がるわけです。
これは、シーソーの端に力が作用したら、どう動くかをシミュレーションしたわけです。
つまり、シーソーの端に力が作用するというのが原因です。
力が作用した側が下がって、反対側が上がるってのが結果です。
原因と結果がこれで表現できました。
あたり判定を使って表現したので、手で押した場合でも、座った場合でも再現できます。
あらゆる場合を書き出す必要はありません。
これで、理屈が理解できましたよね。

それじゃぁ、「風吹けば、桶屋が儲かる」を理解させてみましょう。
知ってますか?
屁理屈の代表みたいな話ですけど。
簡単に、説明しときますね。

風が吹いたら、なぜか、桶屋が儲かるって話です。
何でそうなるかって理屈があるんです。

まず、風が吹くと、砂が舞うでしょ。
そしたら目に砂が入って、目が見えなくなるんです。
屁理屈の話なんで、細かい突っ込みは置いといてください。

次に、目が見えなくなると、三味線弾きになりますよね。
だから、細かいツッコミは無しって言ってるでしょ。
なんせ、江戸時代の話ですからね。
ほんで、三味線って、猫の皮でつくられてるんですよ。
だから、三味線弾きが増えると、猫が減るんです。
で、猫が減るとネズミが増えますよね。
ネズミは、桶をかじりますよね。
そなると、桶を買いに来る人がふえますよね。
だから、桶屋が儲かるんです。
わかりましたか?

それでは、最初のシーンから行きますよ。

風が吹いて、風で砂が舞うを3DCGで表現してみましょう。
これはできそうです。
砂が舞ってる状況を現在の状況として設定します。
そこに人間を配置します。

単純な例として、たとえば、「手に砂が当たるか」って文章が正しいかどうか理解します。
砂が舞ってる中の人のシミュレーションして、手のあたり判定機能から、手に砂があたるかどうかを判定するわけです。
これで、あたり判定がONとなると、手に砂が当たるとので、この文章は正しいと理解できます。
「目に砂が入る」って、目に砂が当たるのと同じ意味ですので、目のあたり判定をします。
すると、「目に砂が入る」という文も正しいとなります。
こうやって、文の意味が正しいか、正しくないか理解できるわけです。

続けますよ。
次は、「目に砂が入ると視力を失う」です。

これは原因結果として辞書に登録しておくことで実現できそうです。
たとえば、身体に衝撃が作用すると、その部位が損傷をするとかって登録しておくわけです。
ケガの大きさは、作用する力の大きさと、当たった場所によって決まるわけです。
たとえば、手に砂が当たったぐらいでは、損傷はしないけど、石が当たると、ケガをするとかです。
ほんで、一番弱いのが目です。
目は、ちょっとしたことで大きなケガをするって設定しておくわけです。
だから、砂が入っただけで、目が損傷するわけです。

次は、目が損傷するの意味です。
損傷するとは、それが持つ本来の機能を失うということです。
病気やケガの意味は、これで定義できそうです。

たとえば、手をケガすると、手が動きにくくなったり、力が入らなくなるわけです。
ケガしてないときを100%として、80%とか50%に落ちるわけです。
0%になると、完全に動かなくなるわけです。
手の関節とかに、%を設定すれば、実現できそうですよね。

それでは、目です。
見えるってどういうことでしょう?
これは、第70回「ついに完成! 世界初! 言葉の意味を理解するAI」で「見える」とか「隠れる」の意味をゲームエンジンで定義しました。
「見える」とは、登場する人の目にカメラを付けて、そのカメラに映るものが「見える」です。
そのカメラに机が映ってたら「机が見える」となるわけです。
これが見えるの定義です。

ここで理解したいのは、「目に砂が入って、視力を失う」という文です。
目に砂が入ると、目が損傷するは理解できました。
損傷の度合いはいろいろあって、100%になると、完全に機能しなくなるので、目の場合だと、視力を失うわけです。
これで、「目に砂が入って、視力を失う」の文が正しいと判断できました。

次は、「目が見えない人は、「三味線弾きになる」です。
これは、江戸時代の話なので、そういうものとしましょう。
そういう知識があるとします。
それでは、その知識はどうやって持たせたらいいでしょうか?

たとえば、オブジェクトのプロパティとして登録しておきます。
プロパティというのは、属性のことです。
リンゴのプロパティは、丸いとか赤いってことです。

ここで、三味線弾きって職業のプロパティに目が見えない人が多いとしておきましょう。
さて、やりたいのは、文の意味を理解することですよね。
ここでは、「目が見えなくなったから、三味線弾きになる」という文が正しいかどうかの判断です。
ここで、三味線弾きにプロパティを検索して、「目が見えない人が多い」と見つかりました。
だから、「目が見えなくなると、三味線弾きになる」という文が正しいと納得するわけです。
これは論理的に正しいかとかって話じゃないですよ。
人間が、なんとなく説得されるのを、AIで再現するのが目的です。
必要十分条件とか、そんな話は置いておいてください。

さて、この次は、三味線弾きが増えると、猫が少なくなるわけです。
ちょっと長くなってきたので、この続きは、次回に回すとして、今までのところをまとめておきましょう。

今回のテーマは、理屈とか屁理屈の理解です。

ああなって、こうなってって理屈が理解できないと、人と話が通じないです。
だから、理屈を理解するって、めちゃくちゃ重要なんです。
ただ、これが一筋縄じゃ行かないんです。

原因と結果の関係をデータベースに書けばいいってわけじゃないんです。
なぜかと言うと、原因結果とか、ものごとがどうなるかとか、どの世界に属するかが重要なんです。
だから、原因結果を無理やりデータベースに入れこもうとすると無理が出てくるんです。
つまり、原因結果は、データベースで管理するんじゃなくて、その出来事が起こる世界で管理しないといけないんです。

3次元世界で起こる出来事は、3次元世界で管理しないといけないというわけです。
そこで、場合によっては、ゲームエンジンを使って原因結果を管理する必要があるってことです。

これがロボマインド・プロジェクトのやり方です。
今までの自然言語処理とは、全く異なります。
よかったら、チャンネル登録、高評価ボタンお願いします。
風吹けば桶屋が儲かるの後半は、次回、お届けします。
それでは、次回も、お楽しみに!