KM で遊ぼう!

さて今日も眠れないので、KM について書いておこうと思います。KM ってなに?と思う人がほとんどのことかと思われますが、これは F-Logic の仲間みたいなものです。つまり知識をあーだこーだして遊ぶための枠組みです。"The Knowledge Machine"という格好の良い(しかしあまりにも大胆な)名前で覚えるといいみたいです。

KM: The Knowledge Machine

とか言っておきながら私も全然詳しくないので、他の人も一緒になって KM であーだこーだして下さるととっても嬉しいなと思います。むしろ色々教えて欲しいくらいですから、どなたか一緒に勉強して知見を共有しませんか?

なお、私は Action の扱いについてとても興味があります。そういう目的ですが、正直 Action をうまいこと扱うのって絶対難しいだろうとは思いますから(言語学の経験上、その辺を真面目に考えると、砂漠の荒野をさまよって死ねるよね!)、結局日和って class 周りをつついているだけになってしまうかも知れません。KM については今後も眠れない時にちまちま書いていく予定ですが、そうなったら誰かしかってやって下さい、よろしくお願いします。

まずは動かす

KM は lisp で書かれているそうです。私は scheme しか知らないので、というかそういう括弧の世界は gauche しか触ったことが無いダメな子なので、まず動かそうとした時点で躓きました。同様にダメな人はまず lisp 環境から導入しておいて下さい。Ubuntu の人は次のようにすれば大丈夫。

% sudo apt-get install clisp

次に km-2-2-19-packaged.lisp をダウンロードします。ただしこのまま clisp で処理するとなぜか変な文字列があるからエラーだよ、と怒られるようなので、とりあえずやっつけ的に次のようにして対処しておきます(正しい方法を知っている方教えて下さい)。

% nkf -w km-2-2-19-packaged.lisp > km.lisp

これでようやく動かすことが出来ます。

% clisp -repl km.lisp
(COMMENT: Resetting KM...)
      ====================================================
      KM - THE KNOWLEDGE MACHINE - INFERENCE ENGINE v2.2.16
      ====================================================
Copyright (C) 1994-2008 Peter Clark and Bruce Porter. KM comes with ABSOLUTELY
NO WARRANTY. This is free software, and you are welcome to redistribute it
under certain conditions. Type (license) for details.

Documentation at http://www.cs.utexas.edu/users/mfkb/km/
Type (in-package :km) then (km) for the KM interpreter prompt!
[1]> 

ただしこの時点ではまだ KM 環境の中に入っていないので、指示通りに次のように打ち込んでおきましょう。

[1]> (in-package :km)
#<PACKAGE KM>
KM[2]> (km)
KM> 

というわけでこれで遊ぶ準備が整いました。ではとりあえず猫を二匹登場させてみましょう。

KM> (a Cat)
(_Cat1)
(1 inferences and 35 KB accesses in 0.0 sec [250 lips, 8750 kaps]))

KM> (a Cat)
(_Cat2)
(1 inferences and 27 KB accesses in 0.0 sec [250 lips, 6750 kaps]))

なんだかとっても分かり易くて親切ですね。

読むべきもの

さてとりあえず動いて大変目出たいところですが、色々試す前に次のものは読んでおいた方が良いと思います。全体像がなんとなく把握できます。

http://www.cs.utexas.edu/users/mfkb/km/km-overview.script

あとはクイックリファレンスシートを印刷して手元に置いておきましょう。

http://www.cs.utexas.edu/users/mfkb/km/km-reference-sheet.doc

ただこのリファレンス、一箇所間違いがあって、真ん中くらいに allof が上下に並んでいるところがあると思うのですが、これ下のは oneof なので印刷する前に修正しておいた方がいいと思います。私は印刷してから気付いたのでとても悔しいです。

で、あとはマニュアルを読むべきでしょうけれども、いきなり頑張ると疲れるので私はいずれゆっくりと読むことにしました。

じゃあ遊びます

まずは無難なところでクラスでも作ってみましょうか。

KM> (Cat has (superclasses (Animal)))
(Cat)
(1 inferences and 21 KB accesses in 0.0 sec)

KM> (Animal has (superclasses (Mammal)))
(Animal)
(1 inferences and 21 KB accesses in 0.0 sec)

じゃあ早速サブクラスを問合せしてみます。

KM> (the subclasses of Mammal)
(Animal)
(1 inferences and 3 KB accesses in 0.0 sec)

KM> (the subclasses of Animal)
(Cat)
(1 inferences and 3 KB accesses in 0.0 sec)

うん、いい感じですね。じゃあタクソノミを表示しちゃいましょう。

KM> (taxonomy)
Removing redundant superclasses...
Removing redundant subclasses...
Computing subclasses of Thing...
Thing
   Mammal
      Animal
         Cat
(t)
(7 inferences and 102 KB accesses in 0.0 sec [583 lips, 8500 kaps]))

おおなんと便利なことでしょうか。なんだかワクワクしてきますね!あれれ、さりげなく Animal と Mammal の順序おかしくない?とか簡単に気付けるのもこうして可愛らしく表示してくれたおかげですね(私はうっかり屋さんだからこういう間違いをよくやります、うっかり屋さんにも優しい KM ということです)。素晴らしいと思います。

循環継承

いつも通りに循環継承に挑戦してみます。KM では循環継承はどう扱われるのでしょうか。楽しみですね。

KM> (Dog has (superclasses (Dog)))
(Dog)
(1 inferences and 20 KB accesses in 0.0 sec [250 lips, 5000 kaps]))

おお、なんとあろうことか、知識として認められてしまいました。大丈夫?

KM> (a Dog)
ERROR! Cycle in the KB! Dog is its own superclass!
	-------------------------
	**Switching on debugger** 
Options include:
  g: to see the goal stack
  r: to retry current goal
  a: to abort
  o: to switch off debugger
  A: abort & off - return to top-level prompt AND switch off tracer
  ?: to list more options
	-------------------------

ERROR! Cycle in the KB! Dog is its own superclass!1 <- (_Dog1)                               [(a Dog)](_Dog1)   ; (WARNING: Errors occurred during reasoning)
(1 inferences and 25 KB accesses in 0.0 sec [250 lips, 6250 kaps]))

ほらやっぱり大丈夫じゃないよ!とっても残念な感じですね。

まとめ

以上のように、KM はとっても素敵なおもちゃですから、皆で一緒に遊びましょう。今回は書きませんでしたが、なんと Situation とかあるんですよ。その辺と Action との絡みはとっても楽しみですよね。今からもうワクワクしてます。