人工知能の分野では、推論エンジンは、知識ベースに論理ルールを適用して新しい情報を推論するインテリジェントシステムのソフトウェアコンポーネントです。最初の推論エンジンはエキスパートシステムのコンポーネントでした。典型的なエキスパートシステムは、知識ベースと推論エンジンで構成されていました。知識ベースには、世界に関する事実が格納されていました。推論エンジンは、知識ベースに論理ルールを適用して新しい知識を推論しました。知識ベースの新しい事実ごとに推論エンジンで追加のルールがトリガーされる可能性があるため、このプロセスは繰り返されます。推論エンジンは、主に特殊ルールモードまたは事実モードのいずれかで動作します。順方向連鎖と逆方向連鎖です。順方向連鎖は既知の事実から始まり、新しい事実を主張します。逆方向連鎖は目標から始まり、目標を達成するために主張しなければならない事実を決定するために逆方向に動作します。[ 1 ]
さらに、「推論」の概念は、訓練されたニューラルネットワークが予測や決定を生成するプロセスを含むように拡張されました。この文脈では、「推論エンジン」とは、これらの操作を実行するシステムの特定の部分、あるいはハードウェアを指す場合があります。この種の推論は、画像認識、自然言語処理、自動運転車など、さまざまなアプリケーションで重要な役割を果たします。これらのアプリケーションにおける推論フェーズは、通常、大量のデータ入力とリアルタイム処理の要件によって特徴付けられます。
推論エンジンが使用する論理は、通常、IF-THEN ルールとして表現されます。このようなルールの一般的な形式は、IF <論理式> THEN <論理式>です。エキスパート システムや推論エンジンの開発以前は、人工知能の研究者は、一階述語論理のより完全な実装を提供する、より強力な定理証明環境に焦点を当てていました。たとえば、全称量化(すべての X に対して、ある命題が真である)や存在量化(ある X が存在して、ある命題が真である)を含む一般的な命題などです。研究者が発見したのは、これらの定理証明環境の強力さが同時に欠点でもあるということです。1965 年当時、終了までに不確定時間、あるいは無限時間を要する論理式を作成することは非常に容易でした。たとえば、全称量化では、すべての自然数の集合のような無限集合に対する命題を作成するのが一般的です。このような命題は、数学的証明において完全に合理的で、必要不可欠なものですが、コンピュータ上で実行される自動定理証明器に含めると、コンピュータが無限ループに陥る可能性があります。 IF-THEN文(論理学者がモーダス・ポネンスと呼ぶもの)に焦点を当てることで、開発者は依然として論理を表現するための非常に強力な汎用メカニズムを得ることができ、しかも計算リソースを効率的に利用できる。さらに、人間は複雑な知識を保存する際にもIF-THEN表現を好む傾向があることを示す心理学的研究もある。[ 2 ]
入門的な論理学の教科書でよく使われるモーダス・ポネンスの簡単な例は、「あなたが人間ならば、あなたは死ぬ運命にある」です。これは擬似コードで次のように表すことができます。
ルール1:人間(x) => 死すべき存在(x)
推論エンジンでこのルールがどのように使用されるかの簡単な例は次のとおりです。前方連鎖では、推論エンジンは知識ベース内で Human(x) に一致する事実をすべて見つけ、見つかった事実ごとに新しい情報 Mortal(x) を知識ベースに追加します。したがって、人間である Socrates というオブジェクトが見つかった場合、Socrates は死ぬ運命にあると推論します。後方連鎖では、システムに目標が与えられます。たとえば、Socrates は死ぬ運命にあるかという質問に答える、といった具合です。システムは知識ベースを検索して Socrates が人間であるかどうかを判断し、そうであれば、彼も死ぬ運命にあると主張します。ただし、後方連鎖では、推論エンジンをユーザーインターフェイスと統合するのが一般的な手法でした。このようにして、システムは単に自動化されるのではなく、対話型になります。この簡単な例では、システムに Socrates が死ぬ運命にあるかどうかという質問に答えるという目標が与えられ、まだ彼が人間かどうかわからない場合、ユーザーに「Socrates は人間ですか?」と尋ねるウィンドウが生成されます。そして、その情報を適切に活用するだろう。
推論エンジンとユーザーインターフェースを統合するというこの革新は、エキスパートシステムの初期の2番目の進歩、すなわち説明機能につながりました。知識をコードではなくルールとして明示的に表現することで、リアルタイムと事後の両方でユーザーに説明を生成できるようになりました。たとえば、システムがユーザーに「ソクラテスは人間ですか?」と尋ねた場合、ユーザーはなぜその質問をされているのか疑問に思うかもしれません。システムはルールの連鎖を使用して、なぜ現在その知識を確認しようとしているのかを説明します。つまり、ソクラテスが死ぬかどうかを判断する必要があり、そのためには彼が人間かどうかを判断する必要があるということです。当初、これらの説明は、開発者がシステムをデバッグする際に扱う標準的なデバッグ情報とそれほど違いはありませんでした。しかし、コンピュータ形式ではなく自然言語を使用して質問や説明を尋ね、理解し、生成するために自然言語技術を利用する研究が活発に行われていました。[ 3 ]
推論エンジンは、ルールのマッチング、ルールの選択、ルールの実行という3つのステップを順番に繰り返します。ルールの実行によって、知識ベースに新しい事実や目標が追加されることが多く、それによってサイクルが繰り返されます。このサイクルは、マッチングできる新しいルールがなくなるまで続きます。
最初のステップであるルール照合では、推論エンジンは知識ベースの現在の内容によってトリガーされるすべてのルールを見つけます。順方向推論では、エンジンは前提(左辺)が知識ベース内の何らかの事実と一致するルールを探します。逆方向推論では、エンジンは現在の目標のいずれかを満たすことができる前提を探します。
2 番目のステップであるルールの選択では、推論エンジンは一致したさまざまなルールに優先順位を付けて、それらを実行する順序を決定します。最後のステップであるルールの実行では、エンジンはステップ 2 で決定された順序で一致した各ルールを実行し、その後、ステップ 1 に戻ります。このサイクルは、新しいルールが一致しなくなるまで続きます。[ 4 ]
初期の推論エンジンは主に前方連鎖に焦点を当てていました。これらのシステムは通常、Lispプログラミング言語で実装されていました。Lisp は記号操作の強力な機能により、初期の AI 研究でよく使われるプラットフォームでした。また、インタプリタ言語であるため、複雑なプログラムのデバッグに適した生産的な開発環境を提供していました。これらの利点の必然的な結果として、Lisp プログラムは、当時のCなどのコンパイル言語よりも遅く、堅牢性に欠ける傾向がありました。初期の頃の一般的なアプローチは、エキスパート システム アプリケーションを取り上げ、そのシステムで使用されている推論エンジンを再パッケージ化して、他の研究者が他のエキスパート システムの開発に使用できる再利用可能なツールとして提供することでした。たとえば、MYCIN は医療診断のための初期のエキスパート システムであり、EMYCIN は MYCIN から拡張され、他の研究者が利用できるようにされた推論エンジンでした。[ 1 ]
エキスパートシステムが研究プロトタイプから実用システムへと移行するにつれて、速度や堅牢性といった問題に重点が置かれるようになった。最初期かつ最も普及した順方向連鎖エンジンの一つがOPS5であり、これはルール発火の効率を最適化するためにReteアルゴリズムを使用していた。開発されたもう一つの非常に普及した技術は、 Prolog論理プログラミング言語である。Prologは主に逆方向連鎖に焦点を当てており、効率と堅牢性のための様々な商用バージョンと最適化も備えていた。[ 5 ]
エキスパートシステムがビジネス界から大きな関心を集めるにつれ、多くの企業が、著名なAI研究者によって設立または指導され、推論エンジンの製品版を開発しました。例えば、Intellicorpは当初、エドワード・ファイゲンバウムによって指導されていました。これらの推論エンジン製品は、当初はLispで開発されることが多かったのですが、より手頃な価格で商業的に実現可能なプラットフォームへの需要が高まり、最終的にはパーソナルコンピュータプラットフォームが非常に普及しました。
ClipsRulesとRefPerSys(CAIA [ 6 ]とJacques Pitratの研究に触発されたもの)。Frama -C静的ソースコードアナライザーも推論エンジン技術の一部を使用しています。