第95回 ていねい解説 〜会話を理解するってこういうこと


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

「昨日、夕方から雨が降ってきたんですけど、傘を持ってなくてねぇ。
だから、びしょぬれになって家に帰ったんですよ。」

こんな風に言われたら、何て、答えます。
「そりゃぁ、最悪でしたよねぇ」とか答えますよねぇ。

前回の第94回「なぜ、動物には時間が存在しないの?」で、将棋AIの話をしました。
そこで、将棋の棋譜が、人間でいうと出来事を表現した文に当たるって言いました。
将棋世界は簡単なので、棋譜で全てを表現できます。
でも、僕らが生きてる世界はそうはいかないですよね。

今回は、ロボマインド・プロジェクトで作ってるマインド・エンジンが、日常会話の意味を、どうやって理解して、返答するかまでを考えていきます。
まず、マインド・エンジンの全体の構成です。

マインド・エンジンは、仮想世界とそれを認識する意識があります。
意識は、入力された文を解析して仮想世界を創ります。
そして、仮想世界で展開される出来事を解釈して、文の内容を理解して、返答します。
つまり、マインドエンジンの意味理解は、仮想世界を創る段階と、仮想世界で展開される出来事を解釈する段階の2段階があります。
最初の段階が文レベルの意味理解、次の段階が、文脈レベルの意味理解とも言えます。
そして、最後に、相手が言いたいことを理解します。
これが内容理解です。
そして、内容理解を基に、返答するわけです。

それでは、最初の文から始めます。
「昨日、夕方から雨が降ってきた。」

まず最初に決めないといけないのが、その文が、どの世界に属するかってことです。
「雨が降る」ってとこから、これは、3次元世界の出来事だってわかりますよね。

ここで勘違いしてほしくないのは、何でも3次元世界ってわけじゃありません。
じゃぁ、3次元世界じゃない文って、どんな文があるでしょう?
たとえば、「今年はうるう年です」とか、「売上が30%上がった」とかって文です。
こんなのは、3DCGで表現できないですしね。

3次元世界ってわかると、3次元の仮想世界を創って、そこに出来事を再現していきます。
意識は、それを認識して意味を理解するわけです。

最初に、「昨日、夕方」って出てきますよね。
これ、時間ですよね。

出来事は、一種のオブジェクトで、属性を示すプロパティを持ってます。
出来事は、「いつ」を表すプロパティを持っていて、そこに、「昨日の夕方」って時を設定します。

次は、「雨が降ってきた」です。
3次元世界には、雨が降るといった関数が用意されていて、その関数を実行すると、空から雨が降ってくる様子が再現されます。
つまり、意識は「雨が降ってきた」といった文を読むと、3次元世界の「雨が降る」関数を実行するわけです。

このように、世界が持ってる関数を実行したり、プロパティを設定することが、文レベルの意味理解と言えます。
逆に、これができない場合が、文レベルで意味が分からないとなるわけです。

たとえば、「今日の天気は売り上げです」といっても意味が分かりませんよね。
3次元世界には、天気って言葉はありますけど、天気のプロパティに「売上」は設定できないからです。
「売上」って言葉は、ビジネス世界とかにある用語で、別の世界の話なんです。

つぎは、「傘を持ってない」です。
まず、「傘を持つ」から考えていきます。
「傘を持つ」がおかしくないかどうか判断します。

人が傘を持つのは、おかしくないですよね。
じゃあ、逆に、おかしいのはどういったことでしょう。
たとえば、「電柱を持つ」とか「道路を持つ」ってなると、意味が分からないですよね。
これがおかしいと判断できるには、どうすればいいでしょう?

たとえば、オブジェクトの大きさを設定しておいて、人が持てる大きさ、重さならOKとするといった判断をします。
これなら、「手に電柱を持つ」って文を読んだとき、
「電柱を持つって、意味がわかりません」とかって返答をすることができます。
これが文レベルの意味理解です。

次は、「傘を持ってない」です。
「持っていない」ことをどうやって表現したらいいでしょう?

単に、手に何も持たないだけだと、意味がないです。
そこから読み取れることは、傘も持ってない、鉛筆も持ってないって無限に出てきます。

そこで、たとえば、持ってない物リストっていうのを作っておいて、そこに「傘」を入れてもいいです。
さらに、そこに注目マークを付けて、いま、この場面で注目してるのは、「傘をもってない」ことですよって示します。
3DCGで見える部分は、何も持ってない人ですけど、仮想世界内のデータを認識できる意識にとっては、この場面で言いたいのは、「傘を持っていない」ということだって理解できるわけです。

