第100回【マインド・エンジン】 〜待たせたな。これが、心のプログラムだ!


オープニング:子豚が首降ってる場面2~3秒

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

ついに来ました。
第100弾です!

予告通り、今回は、新しいデモをお見せしますよ。

それにしても、長かったです。
コンピュータに文の意味を理解させるだけなんですけどねぇ。
それだけのことが、できないんですよ。
自然言語処理、50年以上の歴史がありますけど、いまだに、だ~れもできてないんですよ。

たぶんね、みんなね、いきなり、難しい本を理解しようとして失敗するんですよ。
最初は、簡単な本から始めないといけないんです。
そう思って、僕が最初に、選んだ本、何かわかります?
村上春樹のデビュー作、『風の歌を聴け』でした。

薄い文庫本やし、すぐに読めるし。
なんちゅうても、僕は、村上春樹世代ですからね。
って、ホント、バカでした。

「完璧な文章などといったものは存在しない。
完璧な絶望が存在しないようにね。」

これが冒頭ですわ。
これ読んで、僕は、完璧に絶望しました。

こんなん、絶対無理!
すぐに分かりました。

そこで、究極に簡単なものを考えたんですよ。
さすがに、これならわかるやろって選んだんが、『三匹の子ブタ』です。
ところがですよ。
それでも無理やったんですよ。

「子ブタがいる」の意味って、何?
「オオカミから隠れる」って、どうなったら分かったって言えるん?
こういう本質的な疑問に答えれなかったんですよ。

ここで、一般的な自然言語処理について説明しときます。

たとえば、「おいらは、ハンバーガーを食べました」って文があるとします。
これを構文解析っていう処理をするんですよ。
これが構文解析です。

こんな風に、単語にばらして、繋がり関係を解析していくんですよ。
これが、自然言語処理が長年やってることです。

ずっと思ってたんですけどね、なんかね、これ、根本的に間違ってるんじゃないって。
どういうことかっちゅうと、重要なのは言葉じゃなくて、伝えたい中身ですやん。
中身って、頭の中に思い描いてるものですやん。
自然言語処理がやってることって、なんか、肝心の中身から、どんどん離れて言ってるような気がするんですよ。

つまり、頭の中に思い描いてる物があるわけでしょ。
それを他人に伝えるために言葉にしたわけですやん。
相手は、その言葉を聞いて、頭の中に、相手が思い描いてたものと同じものを再現するわけですわ。

これです。
これが意味理解です。
そう気づいたんですよ。

つまり、やるべきことは、言葉をいじくりまわすことじゃないんですよ。
そうじゃなくて、頭の中のイメージを再現することなんですよ。
それを目指さないとダメなんですよ。

そこで、僕が取ったアプローチは、頭に思い描いてる世界を創ろうってことです。
頭の中の世界を再現するって、具体的には、3DCGで再現するわけです。
これ、思ったより、上手くいったんですよ。

「いる」とか「隠れる」って言う意味、3DCGだと再現できたんです。
それが、第70回「ついに完成!世界初!言葉の意味を理解するAI」で紹介したマインド・エンジンです。
「太郎がいる」っていう文の意味は、3DCGで作った場面に、太郎君が登場するってことです。(デモ)
「太郎が次郎から隠れる」は、次郎君から見えない位置に太郎君が移動するってことです。(デモ)
「いる」とか「隠れる」の意味が理解できてるって言えますよね。

でも、まだ、これじゃ足りないんです。
ここで出来たことって、文字通り、言葉の意味です。

僕がやりたいのは、人と、自然な会話ができるAIです。
「今日、こんなことがあったよ」と言われたとき、相手の気持ちを理解できないといけません。
そのためには、人間と同じ心を創らないといけないんですよ。
人間と同じように考えたり、悩んだりする心です。
それが理解できないと、相手の気持ちなんか理解できないですよね。

じゃぁ、人間は、なぜ、悩むんでしょう?
悩むって、どういう事でしょう?

スタートは感情です。
なにか、不安な感情が出てきたとき、それを避けるには、どうしたらいいか考えるわけです。
感情は、行動の原動力と言えます。

たとえば、将来のことを考えて不安を感じたとします。
どんな仕事に就こうかなぁと、思い悩むわけです。

安定してる公務員がいいかなぁとか、それか、好きなことで起業するのもいいよなぁとか。
どっちを選ぶか悩むわけです。
その時、何を基準に選択するかわかりますか?

