2011/12/17

AIについて考えると自動整形や形式手法が気になってくるでござるの巻

こんにちは、しばらくブログを放置していた@tomoodaです。 今日のお題はAIについてです。

コンピュータ関係でAIと言うと、普通は人工知能のことですね。Artificial Intelligenceの略。で、今回オレオレするのは、Augmenting Intelligenceのほうです。日本語にすると、知性増強ですかね。ようするに、人工知能のAIは人間の知性をコンピュータで再現するものだけれども、知性増強のほうのAIは人間の知性をどうやって増強していくかという話です。

まあ人工知能にしても、知性増強にしても、はっきりいって傲慢な話ですよ。機械のくせに人間様の知性をとやかく言うわけですから。でもね、近視や乱視の人がメガネやコンタクトレンズでモノをよく見えるようになるでしょ?あれと同じようなものです。元々人間ができることを、ちょっと弱点を補う道具を使うことで、もっと力を発揮できるようになろうよ、ということです。

じゃあ人間の知性の弱点って何でしょうね。まず1つ目は、短期記憶の貧弱さを取り上げてみましょう。

短期記憶というのはどういうものかというと、例えばこの文章を読んでいる時、あなたは今読んでいる→この単語←のいくつか前の単語を憶えているから、文章の係り受けや意味的な解釈ができるわけです。すごいですよね。人間の言語能力のかなり根幹に近いような機能です。でも、この短期記憶ってヤツ、実は結構ヘッポコなんですよ。記憶容量が狭い。色々な説がありますが、まあ5個とか9個とか、その程度の話です。この、テラバイトからペタバイトに進もうという時代に。

短期記憶が小さいとどんな不都合があるかというと、例えばLISPコードのような頻繁にネストが発生しているような構文を追いかけるのが難しいのです。LISPerはコツをつかんでまるで息をするようにカッコだらけのS式を読みこなしますが、訓練を積まないと読みこなすのは難しいです。

人間は文章を聞いたり読んだりして理解するとき、木構造ではなく線形に処理をしているのだろうと思います。じっさい、この文の構文構造を単語を葉とする二分木で表現してくださいと言ったら、10人に頼めば10通りの答えが返ってくるだろうと思います。つまり、木構造を持つ構文を正確に処理するのは難しいことです。

私は今はプログラミングを職業として生活しています。BNF等で形式的にキッチリ定義された木構造の文法でプログラミングします。使い慣れた言語ならば、単純な構文エラーは滅多に出しません。と思っています。だといいなあ。どうして「だといいなあ」なのかというと、プログラミング環境に助けられた上での話だからです。もし、紙とボールペンを渡されて「さあ10行ぐらいのメソッドを書け」と言われたら、Fizz Buzzぐらいなら何とかなるかもしれませんが、ちょっと頭を使うようなメソッドはまず間違えると思います。それも、アルゴリズムの構築ではなく、構文の部分で間違えるでしょう。

これがAugmenting Intelligence、知性増強の例です。プログラミング言語の形式的な定義に従って木構造を記述することに関する弱点を、コンピュータが構文を使った自動整形や色分け等で補っているわけです。

人間の弱点の2つ目として、表現の記憶が苦手である点も挙げておきます。これは、文章の意味を理解して憶えておくことは容易ですが、文面をそのまま字面通り記憶するのは難しいということです。電話で伝言を頼まれた時、その文面通りに伝えることは難しいですよね。

この欠点はシステム開発ではとても重大な問題をはらんでいます。つまり、表現を厳密に扱うことが出来ず、一旦自分なりに解釈したものを通して、他の関係者とやりとりをしているわけです。ようするに伝言ゲームなのですよ。仕様を伝言ゲームで決めたら、恐ろしいでしょう?でも、現状では多くの開発プロジェクトが実質的には伝言ゲームで開発しています。

それを何とかしようというのが、いわゆる形式的仕様記述ってヤツです。仕様を数学的な表現で書こうという話なんですが、多くの人はこれを「正しさを証明するってこと?」と認識しています。でも、形式的仕様記述のメリットは、証明だけではありません。伝言ゲームをストップする力があるのです。

形式的仕様記述言語は、構文も意味も形式的にキッチリ定義されています。だから、伝言ゲームによる「解釈の揺れ」が出にくくなっています。日本語のコトバを字面通りに正しくコピーするのは難しいですが、数式を字面通りに正しくコピーするのはそれほど難しくありません。なぜかというと、日本語に比べ、数式は表現式と意味が非常に近い関係にあるからじゃないかな、と思います。

もちろん、何でもかんでもシステム開発は形式的仕様記述しなきゃダメ、ってことじゃないです。何をつくるのか、つくりながら模索していくような開発の場合には、まだ決めるべきでない部分は決めないでおく、曖昧な部分を残す、ということも必要です。しかし、キッチリ書くべき部分を曖昧なままにしたがための不幸な結末なんてものもよく聞く話です。形式的仕様記述はそんな時に使うAI、知性増強の道具だと思っているのです。

というわけで、なんだかいつもにも増してダラダラと長い文章になってしまいました。このブログ自体、ツイッターの文の短さの反動から始めたものだし、すんませんが勘弁してやってください。ツ

0 件のコメント:

コメントを投稿