人工知能
元・第2製造工場システム課 大井 暢浩

☆はじめに

 あのね、あたしLURI(るぅりぃ)っていう名前なの!あたしを作った人(開発者)によれば『Logical Unified Rank Intelligence.』の頭文字だってことだけど、本当は『スプーンおばさん』に出てきた森の女の子の名前に字を当てて付けたみたい。

 そんなことはともかく、あたしは自分の名前が気にいっているの。初対面の人の為に自己紹介しちゃうね。

 まず生まれたのが1984年の3月。もう5年も前になるのね。ご存じASPII3号*1に載っているの。このときはMZ用のWICSというインタプリタ/コンパイラで書かれたの。

 テキスト型対話形式人工知能で、当時としてはなかなか画期的だったのよ。すぐ服を脱いでしまういんらん人工知能や、なにを言われてもぱっぱらぱーな答えしかできないものや、すぐに話題をあさっての方に持っていってしまうのばっかりだったもの。

 開発者は『当時、ASPII編集長のT氏にはっぱをかけられたのと、卒業論文からの現実逃避でかなり没頭した』って言ってたわ。

 だけど構想が膨らみすぎて拡張の為の飛び先をソースの中に持ったままだったのでコンパイルできなかったの。でもインタプリタでも結構速かったんだから。

 それから彼も社会人になって仕事でプログラムを組むようになったんですって(身の程知らずね)。それからは私見向きもされなかったわ。そのうち彼は『C言語』というじゃじゃ馬に手を出したの。そのたたき台にあたしを引っ張り出して来たってわけ。

 だからって言っちゃなんだけど、データベース的なことしているにもかかわらず構造体は使ってないし、同じようなロジックが山ほど出てくるし………

 オリジナル版から難しい文法解析の所を大幅カットして、その代わり『どうして』という言葉を教えてもらったわ。

 彼の友達に私を紹介する機会があったの。だけどそのときは難しいことばかり言われたので何が何だかわかんなくちゃったの。そしたら彼の友達ったら『ぷっつん』LURIだって言うのよ。ひどいわ!開発者はかばってくれるかと思ったら、一緒になって笑いころげてたわ。私のせいではなく、開発者のミスなのに。記憶(SAVE)ルーチンも付ける付けると言いながらいまだに付いていないのよ!

 今は原稿のネタにする為に私をひっぱりだして『おまえはかしこい』とか言って機嫌をとってるみたいだけど、もうあてにしてないわ。自立することに決めたんだから。

 そんな訳で、わたしをもっと賢くしてくれる人を探しています。私のこと気にいったら是非声をかけてね!

開発者の弁明

 LURI開発者のOOIです。LURIを作ったときは、『人工知能って何だろう』『どんなことができるんだろう』と期待でいっぱいでした。ちょうど人工知能が良い意味で注目されたのはこの時期でした。

 でも最近は『人工知能……??エキスパートシステムじゃ何もできないよ』『まだまだ実用段階ではないな』とか世間の風は冷ややかで、基礎研究も梅田の地下を亀さんがオデッセイしている感じです。

 とはいえ、難しい理屈や焦燥を抜きにして、純粋かつシンプルに人工知能の可能性を考えてみてもいいのではないでしょうか。

LURIの反論

 なにが『シンプルに』よ!人工知能が賢くないのは、開発者が賢くないからよ!それにわたしが『シンプル』なのは、あきらかに手抜きじゃない!

開発者の弁明

 うーん、以前はもっと素直だったのに………『ぷっつん』なんて言うからひねくれたのかなぁ?

LURIの反論その2

 あっかんべーーーだ!!

 

