(23:57) 今日はツイッター経由で話しかけてくれた人とジョナサンで食事をして、NLP の話などをした。
抱えているタスクの話を聞いたが、ぼくがあまりぴったりはまる分野ではなかったのが残念。
あらためて、ぼくはしたいことしかできない人間なんだなぁというのを実感した。
ぼくは NLP の中でも N-gram 言語モデルや形態素解析、読み推定やカナ漢字変換が興味の中心で、広げてもせいぜい構文解析ぐらいだ。
意味のあたりになると、もう今の枠組みではまともに機械に扱えないことが明らかなので、不確かなところを不確かなままに次に進むということができないぼくにとってはお手上げだ。
以前、イタリア語会話の本で「ママはパパが誕生日を忘れたので、怒っている。」というのを読んで、言葉の意味というものを考えたことがある。
これを英語に訳すと、「誕生日」は "her birthday" になる。
では、これはなぜ "her" で、"his" ではないのか。
これについて考えたことをツイッターでつぶやいたことがあるが、再度推敲してまとめると次のようになる。
---------------------------------------------------------------
まず、背景知識として次のようなことがある。
1. 誕生日というのは、人間にとっての良いイベントである。
2. 誕生日を忘れるというのは、その誕生日がどの一日であるかを忘れるということである。
3. あるイベントがどの一日であるかを忘れると、そのイベントについてに行うべきことを正しい日に行えなくなる。
4. パパとママというのは、この文脈では話者の父親と母親を指す。
5. ある人間の父親と母親は夫婦の関係である。
6. 夫婦は親しい間柄である。
7. 親しい間柄の二人は、互いに良いイベントを祝うことをお互いに期待する。
8. 人は、自分が相手に期待することを相手がしないと怒る。
そして、これらから次のようなことが導かれる。
A. 4, 5, 6 より、「パパ」と「ママ」は親しい関係である。
B. A と 1 と 7 より、「ママ」は「パパ」が誕生日を祝うことを期待する。
ここで、「パパが誕生日を忘れた」を「パパが(ママの)誕生日を忘れた」という仮説 X を導入する。
すると、次のことが導かれる。
C. 仮説 X と 2 より、パパはママの誕生日がどの一日か忘れたということになる。
D. C と 3 より、パパはママの誕生日について行うべきことを正しい日に行えない(行えなかった)ことになる。
E. B と D と 8 より、その仮説のもとでは「ママ」は怒ることになる。
というわけで、「パパが(ママの)誕生日を忘れた」という仮説が強力に支持される。
また、このほかに「人間は自分の誕生日を忘れることはあまりない」という背景知識もあり、それによって「パパが(パパの)誕生日を忘れた」という仮説はもっともらしくないことになる。
これらより、「パパが誕生日を忘れた」は「パパが(ママの)誕生日を忘れた」という意味であることがほぼ確実であるといえる。
---------------------------------------------------------------
人間は、これらの推論を苦もなく行っている。
もし NLP でこの辺りまで含めて意味というものを扱えるなら、ぼくも喜んでやっていただろう。
しかし、人間が実際にやっているはずのこのプロセスを機械にさせるのは、とんでもなく難しい。
新山さんの昔のブログで次の文章を読んで感銘を受けたことがある。
---------------------------------------------------------------
いきなり学問的な話をするけれど、 つまり自然言語処理で難しい問題というのは例えば以下のような 問題なのだ。2匹のサルの会話問題:
(もとの会話)
- サル1 「あそこの木の上にバナナがあるんだよねー」
- サル2 「うん、そこに棒がおちてるよ」
ここには実は多くのものが省略されている。
(省略を復元した会話)
- サル1 「あそこの木の上にバナナがあるんだよねー。
[つまりおれは腹が減っていて、あのバナナが気になるんだよ。 きみ、おれの言うことを聞いているよね? おれがなぜこんなことをわざわざ口に出して言うかわかるよね? つまりおれはあのバナナが欲しいんだけど、 一人じゃ取れないんだ。だからきみに協力してほしいんだよ。 どう?] 」 - サル2 「うん、 [きみはあのバナナを取りたいんだな。そしてぼくに 何らかの協力をしてほしいと。しかしあいにく、ぼくは 直接協力することはできない。あれは高い位置にあるから、 ぼくでも手がとどかない。ただ幸いなことに、]
そこに棒がおちてるよ。
[きみはそのことに気づかなかったかもしれない。 あるいは気づいても『棒を使ってバナナを落とす』という アイデアを思いつかなかったかもしれないから、 ここで注意を促しておく。 その棒を使ってバナナをつっつけば、バナナのふさが落ちて、 きみの望みのものが手に入るよ。わかるよね?] 」
計算機がこの発話を理解するためには、計算機は
- 「棒を使うと物体をつっつける」
- 「バナナは物体で、すべての物体は 重力によって下に落ちる」
- 「バナナの枝は鋼鉄製ではないので、 つっついていればそのうち切れる」
などといった知識を持っていなければならない。 つまり自然言語処理は世界知識と切っても切りはなせない関係にある。 これがないと、たとえば以下のようなアホな状況になってしまう:
(もしサル2 が馬鹿なロボットだったら)
- サル1 「あそこの木の上にバナナがあるんだよねー」
- ロボット「ワカリマシタ。ソノ情報ヲ知識ベースニ 登録シマス。」
こんなんじゃ駄目なわけ。 ここが自然言語処理の面白いところでもあるし、 同時にむちゃくちゃ難しいところでもある。ってオレは一体誰に 向かって喋っているのでショー?
---------------------------------------------------------------
この「世界知識」を計算機が扱えるようになる日は来るのだろうか。
ぼくは悲観的だ。