推論エンジン
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/03/28 04:51 UTC 版)
![]() |
この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。(2023年3月)
|
推論エンジン(すいろんエンジン、英語: inference engine)とは、知識ベースから答えを導き出す仕組みである。エキスパートシステムの頭脳であり、知識ベース内の情報を元に推論を実行する方法を提供し、結論を導く。
アーキテクチャ
推論エンジンを独立したソフトウェアコンポーネントとして分離させたのは、プロダクションシステムのアーキテクチャが最初である。このアーキテクチャは、データ格納部あるいはワーキングメモリを独立させて、問題に関する事実や表明を表す記号列のデータベースとする。また、プログラム本体を表す推論規則群を別に独立させ、その規則を実行するための推論エンジンを設ける。推論エンジンは、その時点のデータ格納部の内容に対してどの推論規則を適用すべきかを選択する。規則選択の制御戦略は「衝突の解決; conflict resolution」と呼ばれる。
推論エンジンは主に以下の3つの部分から構成される。
- インタプリタ。対応する基本のルールを適用することによって、インタプリタは指定された課題を実行する。
- スケジューラー。アイテム優先度または課題に関する他の標準を考慮して、推論規則を適用したときの効果を見積もることにより、スケジューラーは課題に対する制御を行う。
- 一貫性保持部。一貫性保持部は得られた解決策に対して一貫した表現をするよう務める。
認知-行動サイクル
推論エンジンは、3つの動作段階(規則のマッチング、規則の選択、規則の実行)を持つ有限状態機械として表現できる。
規則のマッチングの段階では、推論エンジンはデータ格納部のその時点の内容を満足する全ての規則を探し出す。規則が典型的な「条件-行動」形式である場合、条件部とワーキングメモリの内容のマッチングをすることを意味する。マッチングが見つかった規則は全て実行候補となり、これらを「衝突集合; conflict set」と呼ぶ。衝突集合では、規則の条件部が複数の事実とマッチした場合、1つの規則が複数回出現することもある。規則とそれにマッチしたデータの部分集合の組合せを、規則のインスタンスと呼ぶ。
多くの場合、データが非常に膨大だったり、要求される性能が厳しいため、衝突集合を求める処理はそれほど単純な問題ではない。初期の推論エンジンの研究では規則とデータのマッチングに関するアルゴリズムの追求が盛んであった。チャールズ・フォーギーが開発したReteアルゴリズムがそのような例として挙げられる。これは OPS5 などのプロダクションシステムで使われた。Daniel P. Miranker は Rete アルゴリズムを改良した TREAT を開発した。これは、関係データベースの最適化技法を取り入れたものである。
衝突集合が得られると、推論エンジンは第二段階として規則選択を行う。この段階では、実際にどの規則を実行すべきかの判断に一種の選択戦略を適用する。この選択戦略はエンジン内にコードとして備わっている場合もあるし、モデルの一部として外部から指定される場合もある。人工知能の中では、この選択戦略をアレン・ニューウェルの Unified theory of cognition に倣ってヒューリスティックスと呼ぶことが多い。
例えば OPS5 では、プログラマは2つの衝突の解決戦略のいずれかを選択可能である。LEX 戦略はインスタンスをデータに付与された時刻タグが現在時刻に近い順に並べる。すなわち、最近実行した規則にマッチしたデータを持つインスタンスが高い優先順位となる。この順序付けではさらに、規則の条件部の複雑さによってソートする。MEA 戦略は、規則の最初の条件にマッチするワーキングメモリ要素の新しさを重視する(特に手段目標解析でよく使われるヒューリスティック)。
さらに選択したインスタンスが第三段階に渡され、その規則が実行される。推論エンジンは選択された規則をインスタンス内のデータを引数として実行(あるいは発火)する。一般に規則の右辺にあるアクションはデータ格納部を変化させるが、それ以外に推論エンジン外の処理を変化させる場合もある(ユーザーとやり取りしたり、外部プログラムを呼び出したりなど)。データ格納部は一般に規則の実行によって更新されるので、次のサイクルでデータにマッチする規則の集合は変化する。
以上の段階を経て、推論エンジンは次のサイクルの第一段階を開始可能な状態となる。このようなサイクルを「認知-行動サイクル」と呼ぶ。推論エンジンの停止条件としては、指定された回数のサイクルを実行したか、ユーザーが停止を要求したか、サイクルの第一段階でマッチする規則が無い状態になった場合がある。
データ駆動処理と手続き的制御
推論エンジンの制御はデータ格納部の状態を頻繁に評価することに基づいており、静的なプログラムの制御構造には依存しない。このような処理を「データ駆動」あるいは「パターン誘導」と言い、一般的な手続き的制御と対比される。規則はデータを介してのみ相互にやり取りが発生するのであって、一般的なプログラミング言語では手続きや関数は明示的に互いに呼び出しあう。命令とは異なり、規則は逐次的に実行されず、規則群だけを見てもどれが次に実行されるかは分からず、推論エンジンがいつ停止するかもわからない。
手続き的処理では、問題領域についての知識は制御構造の中に命令としてちりばめられるが、推論エンジンでは知識(規則)と制御(推論エンジン)がより明確に分離されている。オブジェクト指向プログラミングは、それらの中間レベルの分離がなされていると言える。
関連項目
外部リンク
いずれも英文
推論エンジン
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/03/30 05:03 UTC 版)
「エキスパートシステム」の記事における「推論エンジン」の解説
推論エンジンは、規則群を使って推論を行うプログラムである。推論を行うため、論理に基づいている。推論エンジンが使う論理としては、命題論理、一階または高階の述語論理、認識論理、様相論理、時相論理、ファジィ論理などがある。命題論理以外の論理は複雑であり、数学者や論理学者や計算機科学者でないと扱いが難しい。命題論理は基本的な論理であり、三段論法を定式化したものと言える。推論エンジンは論理を使って、規則やデータを処理し、新たな情報を生成する。 推論エンジンには、バッチ式と対話式の2つの動作方式がある。バッチ式では、当初から処理すべきデータが揃っている。利用者から見れば通常のプログラムと同じように動作し、データを入力すると即座に結果が得られ、推論過程は見えない。対話式は、問題があまりにも複雑など、運用開始時点で開発者が利用者から必要な全ての知識を集められなかった場合に必要となった。ソフトウェアは問題を解く方法を「考案」しなければならないので、利用者に欠けているデータを要求し、徐々にかつ可能な限り素早くゴールに到達する。結果は、専門家が誘導した会話の影響を受ける。対話を誘導するため、エンジンには「前向き連鎖」、「後向き連鎖」、あるいはそれらの混合といったいくつかの技法が備わっている。前向き連鎖は、解法を全く知らない専門家が行う質問であり、次第に解法をつきとめていく(例えば、障害診断)。後向き連鎖は、エンジンが結論の候補を持っている場合である(例えば、これは大丈夫か?、何らかの危険がありそうだが、そのレベルは? など)。可能な限り素早く解法を見つけられそうな結論から開始する。混合型の連鎖では、エンジンには結論の候補があるが、それだけでは十分ではない。その場合、直前の利用者の応答から前向き連鎖で推論して可能性のある候補を洗い出す。したがって、次の質問に利用者が答える前にその答えを推論済みであることが多い。 論理を使った場合の非常に興味深い点は、この種のソフトウェアが利用者に対して明確に「何をしているか」(Why)と「どう推論したのか」(How)を説明できる点である。さらに論理を使ったエキスパートシステムは、利用者の提供する情報や知識ベースにおける矛盾を検出できることが多く、明確にそれを指摘できる。
※この「推論エンジン」の解説は、「エキスパートシステム」の解説の一部です。
「推論エンジン」を含む「エキスパートシステム」の記事については、「エキスパートシステム」の概要を参照ください。
- 推論エンジンのページへのリンク