ロボマインド・プロジェクト、第88弾!
こんにちは、ロボマインドの田方です。
(デモ映像数秒)
以前紹介した言葉の意味を理解するマインド・エンジンのデモ、覚えていますか?
これでスッキリ分かりましたって意見もあったんですけど、イマイチ、伝わってないなぁって思う感想もいただきました。
あのデモは、「隠れる」って言葉の意味理解を示したつもりだったんですけど、あのアニメーションが「隠れる」の意味と思ってる人が多いようでした。
それから、「あつまれ動物の森」みたいなゲームと何が違うのといったコメントもありましたね。
どうも、うまく伝わってないみたいだったので、これらの疑問に答えるために、今回は、別の視点から説明していきたいと思います。
デモの詳しい説明は、第70回「ついに完成! 世界初! 言葉の意味を理解するAI」を見てください。
それでは、始めます。
話をシンプルにするために、将棋ロボットで考えてみます。
ロボットアームとカメラを持ってて、人間と対戦する将棋ロボットです。
将棋の電脳戦のロボットですね。
このロボットの頭脳が、将棋AIです。
将棋AIは、プログラムの中に9×9マスの盤面をもっていて、
カメラで実際の盤面を撮影して、どのマスにどの駒が配置されてるかを認識するわけです。
そして、プログラムの盤面の中で、色々動かしながら、次の一手を考えて、
ロボットアームで駒を動かすわけです。
これ、意識の仮想世界仮説と、ほとんど同じなんです。
意識の仮想世界仮説は、目で見た世界を、頭の中の仮想世界に構築し、それを意識が認識するって意識の仮説です。
詳しくは、第21回「意識の仮想世界仮説」をご覧ください。
将棋ロボットは、現在の盤面をプログラムで仮想的に作るわけです。
そこに置かれるのは、駒オブジェクトです。
駒の動きを考えるのが、将棋プログラムの意識と言えます。
人間の場合、頭の中の仮想世界に、机とか椅子オブジェクトを配置しましたよね。
そのオブジェクトを指す名前が「机」だったり、「椅子」だったりするわけです。
文法でいうと、名詞です。
名詞は、仮想世界に配置されるオブジェクトってわけです。
こうやって、名詞が定義できます。
将棋プログラムの場合、王将オブジェクトや、飛車オブジェクトがあるわけです。
王将や飛車が名詞となるわけです。
さて、次は駒を動かします。
将棋は、駒を一手ずつ指します。
どの駒をどの位置に動かすかで一手が定義できます。
「一手を指す」が、動詞となります。
さて、この「一手を指す」という動詞、プログラムで実装されています。
動かす駒と、動く位置を指定すると、指定された駒が移動するってプログラムです。
プログラムでは、何らかの処理をするまとまりを、関数って言います。
関数に渡すデータをパラメータって言います。
この場合、「一手を指す」関数ていうのがあって、動かす駒と、動かす位置をパラメータとして渡すわけです。
将棋の棋譜だと、「2六歩」とか書きますけど、これと全く同じですね。
「2六歩」の場合、2六が位置で、その位置に「歩」を進めるってことです。
さて、次に、3次元世界を考えてみましょう。
3次元世界でも、物の移動を定義できます。
動かす物体と、その物体の移動先をパラメータとして渡して、その位置に移動する関数を作るわけです。
これが、「移動する」っていう動詞の意味です。
それでは、この、動詞は、どこに定義されているのでしょう?
それは、3次元世界です。
将棋の「一手を指す」関数は、将棋世界に定義されます。
つまり、動詞は、世界の持つ関数として定義されるんです。
ここ、重要なんで、もう一度いいますね。
動詞は関数です。
それから、動詞は、その動詞が属する世界が持ってます。
つまり、世界ごとに、持ってる動詞が違うってことです。
考えてみれば、当たり前ですよね。
「一手を指す」って動詞は、将棋世界でしか使わないですしね。
それでは、次は、3次元世界の言葉です。
「隠れる」の意味を考えていきます。
3次元世界は3DCGで表現できますよね。
それでは、マインド・エンジンを見てみましょう。
(デモ開始)
今、太郎君と次郎君と壁がありますよね。
左下の小さい画面は、太郎君が見てる光景です。
ここで、「次郎が太郎から隠れる」という文を実行してみます。
はい、次郎君は、壁の後ろに移動して、太郎君から見えなくなりましたよね。
これが「隠れる」という動詞の意味です。
「隠れる」とは、「隠れてない状態」から「隠れた状態」への変化です。
次郎君が、太郎君に見えてる状態が隠れてない状態です。
次郎君が、太郎君から見えてない状態が隠れてる状態です。
太郎君から見えるものは、左下の画面です。
だから、次郎君が、この画面から見えない位置に移動すれば「隠れる」となるわけです。
「見える」も「移動する」も動詞ですよね。
動詞は、どこに定義されましたか?
3次元世界ですよね。
動詞は、プログラムの何に該当しましたか?
関数ですよね。
関数は、パラメータを渡されたら、処理を実行して、必要に応じて結果を返します。
「見える」関数は、パラメータとして「人」を渡して、その人が見てる光景を返すわけです。
具体的には、その人が見てる光景に含まれるオブジェクトを返すわけです。
ここで、マインド・エンジンの仕組みを説明します。(画面表示)
マインド・エンジンは、右の白い画面のマインド・エンジン本体と、中央の3次元世界から構成されてて、マインド・エンジン本体は、3次元世界とやり取りしながら言葉の意味を理解するんです。
左下の画面に、次郎と地面と壁が見えますよね。
その上にいっぱい文字が出てますけど、これが、マインド・エンジン本体と3次元世界がやり取りをしてる画面なんです。
よく見ると、「”Command”,”Find” “太郎”」って白い文字が見えますよね。
これは、マインド・エンジン本体から3次元世界に、「見える」関数を実行しろって命令してるわけです。
関数は3次元世界が持ってるって言いましたよね。
つまり、マインド・エンジン本体が持ってるんじゃないんですよ。
だから、マインド・エンジン本体から3次元世界のに対して、「見える」関数を実行しろって命令してるわけです。
その時渡すパラメータが「太郎」なので、「太郎から見えるものを教えろ」って命令になるんです。
その下の青い文字見てください。
[“Result”,”Success”,”Objects”[“次郎”,”地面”,”壁”]]
ってなってますよね。
これは、見える関数を実行した結果、成功して、見えるオブジェクトとして、次郎、地面、壁を返してきたわけです。
これを受け取ったマインド・エンジン本体は、「今、太郎は、次郎と地面と壁が見えてるんだな」と分かるわけです。
これがマインド・エンジンの仕組みです。
続けますよ。
「移動」関数も、「人」と「移動先」をパラメータとして渡して実行すれば、その人が、移動先に移動するわけです。
移動関数の場合、結果を返すんじゃなくて、3次元世界で実際に動くわけです。
次は、「隠れる」です。
「隠れる」関数は、「隠れる人」と「見つける人」をパラメータとして渡すわけです。
関数の中身は、まず、「見つける人」の「見える」関数を実行します。
すると、その人から見えるオブジェクトが返ってきます。
その中に「隠れる人」があれば、「隠れる人」が、見えなくなる位置を探して、そこに移動させるわけです。
その位置が、壁の後ろとなれば、その位置に「隠れる人」を移動させます。
実際には、移動関数に、「隠れる人」と「移動先」を渡して実行するわけです。
これが、「隠れる」関数の中身の処理です。
つまり、「隠れる」って言葉の意味は、3次元世界に定義される「隠れる」関数そのものなんです。
だから、「次郎が太郎から隠れる」って文の意味を解釈するっていうのは、「隠れる」関数に、パラメータとして次郎と太郎を渡して実行することなんです。
人間の頭の中にも、3次元の仮想世界が創られているわけです。
人の頭の仮想世界にも、オブジェクトや、関数があるわけです。
頭で思い浮かべたものを、言葉に表現するとき、オブジェクトが名詞となって、関数が動詞となるわけです。
文の意味を理解するとは、この変換ができることです。
それと同じことが、コンピュータでできれば、コンピュータが意味を理解したとなるわけです。
マインド・エンジンがやってるのが、まさに、これなんです。
これで分かったでしょうか?
「隠れる」の意味は、アニメーションじゃないんです。
意味は、アニメーションじゃなくて、次郎を動かしてる「隠れる」関数なんです。
アニメーションを動かしてる関数が意味なんです。
それから、ゲームの「あつまれどうぶつの森」とどう違うのかって質問です。
たしかに、3次元世界で、キャラクターが会話してるゲームと、一見、同じように見えますよね。
「あつ森」のキャラクターも、言葉を話しますけど、意味を理解してるわけじゃないんですよ。
このイベントが発生したら、このセリフを言うってシナリオが決められてて、それをしゃべってるだけなんですよ。
ユーザーが、「○○から隠れろ」と言ったら、〇〇から見えない位置に移動するとか、そんなことができれば、「隠れる」って言葉の意味を理解してるって言えるんです。
でも、キャラクターが喋る文と、あつ森の3次元世界とは、関係してないんですよ。
もし、あつ森の世界のオブジェクトと関数に対応して、言葉を定義していけば、決められたセリフじゃなくて、キャラクターと自由に会話ができるんですけどねぇ。
そこまではできてないわけです。
それをやろうとしてるのが、ロボマインド・プロジェクトです。
興味があれば、チャンネル登録、お願いしますね。
次回は、もう少し複雑な文について考えていこうと思います。
それでは次回もお楽しみに!