エキスパートシステム

**エキスパートシステム**（）とは、人工知能研究から生まれたコンピュータシステムで、人間の専門家（エキスパート）の意思決定能力をエミュレートするものである。専門家のように知識についての推論によって複雑な問題を解くよう設計されており、通常のプログラミングのようにソフトウェア開発者が設定した手続きに従うわけではない。1970年代に人工知能の研究者によって開発され、1980年代にわたって商業的に適用され、AIソフトウェアとして最初に成功を収めた形態である。日本語訳では**専門家システム**と言う場合もある。

エキスパートシステムは基本的に、特定の分野の問題についての情報を解析するルール群から構成されるプログラムであり、その情報はシステムの利用者が提供する。 問題の分析結果を提供するだけでなく、設計によっては利用者の行動を正しく導く指針を与えることもできる。通常のプログラムとは異なった独特の構造をしている。2つの部分で構成されており、1つはそのエキスパートシステムから独立している推論エンジンであり固定である。もう1つは知識ベースで、可変である。推論エンジンが知識ベースを使って推論を行う。80年代になると、利用者とやりとりするための対話インタフェースが第3の部分として登場した。利用者との会話によって知識ベースを構築することから、後に会話型 (:en:Conversational Programming System) と呼ばれるようになった。

関連用語としてウィザードがある。エキスパートシステムのように、ウィザードもユーザが問題を解決するのを手助けする対話型コンピュータプログラムである。普通、ウィザードという用語は、ユーザにより入力された指針に従ってデータベースで検索するプログラムを指す。あいにく、これらの2つの定義の区別は確定したものではなくルールベースのプログラムの中にはウィザードと呼ばれるものもある。

## 歴史

エキスパートシステムはスタンフォード大学のヒューリスティック・プログラミング・プロジェクトの研究者らが提唱したもので、「エキスパートシステムの父」ともいわれるエドワード・ファイゲンバウムが含まれる。初期のシステムとしては Dendral (1965-) や Mycin (1972) がある。主な貢献者としては、ブルース・ブキャナン、エドワード・ショートリッフェ、ランダール・デイヴィス、ウィリアム・ヴァン・メレ、カルリ・スコット、その他スタンフォード大学の人々がいる。エキスパートシステムはAIソフトウェアとして初めて真の成功を収めた。

フランスでも盛んに研究され、特に推論の自動化と論理エンジンの研究が進んでいる。Prologは1972年、フランスで開発された言語であり、エキスパートシステムの発展において重要である。Prologは一種のシェルであり、任意のエキスパートシステムを受容し動作させるソフトウェア構造と言える。一階述語論理を使ったエンジンを備え、規則と事実を記述できる。エキスパートシステムの開発の道具であり、実際に使える初の宣言型言語であり、人工知能開発用言語として広く使われた。しかし、Prologは扱いやすい言語とは言えず、その論理の階層は人間の論理とは乖離している。

1980年代になると、実世界の問題を解く実用的ツールとしてエキスパートシステムが広く商用利用されるようになった。多くの大学が関連コースを開設し、フォーチュン500の大企業の3分の2が日常業務にこの技術を適用した。日本の第五世代コンピュータのプロジェクトやヨーロッパでの研究など、世界的に関心を集めた。

エキスパートシステムの開発は、記号処理言語であるLISPとPrologの開発で促進された。車輪の再発明を防ぐため、大規模エキスパートシステムの構築に特化したエキスパートシステムも作られた。

## アーキテクチャ
### ルールベースと知識ベース
エキスパートシステムでは、知識ベースは「もし…ならば…」という形式の自然言語の規則で表現される。例えば、次のような文である。
* 「**もし**それが生きている**ならば**、それは死ぬ」
* 「**もし**彼の年齢が既知**ならば**、彼の生年は（現在の年 - 彼の年齢）である」
* 「**もし**細菌の種類が不確かで**かつ**その細菌がグラム陽性で**かつ**その有機体の形状が「桿状」で**かつ**その細菌が好気性**ならば**、その細菌が「腸内細菌科」に属する可能性が高い (0.8)」

このような定式化は日常の話し言葉にも通じる利点があり、計算機科学（一般にプログラムはコード化される）では非常に珍しい。規則はエキスパートシステムが利用する知識を表現している。規則の定式化には他のものもあり、その場合は日常の言語とは程遠く、計算機科学者にしか理解できない。規則のスタイルは推論エンジンのスタイルに合うように選択される。エキスパートシステム最大の問題は、この普段は無意識に専門家が使っている知識を集めることである。そのための方法論がいくつかあるが、その多くは計算機科学者のみが使用可能である。

### 推論エンジン
推論エンジンは、規則群を使って推論を行うプログラムである。推論を行うため、論理に基づいている。推論エンジンが使う論理としては、命題論理、一階または高階の述語論理、認識論理、様相論理、時相論理、ファジィ論理などがある。命題論理以外の論理は複雑であり、数学者や論理学者や計算機科学者でないと扱いが難しい。命題論理は基本的な論理であり、三段論法を定式化したものと言える。推論エンジンは論理を使って、規則やデータを処理し、新たな情報を生成する。