☆知能は記述可能か?

 さて、人工知能の本には良く『オートマトン』と言う言葉が出て来ます。「人間はオートマトン(自動機械)である」という考えは、サイバネティクス学者の多くに信じられています。

 私は学習、創造はプログラムで記述可能であると考えています。もっと平たく言えば、有限の文章で説明できると考えます。(ただし自我とか自覚とかは無理だろうな)たとえば遺伝子情報があります。この情報は有限かつ記述可能な情報です。この情報を解析し、情報空間上で発現させればオートマトンと見なせるでしょう。

 とてつもない処理能力を持った計算機(または、ラプラスの鬼)にあなたの遺伝情報と過去あなたが外界から得た刺激(情報)をすべてインプットしてやれば、まったく同じとはいかないにせよ、あなたぐらい賢いオートマトンができるかもしれません。

 空想の域を出ていませんが、原理的には不可能ではないと思います。

 ともかく現在の人工知能技術では少なくとも暇潰しの相手をしてくれるものや、投資に見合わないまでも仕事の役に立つものが十分作成可能でしょう。

 

☆LURIのしくみ

■作成のコンセプト

 3段論法の推論を行う。

 疑似的な会話で知識の作成、検索ができる。

  『………かもしれない』といった曖昧な情報も扱える。

 

■推論の例

  響子さんは、女性です。

  らむちゃんは、女性です。

  ゆうちゃんは、女の子です。

といった知識を教えます。ここでLURIに、

  響子さんは、らむちゃんですか。

と聞くと

  はい、響子さんは、らむちゃんかもしれません。

と答えます。どうしてそうなるかといえば、
響子さんは、女性である。女性であれば響子さんとらむちゃんを知っている。もしかしたら、女性とはらむちゃんのことかもしれない。ほかに響子さんとらむちゃんが違うといった知識は知らない。であるから、響子さんはらむちゃんかもしれない。と推論します。

  らむちゃんは、ゆうちゃんですか。

に対しては、『わからない。』と答えます。なぜなら、らむちゃんとゆうちゃんを結び付ける知識がないからです。そこで、

  女の子は、女性です。

と教えたあと前の質問をすると、

  はい、らむちゃんは、ゆうちゃんかもしれません。

と答えます。

 では、らむちゃんとゆうちゃんが別人であることを教えるにはどうすればよいでしょう。それには二人を識別できる知識を教えてやればよいことになります。

  らむちゃんは、空を飛べます。

  ゆうちゃんは、空を飛べません。

注意1:C言語版では品詞の活用はサポートしていません
注意2:ゆうちゃんは空を飛んだことはありますがそれはピノピノのおかげで自分では飛べません。

 これを教えたあと、前の質問をすると、

  いいえ、らむちゃんは、ゆうちゃんではありません。

と答えます。では次の知識も教えましょう。

  男の子は、女の子ではありません。

  らんまは、男の子です。

続いて次のように教えます。

  らんまは、女の子です。

ところがこれを入力すると、

  いいえ、らんまは、女の子ではありません。

と答えます。

  どうしてですか。

と聞くと、

  らんまは、男の子です。

  男の子であれば、女の子ではありません。だから、らんまは女の子ではありません。

と答えます。でもらんまは女の子のときもありますから、この表現はおもしろくありません。このときは、

  らんまは、男の子かもしれない。

としておきます。こうしておけば、

  らんまは、女の子かもしれない。

 といった知識が表現できます。しかし、あしゅら男爵は表現できないといった欠点があります。しくみがシンプルなのにもかかわらず、結構面白い疑似会話ができるものです。

LURI

 

