第3回:LLM×ナレッジグラフの境界を探る:事実(Fact)と類推(Analogy)の境界 —— 二段階ルーティングの実装
1.はじめに:後半戦の幕開け —— 既存エンジンを超えて
前回(第2回)では、長文クエリの丸ごとベクトル化が引き起こす「エンベディングの罠」と、過剰な文字列正規化による「正規化の罠」を特定し、マルチエントリーポイント検索によって推論成功率を6%から69%へと劇的に改善しました。これにより、ARIAエンジンの「視覚」と「聴覚」は回復し、グラフの海から正しい知識を引き出せるレベルに到達しました。
しかしです。『これにて、一件落着』とはならないのが面白いところ。依然として壁として立ちはだかるのが、「Threshold Wall(閾値の壁)」です。マルチエントリーポイント化後も、類似度閾値を0.7に設定した場合、パスが発見できないケースが多発していました。前回の記事の最後で、「この壁は単なる調整不足なのか、それとも真陰性なのか」と問いかけましたが、本稿(第3回)ではこの問いに真っ向から挑みます。
ここからが、ARIA-Forgeプロジェクトの後半戦です。第1回・第2回が「データと入力の洗練」(Phase 1〜4)だったのに対し、第3回以降は 「推論アーキテクチャの独自進化」(Phase 5〜7)へと舞台を移します。既存のARIAエンジンの枠組みを超え、独自の推論ロジックを実装していく、よりチャレンジングなフェーズの始まりです。
本稿では、Phase 5「二段階ルーティング(Two-Stage Routing)」の設計思想と実装、そしてその検証結果について詳しく述べます。
2.Threshold Wall のジレンマ —— 厳しすぎても、緩すぎてもダメ
Phase 4 までのARIAエンジンには、検索の閾値(Threshold)というたった一つのパラメータしかありませんでした。この単一閾値に、検索の「精度」と「網羅性」という相反する要求を同時に背負わせていたのです。
| 閾値 | メリット | デメリット |
|---|---|---|
| 0.7(高厳格) | 信頼性の高いノードだけを検索起点にできる | パス未発見(False Negative)が多発 |
| 0.5(低厳格) | 広範囲のノードを拾えるためパス発見率が高い | ハルシネーション混入リスクが増大 |
このジレンマの根本原因は、「検索の入り口」と「推論の出口」を同じ閾値で制御しようとしていたことにあります。本来、グラフのどのノードを探索起点とするか(検索の入り口)と、そこから得られたパスを事実として信頼してよいか(推論の出口)は、別の判断軸であるべきです。しかし、単一閾値の設計では、この2つを区別できませんでした。
そこで着想したのが、「両方使えばよい。ただし、区別して」という発想の転換です。閾値0.7で探して見つからなければ、閾値0.5で再挑戦する。そして、それぞれの結果に「事実」と「仮説」という異なるラベルを貼る。これが二段階ルーティングの核心的なアイデアです。
3.技術的ブレイクスルー:二段階ルーティングの設計
Phase 5 では、推論のメインパイプラインを抜本的に再設計し、以下の3つのステージからなる検索・評価パイプラインを構築しました。
forward_prediction(synthesis_inputs)
├─ Stage 1: PRIMARY SEARCH @ threshold=0.7
│ ├─ マルチエントリーポイント + embedding search
│ ├─ パス発見 → forward_direct_chain → facts[] に格納
│ └─ パスなし → fact_absent = True
│
├─ Stage 2: TRAP DETECTION
│ └─ fact_absent == True → not_found = True
│
└─ Stage 3: ANALOGY FALLBACK @ threshold=0.5
├─ embedding similarity search @ 0.5
├─ 類推発見 → forward_transfer_chain → hypotheses[] に格納
└─ 未発見 → hypotheses=[] (True Negative 確定)
3-1. Stage 1 — Primary Search(事実発見)
ここが分かりにくいポイントなので、丁寧に説明します。
Stage 1 では、2段階の処理を行います。第1段階はノード検索です。クエリから抽出したキーワード(例:「MgO」「sintering」)を embedding ベクトルに変換し、グラフ内の全ノードの embedding とのコサイン類似度を計算します。類似度が0.7以上のノードだけを「探索起点(エントリーポイント)」として選出します。ここまでは、あくまで単語レベルの類似度判定です。
第2段階はパス発見です。選ばれた起点ノードから、グラフのエッジ(因果関係)をたどってネットワーク上の経路探索(トラバース)を実行します。起点ノードから制限ホップ数(MaxHops=2)以内に到達できる別のノード群が「関連知識」として収集され、因果の鎖(パス)として出力されます。つまり、Stage 1 の最終的な判定基準は「起点ノードの類似度が0.7以上」かつ「そこからグラフ上でパスが発見できること」の AND条件なのです。
パスが発見された場合、その結果は facts[](事実)として格納されます。これは「類似度0.7以上の確かなノードから出発し、グラフ上の実在するエッジをたどって到達した結論」という意味で、高確信度の直接的推論と位置づけられます。
3-2. Stage 2 — Trap Detection(トラップ検知)
Stage 1 でパスが発見されなかった場合、それは単なるエラーではありません。fact_absent = True というフラグを立てて、「現在の知識グラフには閾値0.7を満たす確かな事実が存在しない」という情報をシステムに伝えます。これが次の Stage 3 へのトリガーとなります。
3-3. Stage 3 — Analogy Fallback(類推フォールバック)
Stage 1 で事実が不在だった場合にのみ自律起動する、いわば非常用の副次的推論ルートです。閾値を0.5に緩和し、類似度は低いが関連性のあるノードを起点として再検索します。ここで得られた結果は hypotheses[](仮説)として格納され、推論の出所が「転移学習(transfer_learning)」であること、および類似度スコアが明示されます。
3-4. 出力スキーマの構造分離 —— 「事実」と「仮説」を混ぜない
この設計で最も重要なのは、出力データの構造的分離です。
私が考える原著ARIA推論の最大の魅力は、「グラフのノードから辿った事実(facts)」なのか「優雅な劣化による推論(hypotheses)」なのかを明確に区別して出力できることです。推論エンジンに単にLLMを組み込むだけでは、この区別があいまいとなりLLM特有のハルシネーションが紛れ込んでしまう危険性をゼロにすることはできません。事実と推論を明確に区別して議論する必要があるサイエンスにおいて、ハルシネーションの危険に怯えながらLLMと共に活動するには高いハードルがあります。
そして、ARIA-Forgeプロジェクトにおいても、この原著ARIA推論の最大の魅力はしっかり引き継がれたことになります。すなわち、Phase 4までの改修で、より高精度な検索が期待できるマルチエントリーポイント等を導入しつつ、Phase 5 の構造分離により、従来のARIAエンジンの魅力であった「これは私が確信を持って言えること(facts)」「これは類似ケースからの推測です(hypotheses)」という透明性(Explainability)を維持することに成功したのです。ただし、原著ARIAにおけるこの区別は、あくまでLLMへのプロンプト指示(「直接パスの場合はconfidence=1.0とせよ」等)に依存したものであり、出力データの構造として保証されてはいませんでした。Phase 5の構造分離は、この「言い方による区別」をプログラムレベルの「器による区別」へと昇華させ、より堅牢なものにしたのです。
4.検証:Phase 4 から Phase 5 への進化
4-1. 全クエリ本番実行結果
Phase 5 を全7クエリ(+ 新規設計の tn_1)で実行した結果が以下です。
| クエリ | Stage 1 パス | facts | hypotheses | not_found |
|---|---|---|---|---|
| q1 (V2O5添加MgO焼結) | 895 paths (6 entry nodes) | 1 | 0 | false |
| q2_1 (CMP+Hybrid Bonding) | — | 1 | 0 | false |
| q2_2 (MgO熱サイクル) | 843 paths (8 entry nodes) | 1 | 0 | false |
| q3 (低温Cu-Cu bonding) | 2265 paths (5 entry nodes) | 1 | 0 | false |
| q4 (複合材料熱伝導率) | 1652 paths (11 entry nodes) | 1 | 0 | false |
| q5 (マルチスケール設計) | 827 paths (10 entry nodes) | 1 | 0 | false |
| q6 (Al-Al bonding) | 5094 paths (5 entry nodes) | 1 | 0 | false |
| q6_retry (Al-Al類推強化) | 5212 paths (9 entry nodes) | 1 | 0 | false |
| tn_1 (新規True Negativeテスト) | 27 paths (1 entry node) | 1 | 0 | false |
特筆すべきは q6_retry の改善です。Phase 4 では error(パス未発見)に終わっていたこのクエリが、Phase 5 では Stage 1 で facts=1 を達成しました。マルチエントリーポイント + 二段階ルーティングの相乗効果により、Al-Al bonding という難易度の高い類推クエリに対しても、高確信度の事実ベースの推論を提供できるようになったのです。
4-2. Stage 3(類推フォールバック)の動作検証 —— 閾値0.5から0.4への調整
「全クエリが Stage 1 で成功してしまった」と聞くと、「それでは Stage 3 は無意味なのでは?」と思われるかもしれません。実際、Phase 5 の開発時点では、Stage 3 が本番環境で一度も起動しておらず、コードの動作検証が未完了という課題がありました。
そこで Phase 5.5 として、一時テストスクリプトを作成し、推論エンジンの一部をテスト用に上書きすることで fact_absent=True を強制し、Stage 3 の単体テストを実施しました。結果は以下の通りです。
| クエリ | 条件 | Embedding Score | Stage 3 結果 |
|---|---|---|---|
| q6_retry | 強制 Stage 3 (th=0.5) | 0.4387 (< 0.5) | ❌ True Negative: hypotheses=0 |
| q6_retry | 強制 Stage 3 (th=0.4) | 0.4387 (> 0.4) | ✅ 類推仮説生成! aluminummetallization をベースに推論 |
| tn_1 | 強制 Stage 3 (th=0.5) | 0.3204 (< 0.5) | ❌ True Negative |
なぜ閾値を0.5から0.4に変更したのか。 この判断には明確な根拠があります。
q6_retry の embedding score は 0.4387 でした。この値は、0.5 という閾値に対しては「わずかに届かない」値です。しかし、0.4387 という数値は「完全に無関係なノード」のスコア(通常 0.2 未満)とは明確に異なり、弱いながらも意味的な関連性が存在することを示しています。実際、0.4 に緩和したところ、aluminummetallization(アルミニウムメタライゼーション)という Al-Al bonding の文脈において意味的に関連するノードを類推ベースとして引き当てることに成功しました。
一方、tn_1 の embedding score は 0.3204 です。0.4 に緩和してもなお閾値未満であり、適切に True Negative として排除されました。つまり、0.4 という閾値は 「意味的関連性がかすかにあるノード」と「完全に無関係なノード」を適切に分離できる境界値だったのです。決して q6_retry を救うためだけの妥協ではなく、データに基づいた合理的な閾値設定でした。
公正を期して述べておくと、この閾値設定はハイパーパラメータとして慎重に扱うべき、と考えています。分野依存性、あるいは、使っているナレッジグラフ依存性がある可能性があると考えています。残念ながら、手持ちのナレッジグラフは現在使っているもの以外にはないため、未検証です。バックログに記載し、今後の検討課題となっています。
5.成果と残課題 —— 「事実」の中に潜む類推
成果
Phase 5 の二段階ルーティング実装により、以下の成果を得ました。
- 全クエリで推論成功:Phase 4 の 69% から、事実上すべてのクエリで意味のある出力を生成できるようになった
- facts / hypotheses の構造分離:推論の出所を明確に区別し、AI推論の透明性を飛躍的に向上
- 類推フォールバックの動作確認:Stage 3 が設計通りに機能することを強制テストで検証
- 適応的閾値(0.4)の導出:データに基づく合理的な類推閾値を設定
残課題 —— 第4回への伏線
しかし、ここで一つの根本的な問題が浮上しました。
表2 を見返してください。q6(Al-Al bonding)の結果は facts=1 です。つまり、ARIA は「Al-Al bonding についての事実を発見した」と報告しています。しかし、実際に Stage 1 で引き当てた起点ノードを見ると、cu-cu(類似度 0.8638)、al-al(類似度 0.8976)、al2o3(類似度 1.0000)などが含まれており、Cu-Cu bonding の知識が Al-Al bonding の「事実」として出力されている可能性が高いのです。
これはマルチエントリーポイント化の副作用とも言えます。「Al-Al bonding を知りたい」という問いに対し、「Cu-Cu の知識が豊富にあるのだから、それを事実として提供しよう」という判断になってしまっている。本来これは hypotheses(類推)に分類されるべき知識が、類似度の高さゆえに facts(事実)の枠に入り込んでしまったのです。
二段階ルーティングは「検索の入り口」における閾値の壁を突破しました。しかし、次に立ちはだかるのは「推論の出口」における「事実と類推の境界」を決定論的プログラムだけで引き切れるのかという、より深遠な問いです。
次回、第4回「決定論の迷宮① —— Al-Al結合への誤検知と過剰防衛の悲劇」では、この問題に挑むための「二重のファクトチェック」実装と、それが引き起こした「過剰防衛」という皮肉な結果について詳述します。