エキスパートシステム
出典: フリー百科事典『ウィキペディア(Wikipedia)』
エキスパートシステムは1970年代に人工知能の研究者によって開発され、1980年代にわたって商業的に適用されたコンピュータプログラムの一種である。基本的に、特定の分野の問題についての情報を解析するルール群から構成されるプログラムであり、その情報はシステムの利用者が提供する。 問題の分析結果を提供するだけでなく、設計によっては利用者の行動を正しく導く指針を与えることもできる。日本語訳として専門家システムと言う場合もある。
関連用語としてウィザードがある。エキスパートシステムのように、ウィザードもユーザが問題を解決するのを手助けする対話型コンピュータプログラムである。普通、ウィザードという用語は、ユーザにより入力された指針に従ってデータベースで検索するプログラムを指す。あいにく、これらの2つの定義の区別は確定したものではなくルールベースのプログラムの中にはウィザードと呼ばれるものもある。
目次 |
[編集] エキスパートシステムが解決する問題のタイプ
一般に、エキスパートシステムが解決する問題は、人間のエキスパート(専門家)が行うことをなぞって解決できるものである。それは、たとえば医学や他の専門家などである。そのような問題領域(一般に非常に狭い領域、たとえば「十代の皮膚病の診断」など)の実際の専門家から問題領域に関する経験則を聞き出す。その手法はシステム開発者が直接聞き取り調査する場合もあるし、評価システムを専門家に使ってもらい、ルールを専門家自身に追加してもらう場合もある。一般にエキスパートシステムは、従来のアルゴリズムで符号化することができるような唯一の「正しい」解決策がない問題のために使われる。データをソートするとか、グラフの最短経路を見つけるといった問題にはもっと簡単な解法があるので、エキスパートシステムを使ってそれらを解決しようとする人はいないだろう。
単純なシステムはデータを評価するのに単純な真偽論理を使うが、より洗練されたシステムはファジイ論理のような方法を使って、実世界の不確定要素をある程度考慮した評価を実行する場合がある。そのような精巧化は発展しづらく、まだ不完全である。
[編集] アプリケーション
エキスパートシステムは、実用化されることでAI研究とは一線を画したが、それらのアプリケーションは限定的なものだった。エキスパートシステムは、その知識領域が極めて狭い。たとえば面白い例として、ある研究者が彼のおんぼろ車を「皮膚病」エキスパートシステムで診断したところ、風疹であるという診断結果を得た。つまり、そのシステムは人間であれば容易に見分ける間違いに陥ってしまいやすいということである。さらに、いったん神秘性が薄れると、ほとんどのプログラマは単純なエキスパートシステムが本質的には決定論理の少し精巧なバージョンに過ぎず、すでに使われている技術であることに気がついた。従って、エキスパートシステムの技術のいくつかが、さりげなく最も複雑なプログラムの中で使われているのを発見することができる。
エキスパートシステムの1970年代と1980年代の他の実用例は、コンピュータゲームの中にあった。これは今日、単にAIと呼ばれているものである。例えば、コンピュータ野球ゲームである Earl Weaver Baseball と Tony La Russa Baseball(訳注:いずれもメジャーリーグの監督の名を冠した野球ゲーム)は、それら二人の野球監督の試合戦略の非常に詳細なシミュレーションを行っていた。人間がコンピュータと対戦したときに、コンピュータは Earl Weaver やトニー・ラルーサのエキスパートシステムに質問して次にとるべき戦略を決定していた。ゲームとしての偶発性(いつ牽制球を投げるかなど)も彼らが提供した確率に基づいて決められた。今日、我々は「ゲームのAIは対戦相手の監督の戦略を提供した」と単に言うだろう。
2008年、バンダイから発売中の携帯玩具『未来予測機 ミライスコープ』は、アメリカの心理学者J.M.デュセイが開発したエゴグラムという性格分析法に基づいた50の質問に答えることでプレイヤーを236タイプの性格に分類し、将来の生活や行動をを予測する。ある種の簡単なエキスパートシステムといえよう。
[編集] エキスパートシステムと問題解決システム
エキスパートシステムと伝統的な問題解決プログラムの間の重大な違いは、問題に関する専門知識がコード化される方法である。伝統的なアプリケーションの中では、問題に関する専門知識はプログラムとデータ構造の両方で符号化される。
エキスパートシステム的手法では、関連した専門知識は全てデータ構造だけに符号化され、プログラムの中にはない。いくつかの利点はこのような構成手法によるものである。
例をあげて伝統的な問題解決プログラムとエキスパートシステム手法とを比較してみよう。例は税金対策の問題である。伝統的な手法では、データ構造は納税者と税額表を表現し、プログラムは税金コンサルタントの専門知識を内包していて、たとえば納税者を税額表選択と関係づけるステートメントなどがある。税金の専門家から見れば、このような専門知識の表現は理解しづらいし、修正しづらいのである。
エキスパートシステム的手法では、納税者と税金の計算についての情報は再度データ構造の中に格納されるが、それらのデータの関係を示す知識もデータ構造に格納される。エキスパートシステムのプログラムは問題領域(税金)から独立であり、問題領域の性質を無視してデータ構造を処理する。例えば、ユーザーとのやり取りを通してデータを得るプログラムや、記述の特殊な構造を表現し処理するプログラム、処理の流れを制御するアルゴリズムと問題領域の意味論的な関連付けを行うプログラムなどがある。
エキスパートシステムの一般的なアーキテクチャは2つの部分に分けられる。ひとつは問題に依存したデータ宣言であり、知識ベースあるいはルールベースと呼ばれる。もうひとつは問題領域に依存しない推論エンジンと呼ばれるプログラムである(データ構造には深く依存している)。詳しくはどう動作するのかの章を参照されたい。
[編集] エキスパートシステムと関わる人
エキスパートシステムとのやりとりを行う3種類の人が一般にいる。まず第一にエンドユーザーであり、自身の問題解決支援のためにシステムを使う。システムの構築と保守に、他の2つの関係者が存在する。知識ベースを構築するその問題領域の専門家、および専門家の知識をどのように表現するかをアドバイスすると同時に有益な問題解決に必要な推論技法を定義するナレッジエンジニアである。
[編集] エンドユーザー
エンドユーザーは通常、対話を通じてエキスパートシステムと関わる。以下は対話の例である。
- Q. あなたは、自分がどのレストランに行きたいかわかっていますか?
- A. いいえ
- Q. あなたは特に食べたいものがありますか?
- A. わからない
- Q. あなたは辛い食物が好きですか?
- A. いいえ
- Q. あなたは食事のときにいつもワインを飲みますか?
- A. はい
- Q. あなたがワインを飲む場合、それはフランスワインですか?
- A. なぜ
この例を見れば明らかなように、このシステムは一連の質問を通してユーザーにレストランを勧めることを目的としている。このダイアログは、ユーザがすでにレストランを選択済みかを訊いて(エキスパートシステムの共通の機能)、その後、エキスパートシステムの特徴となる質問をしている。ユーザーは質問に答えないのも自由である。エキスパートシステムでは、対話の内容は事前に決まっていない。対話に関して固定的な制御構造は存在しない。ダイアログはそれまでに得られた情報と知識ベースの内容から生成される。このため、ユーザーが答えない場合でも対話が止まることはなく、次の質問が発せられる。
上記の例のようにユーザが「なぜ」という質問で質問に答える時に、エキスパートシステムと伝統的なシステムでは答え方が全く異なり、これがエキスパートシステムを特徴付けている。エキスパートシステムの答えは以下の通りである。
- A. 私は、お勧めのレストランのタイプを決定しようとしている。ここまでの問答で、中華はあり得ないようである。フランス料理がありそうな選択かもしれない。私は、食事する人がワイン飲みであり、好みのワインがフランス製とはっきりと判断できるなら、レストランの選択肢にフランス料理を含めるべきである。
伝統的なシステムに汎用の説明システム(なぜ、どうやって、という質問への応答)を実装することは非常に難しい。エキスパートシステムの「なぜ」への応答が潜在的な知識構造の反映である。先行する条件群が真であれば、ある結論がアサートされるルールがある。ルールは値を参照し、様々な制約に対してそれらをテストしたり、それらに制約を課したりする。これは実のところ知識構造の主要部分である。例えば、個々の食事には様々な属性が存在する。ワインを飲むのか、飲むならその種類は何かといった事柄である。別のタイプのルールとして、既知の属性値を他の属性と関連付けるものがある。対話はこれらのルールを整然と処理した結果である。
[編集] ナレッジエンジニア
ナレッジエンジニアは、エキスパートシステムの知識宣言のために表現方法を選択し、その知識を処理するために用いられる推論エンジンに関係している。よい推論技術には以下のようないくつかの特徴がある。
- 1. よい推論技術は問題領域から独立している。
-
- 推論エンジンの説明能力、知識透過性、再使用可能性を実現するには、問題領域固有の知識に依存してはいけない。
- 2. ある推論技術はハードウェア構成の診断などの特定タスクに特有であるかもしれない。同様に他の技術は他の特定の処理技法としてのみ使用されるかもしれない。
- 3. 推論技術は知識構造に常に依存する。
- 4. ルール処理技術の成功例として以下のものがある。
-
- (a)前向き連鎖
-
- (b)後向き連鎖
[編集] 推論規則
「推論規則」という概念は、エキスパートシステムを理解する上で重要である。推論規則は、if節と then節の二つの部分から構成される文である。以下は推論規則の例である:
- レストラン選択がフランス料理を含み、状況がロマンチックならば
- レストラン選択は明確にポール・ボキューズである。
エキスパートシステムのルールベースは多くのそのような推論規則からなる。それらは別個のルールとして入力され、推論エンジンはそれらを使って結論を導き出す。各ルールが単位であるので、ルールは(それが、どの結論に達するかに考慮するべきであるけれども)、他のルールに影響せずに削除したり追加したりできる。伝統的なプログラミングと比較した場合の推論規則の1つの利点は、人間の行う推論により近い推論を使っている点である。
従って、結論が得られると、どのようにその結論に達したかを理解することが可能である。さらに、エキスパートシステムが専門家と同様な形式の知識を使うので、専門家がこの情報を検索することがより容易であると言えよう。
[編集] 連鎖
推論規則を使う時に二種類の推論手法がある。後向き連鎖と前向き連鎖である。
前向き連鎖は使用可能なデータで始まり、要求されたゴールに達するまでさらにデータを集めて推論規則を適用する。前向き連鎖を使っている推論エンジンは、if節が真である規則を見つけるまで推論規則を検索する。そして、見つかった推論規則の then節をあらたなデータとして追加する。結論に達するまで、これをし続けるのである。使用可能なデータが、どの推論規則が使われるかを決定するので、この方法はまた「データ駆動」と呼ばれる。
後向き連鎖では、結論のリストを持っていて、いずれかの結論に達するデータがあるかを調べていく。後向き連鎖を使っている推論エンジンは、要求された結論とマッチしている then節を持っている規則を見つけるまで推論規則を検索する。その推論規則の if節が真であると知られていないならば、その if節は結論のリストに追加される。例えば、ルールベースが2つのルールを含んでいる場合を考えてみよう。
- (1) フリッツが緑色ならば、フリッツはカエルである。
- (2) フリッツがカエルであるならば、フリッツは飛び跳ねる。
フリッツが飛び跳ねることが結論と想定しよう。ルールベースが検索され、(2)の規則の then 節が結論とマッチしているのでルール(2)が選択される。フリッツがカエルであるかどうかはデータがないので、その if節は結論リストに追加される。再度ルールベースが検索され、新たに追加された結論と then節がマッチするルール(1)が選択される。ここで、if節(フリッツは緑色である)が真であると知られていて、結論としてフリッツは飛び跳ねることが導かれる。結論リストが変化して推論規則が選択されるので、これを「ゴール駆動」と呼ぶ。
[編集] 信頼度
プログラミングの伝統的な方法に比較したエキスパートシステムの別の利点は、信頼度の使用が可能である点である。ある人が100%の自信を持っていつも結論を出すわけではない場合を考えてみよう。彼は、「フリッツが緑色ならば、彼はたぶんカエルである」と言うかもしれない(結局、彼はカメレオンであるかもしれない)。このタイプの推論は、信頼度(Confidences)と呼ばれる数値を使って模倣することができる。例えば、フリッツが緑色であることが知られているならば、彼がカエルであるという結論は 0.85の信頼度を持っている。あるいは、彼がカエルであることが知られているならば、彼が弾むという結論は 0.95の信頼度を持っているかもしれない。これらの数値は確率に実際よく似ているが、全く同じではない。信頼度は数学的な確率というよりも、人が推測で話をすることを模倣する意図で用いられる。
エキスパートシステムとそれらのアーキテクチャについて、以下に列挙する特徴がある。
- 1. 結論に達するために取られたステップのシーケンスは、個々の事例毎に新たに生成される。システムが構築される時に、シーケンスが明示的にプログラム化されることはない。
- 2. エキスパートシステムはどのような問題であっても複数の値を処理することができる。このため、推論の流れはひとつとは限らず、途中の不完全な結論もひとつとは限らない。
- 3. 問題解決は、特定技術というよりも、特定知識を適用することによって遂行される。これはエキスパートシステムの技術の要となる考え方である。これは人間の専門家が固有の知識を持っているけれども、知識の利用方法自体は人によって違いがあるわけではないという信念に基づいている。このような考え方では、あるエキスパートシステムが期待された結果を生み出さない場合、プログラムを改良するのではなく、知識ベースを拡張する。
ルールベースと推論エンジンを使って人間の専門家の推論過程をシミュレーションする様々なエキスパートシステムが存在する。そのようなシステムでは、膨大な量の知識を知識ベースに格納する必要があった。一般に、そのようなエキスパートシステムの知識ベースは人間の推論過程と類似の方法で関係付けられた多くの if-then 型の文から構成された。
大規模なルールベースを保持する必要があるため、かつてのエキスパートシステムは大型の情報処理システムでのみ実行されていた。最近のパーソナルコンピュータは、比較的単純なエキスパートシステムを実行できるだけの記憶容量を備えるまでになってきた。
エキスパートシステムによっては、必要とする情報量が膨大すぎるため、コンピュータのメモリに全体を格納することができない。他のエキスパートシステムでは、推論過程で全ての情報をメモリ上に同時に格納しておく必要はない。後者のようなアプリケーションの例としては、様々なコンポーネントから構成されるデータ処理システムを診断するエキスパートシステムが上げられる。対象とするデータ処理システムの最小構成コンポーネント群を診断するには、ルールベースはそれに対応した部分だけを持っていればよく、オプションのコンポーネントに対応したルールベースは必要とされない。しかし、初期のエキスパートシステムはルール同士が何らかの形で連結されているため、ルールベース全体をメモリに入れる必要があった。
ルールベースをなるべく内容を考慮して分割すれば、特定用途で不要なデータや知識を含むルールベースを取り除くことが可能となる。ルールベースの分割によって、メモリ容量が小さいシステムでも必要に応じて部分的にページングすることでエキスパートシステムを動作させることが可能となる。内容を考慮したルールベースの分割をするには、エキスパートシステムがその各部分の関係を意識してメモリ上にどの部分を置くかを管理する必要がある。システムは任意のルールベースが任意の時点で必要とされても対応する必要があるので、現在のルールベースの処理地点を記憶しておいて、他のルールベースの処理を行ってから元の地点に戻ることができなければならない。また、システムはルールベースを渡り歩く際に収集したデータを受け渡していけるようにしなければならない。
ユーザーインターフェースと手続インターフェースは、情報収集プロセスを構成する2つの重要な機能である。
[編集] ユーザーインターフェイス
ユーザーインターフェースの機能は、質問や情報を操作者に提示し、その反応を推論エンジンに供給することである。
利用者が入力したいかなる値でもユーザーインターフェイスが受け付けて、解釈しなければならない。ユーザーの答えの中には想定された有効な答えと判断されるものもある。ユーザーインターフェイスは全ての答えが正しいデータ型であるかをチェックする。答えが想定範囲内である場合は実際にどの想定値に相当するか比較決定する。ユーザーが想定外の答えを入力したら、無効な答えであることをユーザーに知らせ、訂正を促す。ユーザーインターフェイスと推論エンジンの間の通信は、ユーザーインターフェイスコントロールブロック(UICB)を使って行われる。
[編集] 手続きノードインターフェイス
手続きノードインタフェースの機能は、手続きコーディネーターから情報を受け取り、適切な手続きを呼び出すことである。手続き呼び出しとその結果は、外界からの入力の一般化とみなすことができる。初期のエキスパートシステムでは、予め決められた方法でのみ外界からの情報を得ていたので、入手できる情報は限定的だった。相互参照するアプリケーション群の中のエキスパートシステムは、知識ベースを通してシステム上の任意の手続きを呼び出すことを許可されている。これによりエキスパートシステムはより幅広い知識領域で活用することができるようになる。
エキスパートシステムを使用した機械診断の領域、特に自己診断アプリケーションでは、情報を得ずに機械が正常かどうかを判断することはできない。最も重要な情報源は機械そのものであり、操作者よりも豊富な情報を提供できる。
対象システムに関する知識はルールベースにある。ルールベースには、情報の種類に対応して四種類のオブジェクトが存在する。
- 1. クラス -- これらはユーザにされる質問である。
- 2. パラメータ -- パラメータは、クラスの中の質問文字列内のプレースホルダーであり、実際の値を何らかの手段で収集すべき変数と考えることができる。
- 3. 手続き -- これらは外部プロシージャコールの定義である。
- 4. ルールノード -- システム内の推論は、人の推論をまねたルールやロジックの木構造によって行われる。これらの木のノードはRULEノードと呼ばれる。いくつかの違うタイプのRULEノードがある。
ルールベースは多くの木で構成される森林にたとえることができる。それが結論を含んでいるという点で、木の一番上のノードはゴールノードと呼ばれる。森林の各木は違うゴールノードを持っている。木の葉はまたRULEノードの一種である。葉はEVIDENCEノード、EXTERNALノード、またはREFERENCEノードであるかもしれない。
EVIDENCEノードは特定の質問をして情報を操作者から得る。EVIDENCEノードによって示された質問に反応することで、操作者は一般に「はい」または「いいえ」と答えることによって 1 または 0 という数値を返すか、「たぶん」によって 0 から 1 の間のなんらかの値を提供する。
「はい」または「いいえ」または 0 から 1 の間の値以外の応答を操作者に要求する質問は違う方法で処理される。
EXTERNALノードでは、手続き呼出しから得られたデータが使われることを示す。
REFERENCEノードは、別の木またはサブツリーを参照するのに使われる。
木はゴールノードとリーフノードの間に中間ノードまたは小ノードを含むかもしれない。中間ノードは AND または OR のような論理演算を表すことができる。
推論ロジックは2つの機能を持っている。それは、トレースすべき木を選び、その木をトレースする。深さ優先で左から右へというふうにトレースを行う。
「トレース」という言葉は、システムが木構造のノードを見ていく際にクラス(質問)を操作者に出し、手続を呼び、信頼度を計算することを意味する。
どの木を選択するかは、木の順序付けに依存する。本来の木の順序はルールベース内の格納順序である。しかし、この順序はEVIDENCEノードに「イニシャル」属性を付与することによって変更することができる。「イニシャル」属性の全EVIDENCEノードは最初に値を得るために実行される(操作者に質問をする)。この最初の一連の質問の結果を使って、最も成功率が高くなるように木(あるいはルール)を順序付ける。そうして選択された木をトレースしている間にも成功率は更新され、さらに木を再配列することができる。
質問あるいはクラスによって利用者から得られる情報の型は、利用者の知識レベルに合わせて調整する必要があることが判っている。多くのアプリケーションでは、利用者は想定されていて知識レベルも推測できるので、質問は想定利用者の平均レベルに合わせて調整される。しかし、分野によっては想定利用者の知識レベルが大きく変動することもあるだろう。
これが特に顕著な例として、パソコンのハードウェアやソフトウェアの障害に際して利用者が原因を判断するのを支援する自己診断モードでのエキスパートシステムが上げられる。操作者に直接質問して情報を集めるのがエキスパートシステムとしては一般的であるが、それはもちろん操作者が答えられれば、の話である。例えば、パーソナルコンピュータの診断の場合、エキスパートシステムはシステムを構成する部品についての知識を持っている。操作者に対してディスプレイが白黒かカラーか質問することもあるだろう。このとき操作者は常に正しい答えを期待される。一方でエキスパートシステムは、ディスプレイの種別を知るために何らかのテストを実行することもできる。この例では信頼度を適切に設定することによってどちらの方法も採用可能である。しかし、操作者への質問で得られる情報をシステムから直接得ることができる場合には、後者を選択した方が正確性が向上して最終的な正しい結論を導きやすい。
多くの状況において、情報はシステムの中に既に存在している。それは推論プロセスを通して質問することによって得られる。システムが収集したデータは、以前に実行されたテストで得られた結果かもしれないし、違う理由でなされた利用者への簡単な質問に対する答えであるかもしれない。(訳注:エキスパートシステムは以前に集めた情報を知識ベースに蓄えていく、ということを意味しているものと思われる)
[編集] どう動作するのか
エキスパートシステムは以下の部分から構成される。
- 知識ベース(事実)
- 生成規則(「IF..,THEN..」)
- 推論エンジン(「IF..,THEN..」規則が事実に適用される方法を制御する)
結論を導く方法は二種類ある。
方法名 | 短い説明 | 使用 | システム例 |
---|---|---|---|
前向き連鎖 | 事実駆動(facts driven) | 新しいアイデアを見つけることができる | CLIPS、 Jess |
後向き連鎖 | 仮説駆動(hypothesis driven) | 診断のために使われることが多い | Prolog、Mycin |