推論エンジンには、バッチ式と対話式の2つの動作方式がある。バッチ式では、当初から処理すべきデータが揃っている。利用者から見れば通常のプログラムと同じように動作し、データを入力すると即座に結果が得られ、推論過程は見えない。対話式は、問題があまりにも複雑など、運用開始時点で開発者が利用者から必要な全ての知識を集められなかった場合に必要となった。ソフトウェアは問題を解く方法を「考案」しなければならないので、利用者に欠けているデータを要求し、徐々にかつ可能な限り素早くゴールに到達する。結果は、専門家が誘導した会話の影響を受ける。対話を誘導するため、エンジンには「前向き連鎖」、「後向き連鎖」、あるいはそれらの混合といったいくつかの技法が備わっている。前向き連鎖は、解法を全く知らない専門家が行う質問であり、次第に解法をつきとめていく（例えば、障害診断）。後向き連鎖は、エンジンが結論の候補を持っている場合である（例えば、これは大丈夫か?、何らかの危険がありそうだが、そのレベルは? など）。可能な限り素早く解法を見つけられそうな結論から開始する。混合型の連鎖では、エンジンには結論の候補があるが、それだけでは十分ではない。その場合、直前の利用者の応答から前向き連鎖で推論して可能性のある候補を洗い出す。したがって、次の質問に利用者が答える前にその答えを推論済みであることが多い。

論理を使った場合の非常に興味深い点は、この種のソフトウェアが利用者に対して明確に「何をしているか」（Why）と「どう推論したのか」（How）を説明できる点である。さらに論理を使ったエキスパートシステムは、利用者の提供する情報や知識ベースにおける矛盾を検出できることが多く、明確にそれを指摘できる。

## 利点

エキスパートシステムは通常のプログラムと比較したとき、以下のような利点がある。

* 規則を自然言語的に表現できるため、専門家や利用者が直接エキスパートシステムに知識を入力でき、開発期間が短縮できる。
* 知識を規則の形で知識ベースに蓄えるため、知識がどれだけ多くても推論エンジンのプログラミングには影響しない。
* データベースと同程度の信頼性を有する。
* 規則の追加・修正・削除が容易である。
* 推論の根拠を説明できるので、利用者はエキスパートシステムに詰め込まれた専門家の知識を学習することができる。
* 専門家の知識は、その人物の死や引退と共に消えてしまうが、エキスパートシステムに蓄えることで半永久的に記録することができる。
* 情報システムにおける組合せ爆発問題も、エキスパートシステムで解決できることがある。障害診断システム、複雑な問題の意思決定支援、教育ソフトなど。

## 欠点

エキスパートシステムは、その原理（知識工学）が70年前からあったにもかかわらず、成功は限定的だった。専門家の知識は定式化できないことが多く、定式化してみると規則間で矛盾していることも多い。推論エンジンの能力も低いことが多く、結果としてエキスパートシステムを実動させてみると満足な結果が得られず、プロジェクトが中止になることも多かった。正しい開発方法論でこの問題を緩和できる。専門家にインタビューして、ひとつずつ規則を追加していき、同時にその専門家にエキスパートシステムの実行結果を示すことで規則群の一貫性を保つソフトウェアが存在する。それにより、専門家と利用者がソフトウェアの品質を完成前にチェックできる。

## エキスパートシステムが解決する問題のタイプ
一般に、エキスパートシステムが解決する問題は、人間のエキスパート(専門家)が行うことをなぞって解決できるものである。それは、たとえば医学や他の専門家などである。そのような問題領域(一般に非常に狭い領域、たとえば「十代の皮膚病の診断」など)の実際の専門家から問題領域に関する**経験則**を聞き出す。その手法はシステム開発者が直接聞き取り調査する場合もあるし、評価システムを専門家に使ってもらい、ルールを専門家自身に追加してもらう場合もある。一般にエキスパートシステムは、従来のアルゴリズムで符号化することができるような唯一の「正しい」解決策がない問題のために使われる。データをソートするとか、グラフの最短経路を見つけるといった問題にはもっと簡単な解法があるので、エキスパートシステムを使ってそれらを解決しようとする人はいないだろう。

単純なシステムはデータを評価するのに単純な二値論理を使うが、より洗練されたシステムはファジィ論理のような方法を使って、実世界の不確定要素をある程度考慮した評価を実行する場合がある。そのような精巧化は発展しづらく、まだ不完全である。

エキスパートシステムは、組み合わせが膨大となるような領域でうまく機能する。
* 高度な対話・会話型アプリケーション。自動音声応答装置、音声サーバ、人工無脳
* 障害診断、医療診断
* 複雑系、プロセス制御、対話型マニュアルなどでの意思決定支援
* 教育ソフトウェア
* 機械やシステムの論理シミュレーション
* ナレッジマネジメント
* 常に変化し続けるソフトウェア

