第5回:LLM×ナレッジグラフの境界を探る:決定論の迷宮(2) —— キーワード共起密度による再分類のジレンマ
1.はじめに:「棄てる」から「振り分ける」へ
前回(第4回)の記事では、Phase 5.6 初版の衝撃的な失敗をお伝えしました。「Al-Al bonding の手法を知りたいのに Cu-Cu bonding の知識が事実として返ってくる」という誤検知問題に対し、LLM必須物質抽出+正規表現単語境界マッチ+PSP構造検証という三重の防御壁を築いたものの、複合語ノード名の罠によってすべてのパスが棄却される過剰防衛に陥りました。
この失敗から得られた最大の気づきは、以下の一言に尽きます。
「Cu-Cuの知識からAl-Alを推論することは、誤りではない。ARIAの優雅な劣化が正常に機能した結果である。問題は『棄却』ではなく、『事実(facts)か類推(hypotheses)か』の再分類だ。」
本稿(第5回)では、この気づきをもとに実装した Phase 5.6 改訂版の軌跡を詳述します。前回の「棄却アプローチ」を完全に捨て去り、キーワード共起密度(keyword co-occurrence density)という新たな概念で「事実↔類推」の境界線を引き直したプロセスです。そして、その先に待っていた新たなトレードオフ——一部のクエリを救えば別のクエリが犠牲になる、決定論的パラメータ調整の泥沼——についても率直に報告します。
2.核心の再定義:「何にマッチしたか」ではなく「どれだけ確からしくマッチしたか」
Phase 5.6 初版の失敗を冷静に振り返ると、問題の本質は「マッチングの厳格さ」そのものではありませんでした。むしろ、「Cu-Cu という言葉がクエリに含まれているから Cu-Cu ノードを拾った」こと自体は正しい挙動なのです。
真の問題は、「Cu-Cu ノードを拾ったパスが、クエリ全体の主題をどれだけ代表しているか」を評価できていなかったことです。q6(Al-Al bonding)のクエリには “Cu-Cu” が文脈として登場しますが、それはクエリ全体の中でごく一部に過ぎません。一方で q4(MgO filler の熱伝導率)では、クエリ内の多数のキーワード(MgO, epoxy, filler, thermal, conductivity, percolation…)がパス内のノード群に広く深くマッチしています。
この違いを数値化できないか——。そこから生まれたのが キーワード共起密度(keyword co-occurrence density) という概念です。
| 観点 | 初版(棄却アプローチ) | 改訂版(再分類アプローチ) |
|---|---|---|
| 判定軸 | 必須物質が「含まれているか/いないか」の二値 | 全キーワードのうち「どれだけマッチしたか」の密度 |
| 判定主体 | LLM(必須物質抽出)+正規表現 | 完全決定論的(キーワード照合のみ) |
| 不合格パスの扱い | 棄却(消滅) | 再分類(hypotheses へ移動) |
| 設計思想 | 「不純」な知識は排除 | 「不純」な知識も価値ある類推として保存 |
3.キーワード共起密度の設計
3.1 基本概念
キーワード共起密度(density)の計算式自体は極めてシンプルです。
density = covered_keywords / total_keywords
covered_keywords: パス内の全ノード名テキストに出現するクエリキーワードの数
total_keywords: クエリから抽出された全キーワードの数
たとえば q4(MgO filler の熱伝導率を予測するには?)のクエリからは 20 個のキーワードが抽出されます。そのパスを構成するノード群(MgO filler → thermal conductivity → percolation model → ...)の中に、これらのキーワードがいくつ出現するかを数え上げます。出現すれば covered、しなければ uncovered。この比率こそが density です。
重要なのは、この計算にはLLMが一切関与しないということです。Phase 4 で実装済みのキーワード抽出(これも決定論的)と、小文字の部分文字列照合だけで完結します。プロンプトの微細な変化によって結果が揺らぐ心配はありません。
3.2 希少性フィルタの検討と最終判断
当初の設計では、すべてのキーワードを等しく扱うのではなく、グラフ内での希少性に応じて重み付けする案(案C)がありました。”bonding” や “process” のような汎用語は数千のノードに出現し、密度を水増ししてしまいます。そこで、以下のような希少性スコアを導入し、上位50%のキーワードのみで密度を計算する方式を検討しました。
rarity(kw) = 1.0 / (match_count(kw) + 1)
しかし実装を進めてみると、希少性フィルタなしの単純な共起密度でも、q4とq6の分離には十分なコントラストが得られることが判明しました。
| クエリ | 全キーワード数 | パス内平均出現数 | 単純密度 | 判定 |
|---|---|---|---|---|
| q4(MgO/epoxy) | 20 | ~5 | 0.25 | DIRECT → facts |
| q6(Al-Al) | 7 | ~2 | 0.29 | ?(要検討) |
表2を見て、読者の皆さんは気づかれたかもしれません。q6 の密度(0.29)が q4 の密度(0.25)を上回っているではないか、と。キーワード数が少ないクエリでは、たまたま2個マッチするだけで密度が跳ね上がってしまうのです。この問題を解決するために導入したのが、次節で説明する「適応的閾値」です。また、希少性スコアは分類には使用せず、診断情報としてログ出力のみにとどめる判断をしました。余計な重み付けを排し、アルゴリズムの透明性を高めるためです。
4.適応的閾値の導入:「最低3つ」ルール
q6 のようなショートクエリで密度が不当に高くなる問題を防ぐため、最低マッチ数(min_matches = 3)の要件を導入しました。
effective_threshold = max(0.25, min_matches / total_keywords)
この方式では、キーワード数が少ないクエリほど実効的な閾値が高くなります。q6 の場合、全キーワードが 7 個なので effective_threshold = max(0.25, 3/7) = 0.43 となります。たとえ 2 個のキーワードがマッチして密度が 0.29 になっても、閾値 0.43 を超えないため TRANSFER(類推)に正しく分類されます。
| クエリ | キーワード数 | ベース閾値 | min_matches効果 | 実効閾値 | 実際の密度 | 分類 |
|---|---|---|---|---|---|---|
| q4(MgO/epoxy) | 20 | 0.25 | max(0.25, 3/20) = 0.25 |
0.25 | 0.25 | DIRECT ✅ |
| q6(Al-Al) | 7 | 0.25 | max(0.25, 3/7) = 0.43 |
0.43 | 0.29 | TRANSFER ✅ |
| q3(Cu bonding) | ~12 | 0.25 | max(0.25, 3/12) = 0.25 |
0.25 | 0.42 | DIRECT ✅ |
この適応的閾値の導入により、「Cu-Cu の知識を Cu-Cu のクエリに使うのは事実(facts)」「Cu-Cu の知識を Al-Al のクエリに使うのは類推(hypotheses)」という、私たちが本来求めていた分類が実現しました。
5.改訂版のデータフロー:シンプルになったルーティング
Phase 5.6 改訂版では、初版で導入した複雑なバリデータ機構(LLM必須物質抽出、\b 正規表現、PSP構造検証)をすべて削除しました。その結果、Stage 1 の内部フローは驚くほどシンプルになりました。
Stage 1: PRIMARY SEARCH @ threshold=0.7
├─ キーワード抽出(Phase 4 既存)
├─ マルチエントリーポイント検索(Phase 4 既存)
├─ パス収集(変更なし)
├─ 【Phase 5.6 改訂】_classify_paths_by_keyword_density()
│ ├─ density >= effective_threshold → direct_paths → facts[]
│ └─ density < effective_threshold → transfer_paths → hypotheses[]
└─ 両方空 → fact_absent = True
初版にあった 4 つのメソッド(_extract_core_entities、_infer_expected_psp_type、_validate_path_psp_structure、およびそれらの LLM 呼び出し)が消え、代わりに 2 つのメソッド _compute_keyword_rarity(診断用)と _classify_paths_by_keyword_density(分類用)だけが追加されました。コードベースは大幅にスリム化され、動作の予測可能性も格段に向上しました。
6.検証結果:理想的な分離
本番の 9 つのテストクエリで検証した結果、q4 と q6 は期待通りの分離を示しました。
| クエリ | 期待 | 実測 | 直接パス | 転移パス | 判定 |
|---|---|---|---|---|---|
| q4(MgO/epoxy 熱伝導率) | facts=1 | facts=1 ✅ | 16(avg density 0.256) | 1,636(avg density 0.082) | DIRECT |
| q6(Al-Al bonding) | hypotheses=1 | hypotheses=1 ✅ | 0 | 5,094(avg density 0.007) | TRANSFER |
q4 の直接パス(density ≥ 0.25)は 16 個。平均密度 0.256 とギリギリのラインですが、これらは MgO → filler → thermal conductivity → percolation model という確かな因果連鎖を形成しており、事実として十分な信頼性があります。
一方 q6 では、5,094 個のパスすべてが転移パス(density < 0.43)に分類されました。平均密度はわずか 0.007。クエリ内のキーワードのほとんどが、Cu-Cu パス内のノード群には出現しなかったことを示しています。これらのパスは hypotheses に格納され、「Cu-Cu の知見から Al-Al への類推」として適切にラベル付けされました。
初版の「全パス棄却」という悪夢を経て、ついに「棄てるのではなく、正しく分類する」というゴールに到達したのです。
7.決定論的パラメータ調整のジレンマ
しかし、この成功の裏で、新たな問題が静かに顔をのぞかせていました。
適応的閾値 max(0.25, 3/total_keywords) は q4 と q6 の二項対立では美しく機能しました。ところが、キーワード数が 2 以下のクエリが来た場合、3/2 = 1.5 という閾値になり、密度が 1.5 を超えることは原理的に不可能です。つまり、全パスが問答無用で TRANSFER に分類されてしまいます。
これは当時のコードに潜在する「境界バグ」の一例に過ぎません。より本質的な問題は、density = 0.25 という閾値そのものに、理論的な根拠がないことでした。q4 で密度が 0.25 だったから 0.25 にした——これは「q4 のためにチューニングした閾値」であり、未知のクエリに対してどれだけ汎化するのかは、まったく保証できません。
| パラメータ | 設定値 | トレードオフ |
|---|---|---|
| ベース閾値 density | 0.25 | 高すぎる → q4 の facts を取りこぼす 低すぎる → q6 の Cu-Cu が facts に混入 |
| 最低マッチ数 min_matches | 3 | 大きすぎる → キーワード数が少ないクエリで全滅 小さすぎる → q6 のようなショートクエリで誤分類 |
| 希少性フィルタ | 未使用 | 使えば汎用語による水増しを抑制できる しかし計算コスト O(K×N) が重く、分類結果は変わらない |
これは「決定論的プログラムの限界」という、より深いテーマに直結する問題です。私たちは「事実と類推の境界」をたった2つの数値パラメータで定義しようとしています。しかし現実の材料科学のクエリ空間は、そんなに単純なはずがありません。q4 を救うために閾値を 0.25 に下げれば、q6’(Al-Al に少しだけ言及した Cu-Cu クエリ)が facts に紛れ込む。q6 を守るために閾値を 0.30 に上げれば、q4’(MgO 以外のフィラーを含む熱伝導率クエリ)が hypotheses に沈む。
あるクエリを救う調整は、必ず別のクエリを犠牲にする。 これが、決定論的パラメータ調整のジレンマの本質です。
8.教訓と展望:プログラムに境界線は引けるのか
Phase 5.6 改訂版の実装を通じて得た教訓は、皮肉なほど明確でした。
「棄却ではなく再分類」という設計思想は正しかった。しかし、その「再分類の境界線」を決定論的プログラム(Pythonのコード)だけで引き切ることには、根本的な限界がある。
キーワード共起密度は、確かに q4 と q6 の分離には成功しました。しかし、それは「たまたま q4 と q6 の密度分布に 0.25 という閾値がフィットした」に過ぎません。材料科学の全クエリ空間をカバーできる保証はどこにもなく、未知のクエリが来るたびに閾値を微調整する無限後退が待っています。
この「閾値の無限調整地獄」に出口はあるのか——。その答えは、Phase 6 で見つけることになります。ヒントは、「境界線をプログラムで引く」ことを諦め、AI自身に評価させるという発想の転換です。
次回、第6回「パラダイムシフト —— AIの監視はAIに任せる『LLMガードレール』」では、決定論的プログラムの限界を突破し、ARIA-Forge の推論品質を劇的に向上させたブレイクスルーについて詳述します。密度の低いパスを「弾く」のではなく、すべてを通過させた上でLLMに注釈を付けさせる——「排除」から「評価」への大転換。そして、その転換がもたらした予想外の副産物についてもお話しします。