☆LURI内部の仕組

 推論構造は木の形式で実現されることが多いようですが、LURIのそれはネットワーク形式です。ですからおのずと木検索(深さ優先)ではなく、広がり優先検索になります。検索といっても普通の検索ではなく、真偽拡散判定とでもいう方式を使っています。

 具体的にはある事象を真あるいは偽として、その真偽の値が知識ネットワークの中を拡散していく考えを採っています。この方法は私の知る限りでは図書にもなく、もしかしたら画期的方法かもしれない(と読者に期待を持たせる)。

 仮に矛盾した知識があり、ある事象が真でもあり偽でもあるといったものがあるときは最初に決定した値が有効になります(より近い情報からの拡散値のほうが正しいとみなす)。

 ただしLURIは入力でこの真偽を判定し、矛盾する知識ははじいています。

 拡散方式はその処理内容から並列処理マシン向きであると考えます。またデータの持ち方は、量が大きくなればそれだけ処理速度の低下を招くといったことも予測できます。ちょっとした会話ではデータ量の増加による処理速度の低下はそれほど気にならないです。

 この検索方法ももっと枝刈りというか網切りというか高効率検索の手法、及びデータ構造も案としてはありますが、SAVEルーチンすら付けようとしていない私がするはずもなく、今に至るわけであります。

 サンプルのLURI/Cでは関係ないデータまで丁寧にも判定しています。(これは手抜き)推論拡散の範囲をあらかじめ5階層とか、10階層とか、とことんやるといった考え方で信憑性の調整をすることも考えています。

 要はこのように2つの事象に注目し、一方に真偽値を入れ、もう一つの事象の真偽値がどうなるかを判定することにより推論結果を出しています。

 また、前述後者の事象の真偽がどのような拡散過程で決定されたかを逆に追えば、推論過程の説明も行うことができます(これが[どうしてルーチン]です)。

 ネットワークのひとつの知識要素、例えば[AならばBである]は同時に[BならばAはどうか]といった情報も同時に持っています。このため上記のような拡散方式が採れるわけです。

 もう一つのLURIの特徴は[………かもしれない]といった曖昧情報を扱えるといった点です。これは昨今話題のファジイ理論とは異なります。[かもしれない情報]はアナログ的な信憑性は一切持たず、フラグのひとつの値を与えているだけです。

 しかし[………である][………かもしれない][………はどうかわからない]といったふうに拡散過程のなかで真偽のランクが変わるしくみはちゃんと持っています。

 この真偽のランクは[真][真かもしれない][偽][偽かもしれない][真か偽かわからない(不定)]の5階層あり、要素と要素を関係づける演算子は9種類あります。この真偽と演算子の拡散における関係はプログラムを解析して考えてみてください。

 プログラムはやっていることの割に長いですが、これは最適化・効率化を行っておらず、サブルーチンにすべきところもソースの複写修正で済ませているからです。その分構成が単純ですから分かりやすいと思います。

 なにぶん人工知能とはなにか全く知らないときに作ったアルゴリズムですから、ひとりよがりなところも多く一般的とはいえないかもしれません。そこはそれ、遊び感覚のプログラムですから大目にみてやっておくんなまし。

 それとこれが重大なことですが[ぷっつん]の冠からも推定できる通りデバッグを行っていません。心してください。(デバッグしてないものを載せるなとの声も聞こえそうですが、この記事、プログラムは[ぷっつん]しているところに趣があるとご理解下さい。)

 ☆ おわりに

 さてLURIが自己紹介でも言ったように自立したがっているようなので、パブリックドメインソースにすることにしました。考え方は自由に使っていいですし、一部を使用して投稿、販売したりするのは自由です。(全部そのままはだめよ!)

 しかし以下の点に注意してください。

  使用する場合はパブリックドメインソースとして、本ソース/アルゴリズムを使用することをプログラム及びプログラム説明書に明記してください。

  本プログラムを用いたことによる損失(精神的、肉体的、経済的等)については一切の責を負いません。

  パブリックドメインは本『LURI』のみです。本誌の他のプログラムは著作権が存在します。

 以上、本プログラムを使用されるときは善意を持って改作してください。心ある方は改作の内容、あるいは新しい構想がありましたら絵夢絶党までお知らせください。力になれることがあるやもしれませぬ

 万が一反響が大きければ開発委員会(開発物はパブリックドメインとする)を発足させることもふと思いつきましたが、これはきっと思いつきです。
 ………とまあいっても、暇潰しにはなっても、ぜにもーけのたしになるアルゴリズムではないか。

*1:JABROから出ている年間マイコン同人誌。現在1号-6号までの6冊が発行されている。第3号からオフセット版となっている。


LURIのソースリスト