オープニング:子豚が首降ってる場面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は続けます。
マインド・エンジンをバージョンアップすれば、随時、公開していきます。
ぜひ、楽しみにしていてください。
それでは、次回も、お楽しみに!