あなたは確かに「サイエンスフィクション」について話しているのではありませんが、ソフトウェアエンジニアが通常さらされている標準的なものから多くのことが外れています。私は過去8年間、ルールエンジンを構築して使用し、小売業界の半構造化データを推論しました。
データに対して推論を行うことは、十分に確立された分野です。このフィールドに関連する問題には、基本的に4つのクラスがあります。
- 知識の習得(人々の頭からルールをコード/ルールに取り入れること)
- 知識表現「KR」(データとルールを表現する方法)
- 効率的なパターンマッチング(多数のファクト/データに対して大きなルールセットを形成するルールのマッチング)
- 推論/推論(ルールの一致からさらに結論を引き出す、つまりルールがより多くのルールをトリガーする)
知識の習得については、次を参照してください。
リップルダウンルールとディシジョンツリーは、長い道のりを進み、理解しやすいものです。あるいは、広大なフィールドの機械学習は、データからモデルを導出するためのさまざまなアプローチを提供します。
知識表現については、RDFとOwl、および程度は低いが概念グラフを参照してください。表現力という点では、RDFとCGはほぼ同等です。両方の背後にある基本的な概念は、データのシリアル化に依存しないグラフ(トリプル)表現です。
パターンマッチングの場合、古典的なアルゴリズムはCharlesForgyによるReteです。
推論には、前向き連鎖と後向き連鎖の2つの典型的な戦略があります。前向き連鎖は、次のようなルールセットを介して行われます。
データ設定:
Rule 1: If A Then B
Rule 2: If B Then C
Facts: A
実行:
Do {
Newfacts = Eval(RuleSet, Facts)
Facts = Facts + Newfacts
} while (NewFacts.Count > 0)
データAをこの小さなアルゴリズムにフィードすると、ルールベースのおかげで、データからファクトCを「推測」(発見)できます。特に非単調推論(事実を追加するだけでなく、事実を変更または削除し、推論に矛盾やループを引き起こす可能性がある)などの周りには、推論に関する多くの落とし穴があることに注意してください。
ある種の推論を行うための単純で素朴な方法は、データベースを使用し、結合を使用してファクト(ステートメント)を照合することです。一部のアプリケーションでは、これで十分な場合があります。推論に関しては、複雑なテクノロジーやそれほど存在しないテクノロジーの世界に夢中になりがちです。単純にする。