さて次は、「だから、びしょぬれになって家に帰った」です。
まずは、「びしょぬれになる」が文レベルで問題ないか判断してみます。

最初に、傘を持っている場合と持っていない場合の違いをシミュレーションしてみます。
3次元世界で、雨の中を傘をさした場合をシミュレーションします。
すると、雨は傘に当たって、傘のふちから落ちます。
これは、3DCGの物理演算でできます。
ここから、傘をさしてる人は濡れないってことがわかります。

次に、雨の中、傘をささずに人が立っている場合をシミュレーションしてみます。
すると、空から降ってきた雨がその人に直接当たって、濡れてしまいます。
このシミュレーションから、傘がないとびしょぬれになるという文は問題ないと判断できます。

次は、接続詞をチェックします。
接続詞は、文と文をつなぐ役割があります。
前の文の意味と、後の文の意味の関係を判断するので、文脈レベルの意味理解と言えます。

まず、前半の文は、雨が降って、傘を持ってないです。
この文から予測されることは、雨に濡れるということです。

後半の文は、「びしょぬれになった」です。
前半の文の予想どおりの結果となったので、接続詞の「だから」は問題ありません。
文脈レベルでも問題ないと判断できました。

もし、「傘を持っていた。だから、びしょぬれになった」っていう文だったら、接続詞の「だから」がおかしいですよね。
この文は、おかしいって判断できるわけです。

こうして、文レベル、文脈レベルで問題ないと判断できたわけです。
文レベル、文脈レベルの意味が理解できるとは、こういう事です。

さて、最後は、相手が言いたい内容を理解します。

日常会話の目的は、何らかの感情を伝えることです。
正確には、感情以外に、善悪のような倫理観や、後悔や感謝といった心理も含めます。
このことを、僕は心理パターンと呼んでいます。
第13回「好かれるAI、嫌われるAI」で説明しましたけど、この心理パターンこそが、その人の言いたいことなんです。

一番簡単な心理パターンは、嬉しいとか、悲しいです。
これは、その人に、良いことが起こったか、悪いことが起こったかで判断できます。
それでは、今回の文はどうでしょう?

ここで、人は、水で濡れることは不快で、乾いてる方が快適だと知識として持っておきます。
すると、「雨でびしょぬれになる」は不快だと判断できます。
これは悪い出来事です。

そこで、返答としては「そりゃ、それは最悪でしたよねぇ」と答えるわけです。
相手は、自分に起こった悪い出来事を理解してもらえたと感じるわけです。
これで、会話が成立するわけです。

これを、天気が話題だからといって、
「冬には雪が降るよね」
とか返答したら、全然、言いたいことが伝わってないって、相手は感じるわけです。
これじゃ、会話にならないですよね。

さて、どうでしょう?
これが、マインド・エンジンが行う意味理解の全体像です。
皆さんが、普段、自分の頭の中でしてることと照らし合わせてみても、違和感は感じないと思います。
もし、そう思うなら、これこそが、正しい自然言語の意味理解だと言えます。

マインド・エンジンの特徴をまとめておきます。
まずは、言葉で表現されたものを3次元の仮想世界に変換したことです。
3次元世界でシミュレーションするから、傘をさすと雨に濡れないってことが正しいって判断できるわけです。

もし、これを3次元のシミュレーションを使わずに、言葉だけで判断するとしたら、どうなると思います?
正しい知識を全てデータベースに入れる必要があるんです。
つまり、雨が降ってきたとき、濡れない方法を全部書き出すわけです。
傘をさすと濡れない。
家に入ると濡れない。
木の下に入ると濡れない。

そして、そのデータベースを検索して、傘をさしたから濡れないって判断するわけです。
こんなこと、どう考えてもおかしいですよね。
でも、これをやってきたのが、今までの自然言語処理なんです。
常識を全て教えようとしてきたわけです。

マインド・エンジンのもう一つの特徴は、相手の言いたいことを心理パターンに落とし込んだことです。
たったそれだけのことで、自然な会話ができるようになるんです。
不可能と言われていた自然言語の意味理解が可能となったのです。

これが、ロボマインド・プロジェクトです。
よかったら、ロボマインド・プロジェクトを応援(チャンネル登録)してくれると嬉しいです。

それでは、次回も、お楽しみに!