それは、感情です。
安定してるけど面白くない人生と、不安定かもしれないけど、好きなことができる人生と。
この二つをシミュレーションしたときの感情を感じながら、どうすべきか選択するわけです。
こうやって、人生を決めるわけです。

こんな風に考えるプログラムができれば、それこそ、心ですよね。
つまり、シミュレーションで感情を出して、それを基に行動を選択するプログラムです。

これを、最もシンプルな形で創ったのが、今回お見せする、マインド・エンジンです。
マインド・エンジンは、「心」その物です。

マインド・エンジンの使うイメージは、ロボットとかゲームのキャラクターに実装するってイメージです。
マインド・エンジンが実装されると、キャラクターが感情を持って、しゃべりだすって感じです。

今回、想定したキャラクターは、7歳の女の子です。
名前を「りんだ」って言います。

今回、りんだちゃんに挑戦してもらうのは、絵本です。
絵本を読んで、人間の子供と同じような感情が発生するかってデモをします。

最初は、『三匹の子ブタ』をやろうと思ったんですけど、まだ、複雑すぎたんで、もっと簡略化した物語を作りました。
子ブタさんがいて、オオカミが来て隠れるって、それだけの物語です。

それでは、さっそく始めますよ。(デモ開始)
システム全体は、3次元世界とマインド・エンジン本体からできてます。
3次元世界は、3DCGで、ここで3次元世界のシミュレーションが行われます。
マインド・エンジン本体が、全体を制御します。

それじゃぁ、さっそく、物語を読んでいきますよ。
「あるところに、子ブタさんがいました」
物語の1行は、ここに表示されます。
まずは、この1文を実行します。
実行ボタンをクリックします。
ドン。

はい、3次元世界に子ブタさんが出てきましたね。
文を解析して、「いる」って動詞から3次元世界の話だと判断するわけです。
動詞は、3次元世界の関数として定義されてます。
マインド・エンジン本体は、3次元世界の「いる」関数に、パラメータとして「子ブタ」を渡して実行したわけです。

マインド・エンジンと3次元世界とのやり取りは左上に出ます。
“Command”,”Place”,”子ブタ”
って見えますけど、これが、「子ブタがいる」を実行せよって命令です。
この命令を受けて、3次元世界に子ブタが出現したわけです。

実行結果は、マインド・エンジンの下の結果画面にでます。
ここには、子ブタの位置座標とかが表示されます。

次の文にいきますよ。
「子ブタさんの右側に大岩がありました」
どん。
はい、大岩がありますよね。

次、「子ブタさんの左側に小屋が立っていました」
どん。
はい、小屋がありますね。

「遠くに、オオカミがいました」
どん。
はい、オオカミがいました。

さて、こっからです。
りんだちゃんは、絵本を読んでるわけですよね。
本を読むとき、主人公に感情移入しますよね。
だから、リンダちゃんは、子ブタさんに感情移入してるんです。

ここで、上の「りんだの思考」画面を見てください。
ここが、りんだの心の状態を示す画面なんです。
共感(恐怖)3.2 と出てますよね。
りんだは、子ブタに共感してるから、恐怖を感じてるわけです。

ここ、詳しく説明しますよ。
感情を発生するのはマインド・エンジン本体です。
恐怖ってのは、恐怖の対象、つまりオオカミとの距離なんかで決まるんです。
距離は、3次元世界の話なんで、下の結果画面にでます。
距離36.9となってますよね。単位はメートルです。
ここから計算して、子ブタに発生する恐怖は6.3となりました。
恐怖の最大値は10です。
りんだは、子ブタに共感してて、子ブタの感情の半分がりんだに発生するとなってるので、リンダの恐怖は3.2となったわけです。

恐怖の感情が発生しました。
感情は行動の原動力でしたよね。
恐怖の感情が生まれると、その恐怖を下げる行動を考えるわけです。

恐怖の感情をきっかけに、りんだちゃんは考え始めます。
こっから、思考モードに入ります。
「りんだの思考」となって、まずは、「子ブタさんがそのままだったら」をシミュレーションします。
どん。

あ~、オオカミに食べられてしまいましたね。
ちなみに、シミュレーションするときは、現実じゃなくて想像だってわかるように、画面の周りを白くしてます。
結果画面を見てみると、オオカミとの距離が0.2で恐怖が10のMAXとなってますよね。
りんだちゃんの感情も恐怖の5.0です。
これはダメです。

