第4回:LLM×ナレッジグラフの境界を探る:決定論の迷宮(1) —— Al-Al結合への誤検知と過剰防衛の悲劇
1.はじめに:Stage 1 の成功が生んだ新たな問題
前回(第3回)の記事では、二段階ルーティング(Phase 5)を実装し、全クエリが Stage 1 で facts=1 を達成するという快挙を報告しました。ARIA-Forge の推論エンジンは、ついにすべての質問に対して「何らかの意味のある答え」を返せるレベルに到達したのです。
しかし、この「全問正解」には、一つの深刻な疑惑が潜んでいました。q6(Al-Al bonding の手法を問うクエリ)の結果を詳しく見ると、Stage 1 がエントリーポイントとして引き当てたのは cu-cu(類似度 0.8638)、al2o3(類似度 1.0000)などのノードでした。つまり、「Al-Al の手法を教えて」と聞いているのに、「Cu-Cu の知識ベースで答えます」と言っているのです。しかも、それを facts(事実)として。
本稿(第4回)では、この「誤検知」問題に真正面から挑んだ Phase 5.6 初版の軌跡を詳述します。LLMによる必須物質抽出、単語境界正規表現、PSP構造検証——三層の防御壁で「事実」の品質を守ろうとした試み。そして、それが引き起こした「過剰防衛」という皮肉な結果。ここから、決定論的プログラムの限界という、より深遠なテーマが見え始めます。
2.問題の核心:「Al-Al」を聞いたのに「Cu-Cu」が返ってくる
まず、何が問題なのかを正確にお伝えしておきます。
| 観点 | q4(熱伝導率予測) | q6(Al-Al bonding) |
|---|---|---|
| クエリの主題 | MgO フィラーの熱伝導率 | Al-Al ダイレクトボンディング |
| グラフ内の直接データ | ✅ MgO, epoxy, filler 等が豊富に存在 | ❌ Al-Al bonding の直接データは不在 |
| Stage 1 の起点ノード | mgo, epoxy, filler, thermal conductivity 等 |
cu-cu(類似度0.86), al2o3(類似度1.0), al-al(類似度0.90) |
| 出力の実態 | MgO の知識に基づく事実 | Cu-Cu の知識に基づく事実 |
| あるべき姿 | ✅ facts | ❌ hypotheses(類推) |
問題の本質は、「知らないことを知らないと言えない」ことではありません。ARIA は「Cu-Cu の知識を使って類推しました」と言うべきなのに、「事実としてこれを発見しました」と誤ったラベルを貼ってしまっていることです。これは、前回 Phase 5 で実装した facts / hypotheses の構造分離という成果を、根本から揺るがす問題です。
なぜこのようなことが起きてしまったのか。原因は Phase 4 で導入したマルチエントリーポイント化にありました。多数のキーワードを個別にベクトル検索にかけるこの方式は、取りこぼしを劇的に減らす一方で、「クエリにたまたま含まれていた単語に引きずられて、主題とズレたノードを拾ってしまう」という副作用を持っていました。q6 のクエリには “Cu-Cu” という単語が(類推の文脈として)含まれているため、それが高スコアでマッチしてしまったのです。
3.対策1:LLMによる必須物質抽出
まず最初に実装したのが、LLMに「このクエリが本当に知りたいものは何か」を判定させる仕組みです。
具体的には、クエリテキストを LLM に渡し、「必須の材料・物質」と「文脈として言及されているだけの参照材料」を区別させます。q6 の場合:
必須(このクエリが知りたい対象): ["Al", "Al2O3", "Al-Al bonding"]
参照(比較・文脈として言及): ["Cu-Cu", "Cu-oxides"]
この抽出結果を使って、Stage 1 で収集したパスをフィルタリングします。「パス内のノード名に必須物質が含まれているか」をチェックし、参照物質しか含まれないパスを除外する——これがバリデータ #1 です。
この方法は一見理にかなっています。LLM は文脈理解に優れているため、「Al-Al の話をしているのに Cu-Cu が主題ではない」という判断は人間並みにできるからです。しかし、この判断をLLMに任せることにはリスクが伴います。LLM の出力は確率的であり、同じ入力に対しても毎回同じ結果が返るとは限りません。そこで、LLM 呼び出しに失敗した場合のフォールバックとして、単純なキーワードベースの抽出も併用する設計としました。
4.対策2:正規表現による単語境界マッチ + PSP構造検証
LLM の判断を100%信頼することはできない。そこで、決定論的なプログラムによる二層目のチェックを追加しました。これがバリデータ #2 です。
バリデータ #2 の考え方はシンプルです。パスを構成するノード名の中に、必須物質が独立した単語として含まれているかを、正規表現の単語境界(\b)で厳格に検証します。たとえば必須物質が “Al” の場合:
Al metallization→ ✅\bAl\bがマッチAl2O3 native oxide→ ❌\bAl\bはマッチしない(Al の直後に2が続くため単語境界がない)aluminum surface→ ❌\bAl\bはaluminumにマッチしない
一見シンプルですが、これが非常に強力です。Cu-Cu パスの中に “Al” が独立した単語として登場することは稀であり、q6 のようなクロス材料類推クエリの誤検知を高い精度で排除できるはずでした。
さらにその上に、PSP(Process-Structure-Property)構造の整合性検証も追加しました。グラフのトポロジー(ノードの入次数・出次数)から、パスがプロセス→構造→特性という正しい因果の流れを形成しているかを確認します。これにより、単語は一致していても因果構造として破綻しているパスを排除できます。
| バリデータ | 方式 | 依存先 | 目的 |
|---|---|---|---|
| #1(必須物質抽出) | LLM による文脈理解 | LLM(フォールバックあり) | 主題材料の特定 |
| #2-1(単語境界マッチ) | \b 正規表現 |
なし(決定論的) | ノード名の厳格照合 |
| #2-2(PSP構造検証) | グラフトポロジー解析 | なし(決定論的) | 因果構造の整合性確認 |
これで万全のはずでした。LLM の柔軟な判断と、決定論的プログラムの厳格なチェック。両者の長所を組み合わせた「二重のファクトチェック」によって、q6 の誤検知を防ぎつつ、q4 のような正当な facts は維持できる——そう確信していました。
5.過剰防衛の悲劇:すべてを棄却してしまう
実装は完了し、Python の構文チェックもパスしました。いざ本番クエリで検証——。そこで待っていたのは、衝撃的な結果でした。(この表現、何度目でしょうね! 笑)
q6 の Cu-Cu パスは、想定通りバリデータ #1 で見事に除外されました。”Al” や “aluminum” を含まないパスが正しく棄却されたのです。しかし、q4 までが事実不在(fact_absent=True)に陥ったのです。MgO filler や epoxy composite といった、間違いなく「事実」であるべきパスまでが、まとめて消え去りました。
原因はバリデータ #2-1(単語境界マッチ)にありました。本プロジェクトのナレッジグラフは、Phase 2 の正規化プロセスを経て構築されています。その過程で、多くのノード名が複合語化していました。
MgO nanostructure→MgOnanostructure(複合語)epoxy resin composite→epoxyresincomposite(複合語)aluminum metallization→aluminummetallization(複合語)
\bMgO\b という正規表現は MgOnanostructure にマッチしません。なぜなら “MgO” の直後に “n” が続いており、そこには単語境界が存在しないからです。同様に、\bepoxy\b も epoxyresincomposite にマッチしません。
結果として、ほぼすべてのパスが「必須物質を含まない」と判定され、バリデータ #2-1 で棄却されてしまったのです。
| クエリ | Stage 1 パス | バリデータ #1 | バリデータ #2 | 最終結果 |
|---|---|---|---|---|
| q6(Al-Al) | Cu-Cu パス発見 | ❌ Al, aluminum 不在 → 棄却 | — | fact_absent=True → Stage 3 |
| q4(熱伝導率) | MgO/epoxy パス発見 | ✅ MgO, epoxy 検出 | ❌ \bMgO\b が MgOnanostructure にマッチせず → 棄却 |
fact_absent=True(誤検知!) |
| q3(Cu bonding) | Cu bonding パス発見 | ✅ Cu, bonding 検出 | ❌ 複合語問題で棄却 | fact_absent=True(誤検知!) |
LLMは信頼できないからと「策を弄しすぎたため、何も言えなくなったARIA-Forge」——これが Phase 5.6 初版の結末でした。ハルシネーションを防ぐために張り巡らせた防御壁が、今度は正当な知識まで遮断してしまったのです。
6.教訓:決定論的プログラムの限界
この失敗から得られた教訓は、単なる「正規表現のバグ修正」のレベルを超えていました。
私たちは「何が事実で、何が類推か」という意味的な境界を、決定論的なルール(\b 正規表現、PSPトポロジー)だけで引き切ろうとしました。しかし、その試みは「複合語」という予期せぬ現実の前に脆くも崩れ去りました。そして、より本質的な問題に気づかされたのです。
Cu-Cu の知識から Al-Al を推論することは、本当に「誤り」なのでしょうか。
材料科学の本質に立ち返れば、これは誤りではなく、ARIA の優雅な劣化が正常に機能した結果です。「Al-Al bonding の直接データがないので、類似メカニズムの Cu-Cu から類推しました」——これはむしろ、私たちが ARIA に求めていた能力そのもの。
問題は Cu-Cu を拾ったこと自体ではなく、それを facts(事実)として出力してしまったことです。つまり、棄却ではなく再分類こそが本質的な解決策につながるはずです。
次回、第5回「決定論の迷宮(2) —— キーワード共起密度による再分類のジレンマ」では、この気づきをもとに実装した Phase 5.6 改訂版の軌跡を詳述します。「棄却」から「再分類」への大転換。そして、それが直面した新たなトレードオフ——一部のクエリを救えば別のクエリが犠牲になる、決定論的パラメータ調整の泥沼へと足を踏み入れていきます。