エキスパートシステムと伝統的な問題解決プログラムの間の重大な違いは、問題に関する専門知識がコード化される方法である。伝統的なアプリケーションの中では、問題に関する専門知識はプログラムとデータ構造の両方で符号化される。エキスパートシステム的手法では、関連した専門知識は全てデータ構造だけに符号化され、プログラムの中にはない。いくつかの利点はこのような構成手法によるものである。

## 応用例
会計、医療、プロセス制御、金融サービス、製造業、人事などの領域向けのエキスパートシステムが設計されている。一般にその領域はかなり複雑で、より単純で伝統的なアルゴリズムでは適切な解決策を提供できない。成功を収めるエキスパートシステムは、一連の技術的手続きと開発に開発者と問題領域の専門家が関わることに依存している。エキスパートシステムは決定的な答えを提供しないが、確率的な推奨される解決策を提供する。

金融業におけるエキスパートシステムの応用例として、住宅ローンのエキスパートシステムがある。住宅ローンについては従業員のコストが問題となっていて、比較的小額のローンで利益を出すことが難しかった。住宅ローンには他のローンにはない法律や規則があり、エキスパートシステムを導入することで住宅ローンの処理を最適化・標準化できるのではないかと期待された。また、様々な市場での推奨取引を提示するエキスパートシステムもある。市場は様々な変動要素や個人の感情が絡み合って成り立っており、決定論的に見ることは不可能なため、経験則とシミュレーション・データに基づくエキスパートシステムが使われている。

エキスパートシステムの他の実用例は、1970年代と1980年代のコンピュータゲームに見られる。これは今日、単にAIと呼ばれているものである。例えば、コンピュータ野球ゲームである  と (訳注：いずれもメジャーリーグの監督の名を冠した野球ゲーム)は、それら二人の野球監督の試合戦略の非常に詳細なシミュレーションを行っていた。人間がコンピュータと対戦したときに、コンピュータはアール・ウィーバーやトニー・ラルーサのエキスパートシステムに質問して次にとるべき戦略を決定していた。ゲームとしての偶発性(いつ牽制球を投げるかなど)も彼らが提供した確率に基づいて決められた。今ではエキスパートシステムなどとは呼ばず、単に「そのゲームのAIは対戦相手の監督の戦略を提供した」と紹介するだろう。

2007年、Akinatorがオンラインで公開され、的中精度の高さが話題を呼ぶ。判断アルゴリズムの詳細は非公開であるが、画面に表示された質問に対して利用者が行う回答を、回答パターンを記録した知識データベースに照らし合わせて利用者がイメージしている人物やキャラクターの名前を的中させるシステムである。

2008年、バンダイから発売中の携帯玩具『未来予測機 ミライスコープ』は、アメリカの心理学者J.M.デュセイが開発したエゴグラムという性格分析法に基づいた50の質問に答えることでプレイヤーを236タイプの性格に分類し、将来の生活や行動を予測する。ある種の簡単なエキスパートシステムといえよう。

新たな用途として、コンピュータプログラムの自動生成がある。アメリカ空軍の支援で開発されたエキスパートシステムに基づくアプリケーション hprcARCHITECT があり、様々なプロセッサ技術（FPGA、GPU、マルチコア）のシステム向けのプログラムを専門知識がなくても自動生成してくれる。

## 知識工学

エキスパートシステムの開発・構築・保守を扱う工学分野を「知識工学」と呼ぶ。知識工学は「知識をコンピュータシステムに組み込むことで、高度な専門家の知識を必要とするような複雑な問題を解くことを目的とした学問分野」である。

エキスパートシステムに関わる人々は3者に分類される。まず、問題解決の支援を得るためにシステムを利用するエンドユーザーである。システムの構築と保守の局面では、知識ベースに格納すべき知識を提供する問題領域の専門家と、その知識の表現の決定を補助するナレッジエンジニアが関わる。ナレッジエンジニアはまた、問題解決に使用する推論技法を決定する。

## 特筆すべきエキスパートシステム
* Dendral
* Mycin
* CLIPS、Jess（CLIPSのjava版）
* Prolog
* Akinator - エンタメへの応用例
* イージスシステム

## 脚注

### 注釈

### 出典

## 参考文献
### 教科書

* 
* 
* 
* 
* 
* 

### 歴史

* 
* 
* 
* 
* 
* 

### その他

* 
* 

## 関連項目
* 人工知能
* ニューラルネットワーク
* ファジィ論理
* プロダクションシステム
* ヒューリスティック
* 機械学習
* 第五世代コンピュータ
* セルフサービスソフトウェア
* 事例ベース推論

## 外部リンク
* 
* Expert System tutorial on Code Project