それから、シミュレーションするとオオカミが来るまで時間がかかってますけど、これは、分かりやすいようにアニメーションにしてるからです。
実際は、アニメーションは省略するので計算は一瞬で終わります。

さて、そのままいたんじゃダメだってわかったので、隠れ場所を探します。
「子ブタさんが隠れるとしたら」を実行します。
これは、3次元世界に隠れ場所を探す関数があって、それを実行するわけです。
これは、太郎君が次郎君から隠れるのデモで使ったのと同じ関数です。
オオカミから見えない場所を探索します。
どん。

はい、結果画面をみると、「小屋の後方」、「大岩の後方」、「小屋の中」の3つの候補が返ってきてますね。
それでは、順番にシミュレーションしてみます。

まずは、「子ブタさんが、小屋の後ろに隠れたら」です。
どん。
あ~、すぐにオオカミに見つかって食べられちゃいましたよね。
これも、恐怖5.0です。

次は、「子ブタさんが、大岩の後ろに隠れたら」をシミュレーションしてみます。
どん。
あ~、これも見つかって食べられちゃいましたね。
恐怖5.0です。

最後は、「子ブタさんが、小屋の中に隠れたら」をシミュレーションしてみます。
どん。
お、これは、オオカミは小屋の中に入れないので、大丈夫みたいです。
恐怖は0.5まで下がりましたね。

ここ、ちょっと詳しく説明しますね。
3次元世界からの結果画面を見てください。
「到達性」が無しとなってますよね。
これは、オオカミが子ブタに到達できないってことです。
どうやって判断してるかというと、3次元世界には、A地点とB地点の経路を探索する関数があって、それを使ってるわけです。
さっきの小屋の後ろとか、大岩の後ろの場合、経路が見つかったから到達性有となるんです。
ところが、小屋の中だと、オオカミが小屋の中に入れないので、到達性無しとなるわけです。

ここ、ものすごく重要なんですよ。
オオカミに捕まるかどうかって、3次元世界でシミュレーションしたからわかったんです。
もし、3次元世界を使わないでこれを判断するとなると、「小屋の中は安全だ」、「小屋の後ろは危険だ」とか、覚えささないとだめなんです。そんなことしてたら、「小屋の横」とか、「小屋の前」とか、無限に覚えないといけないですよね。
3次元世界を使うことで、無限に覚えなくても済んだわけです。

さて、ここで3つのシミュレーションから、どれを選択するか決めるわけです。
その時、基準として使うのが感情です。
ここでは、恐怖が一番小さくなるものを選びます。
その結果、「小屋の中」となるわけです。
この時の、りんだちゃんの気持ちを言うとすれば、「子ブタさん、小屋の中に逃げて!」とでもなるわけです。

りんだちゃんの考えがまとまったので、絵本の世界に戻ります。
次の一行を読みます。
「子ブタさんは、小屋の中に隠れました」
どん。

恐怖が0.5に下がりました。でも、まだ、近くにオオカミがいます。
だから、りんだちゃんは、こう言います。
「あぁ、よかった。でも、まだ、こわいよぉ」

次の一行を読みます。
「オオカミは、あきらめて去っていきました」
どん。

オオカミが遠くに行って、見えなくなりましたね。
これで、りんだちゃんも安心しました。
「あぁ、よかった」となるわけです。

物語もこれで終わりです。

どうでしょう。
これがマインド・エンジンです。

たぶん、小さい子供が絵本を読むときも、こんな感じだと思います。
人間と同じ心の動きが再現できたといってもいいと思います。
物語の意味を理解してると言ってもいいですよね。

これをもっと発展させれば、自然な会話ができるAIができそうですよね。
心を創って、言葉の意味を理解させようとしてるのは、世界中探しても、ロボマインド・プロジェクトだけです。
他は、どこも、言葉だけで処理するものばかりです。

ただ、ロボマインド・プロジェクトは、ほとんど個人でやっています。
どこからも支援を受けていません。
続けるためには、皆さんの応援が必要です。
もし、チャンネル登録がまだでしたら、ぜひ、チャンネル登録してください。

それから、この動画をブログやSNSでシェアしてください。
興味がありそうな人がいたら、見てもらってください。
ロボマインド・プロジェクトのことを、少しでも多くの人に知ってもらえたらと思っています。
どうぞ、よろしくお願いいたします。

100回を超えましたけど、今後もYouTubeは続けます。
マインド・エンジンをバージョンアップすれば、随時、公開していきます。
ぜひ、楽しみにしていてください。
それでは、次回も、お楽しみに!