Symbolic AI
記号AI(GOFAI)は、人間が理解できる記号を明示的なルールや論理に基づいて推論します。エキスパートシステムの仕組み、その限界、ニューロシンボリックAIについて解説します。
記号AIは、bird、penguin、「ソクラテスは人間である」など、人間が読める記号で知識を表現し、明示的なルール、論理、探索を使って推論する人工知能(AI)のアプローチです。1956年のダートマス・ワークショップから1980年代までAI研究を主導し、哲学者のJohn Haugelandは1985年にこれを「古き良きAI」(GOFAI)と名付けました。記号システムが導く結論はすべて、人が書いて読めるルールにたどることができるため監査可能です。一方、知識はすべて手作業で記述する必要があるため、スケールさせることが困難です。
記号AIの仕組み#
記号システムは2つの部分で構成されます。知識ベースには、「ソクラテスは人間である」という事実や、「すべての人間は死ぬ」というルールが、述語論理、if-then形式のプロダクションルール、ナレッジグラフなどの形式言語で格納されます。推論エンジンはルールを適用し、保存されていない事実(「ソクラテスは死ぬ」)を導き出します。前向き推論は既知の事実から始め、条件を満たすルールを新しい事実が出なくなるまで適用します。後ろ向き推論は目標から始め、それを証明するために必要な事実をさかのぼります。この方式は論理プログラミング言語Prologに組み込まれています。
このアプローチの理論的基盤となるのは、記号操作が汎用知能に必要十分であるとする、Allen NewellとHerbert Simonが1976年に提唱した物理記号システム仮説です。前向き推論エンジンは、標準的なPythonで数行で実装できます。
# Knowledge base: IF every premise is a known fact THEN add the conclusion
rules = [
({"has_feathers", "lays_eggs"}, "bird"),
({"bird", "cannot_fly", "swims"}, "penguin"),
]
facts = {"has_feathers", "lays_eggs", "cannot_fly", "swims"}
# Forward chaining: keep firing rules until no new fact appears
changed = True
while changed:
changed = False
for premises, conclusion in rules:
if premises <= facts and conclusion not in facts:
facts.add(conclusion)
changed = True
print(f"{conclusion} <- {sorted(premises)}")エンジンは最初に bird <- ['has_feathers', 'lays_eggs'] を出力し、次に penguin <- ['bird', 'cannot_fly', 'swims'] を出力します。2つ目のルールが適用されるのは、最初のルールが bird を追加した場合だけです。出力される各行は結論が成り立つ理由を完全に説明しており、ニューラルネットワーク上で再構成を目指す説明可能なAI(XAI)手法の推論トレースに相当します。
エキスパートシステム#
記号AIは1970年代から1980年代にかけて、エキスパートシステムとして産業界に広まりました。StanfordのMYCINは、医師から聞き取った約600のルールをもとに、重篤な感染症の原因菌を特定して抗生物質を推奨しました。Digital Equipment CorporationのXCONは、VAXコンピューターの顧客注文を構成しました。エキスパートシステムは、基本的なエンジンにナレッジエンジニアを組み合わせます。ナレッジエンジニアは分野の専門家に聞き取りを行い、知識をルールとして記述します。また、説明機能は各回答の根拠となったルールを再現します。
聞き取りの工程がボトルネックになりました。専門家は直感をルールとして明確に表現するのが難しく、大規模なルールベースは想定外の事例で機能しなくなり、システムはデータから学習できません。常識を手作業で記述するため1984年に始まったDoug LenatのCycプロジェクトは、この問題に数十年を費やしてきました。1980年代後半にエキスパートシステムへの予算が縮小すると、この分野は2度目の「AIの冬」に入りました。
記号AIと統計的AI#
統計的AIは例からパターンを学習する手法であり、現代の機械学習(ML)やディープラーニング(DL)の基盤です。2つのパラダイムは、それぞれ異なる状況で問題に直面します。
- 記号AI: 正確で透明性が高く、学習データがなくても利用できるため、算術、計画、規制、形式的証明に適しています。生の知覚データは扱えません。ピクセル値から猫を認識するルールを人が記述するのは不可能であり、ルールで想定していない入力に対しても機能しなくなります。
- 統計的AI: データから知覚と言語を直接学習し、ノイズにも対応できますが、大規模なデータセットが必要で、判断過程を検証しにくいという課題があります。また、言語モデルは流暢でも誤った回答、いわゆるハルシネーションを生成することがあります。
現在の記号AIの活用分野#
- ルールエンジンとコンプライアンス: 税務ソフトウェアや業務ルールエンジンは、規制を明示的なルールとして記述するため、すべての結果を根拠となった条項までたどれます。
- 計画とスケジューリング: 自動計画システムは、行動、前提条件、効果を記号で表したものを探索し、物流、工場業務、宇宙船の運用をスケジュールします。
- 形式検証: MicrosoftのZ3などのSATソルバーやSMTソルバーは、チップやソフトウェアの特性を証明します。Leanなどの証明支援系は、数学的証明を段階的に検証します。
- ナレッジグラフ: 検索エンジンやWikidataは、クエリでたどれるエンティティと関係として、数十億の事実を格納します。
ニューロシンボリックAI#
ニューロシンボリックAIは、2つのパラダイムを組み合わせます。ニューラルネットワークが知覚とパターン認識を担い、記号コンポーネントがルール、制約、厳密な推論を担います。関数呼び出しを通じて計算機、SQLデータベース、コードインタープリターを呼び出す言語モデルも、同じ役割分担を利用します。ビジョンパイプラインでは、Ultralytics YOLO26などの検出器がピクセルを記号、つまり検出した物体のクラス名に変換し、通常のルールがそれらを使って推論します。
from ultralytics import YOLO
# ニューラル知覚: 物体を検出し、そのクラス名を記号的な事実として保持します
model = YOLO("yolo26n.pt")
results = model("https://ultralytics.com/images/bus.jpg")
result = results[0]
facts = {result.names[int(c)] for c in result.boxes.cls}
# 記号推論: バス AND 人が存在する場合 THEN アラートを出します
if {"bus", "person"} <= facts:
print("Rule fired: pedestrians next to a bus")ルールを変更すると、再学習なしでシステムの動作がすぐに変わります。Google DeepMindのAlphaGeometryも、数学に同じ役割分担を適用します。ニューラル言語モデルが補助的な作図を提案し、記号演繹エンジンがそこから結果を証明します。両者を組み合わせたシステムは、2024年のNature論文で国際数学オリンピックの幾何問題30問中25問を解きました。










