Skip to content

eval: validate query and path conditioned local recurrent competition #13

Description

@lipluscodex

目的

query relevance、active path membership、同一近傍内の競合を使って recurrent propagation を局所化し、relation 品質を改善しながら direct lookup と negative control の退行を防げるか検証する。

Issue #11 / PR #12 の旧 development 結果は、実験 family を選ぶための探索的根拠としてのみ扱う。旧 holdout はすでに開封済みであり、本実験の候補選択、parameter 調整、閾値決定、停止規則変更には使用しない。

default は、新しい未観測 holdout が事前固定した採用条件を通過した場合だけ変更する。

観測済みの探索的根拠

merge commit cb38aa1 の旧 development では次の tradeoff が観測された。

  • current: direct 1.0000 / relation 0.3833 / negative 0.7083
  • recurrent-balanced: direct 0.7083 / relation 0.6333 / negative 0.5417
  • recurrent-conservative: direct 0.6250 / relation 0.6333 / negative 0.5417
  • recurrent-selective: direct 0.8750 / relation 0.4524 / negative 0.6667

全体 activation に対する有限 budget と global inhibition は relation を改善できた一方、無関係な node や direct signal まで競合させ、direct / negative cohort を退行させた。

recurrent-balanced は最高 relation と、同率候補中の高い direct を持つため、best prior recurrent baseline として事前固定する。この旧結果は新しい候補間の選択やparameter tuningには使用しない。

未解決の前提

実験開始前に、production D1 の search_docs / doc_edges をread-onlyで取得できることを再確認する。

2026-08-02にproduction D1直接接続を再検証し、SELECT 1とwiki corpus countが成功した。metadataはrows_written=0changes=0changed_db=falseだった。認証ブロッカーは解消済みであり、fixture freeze前に次を確認する。

  • 旧 development / 旧 holdoutと重ならない新しいweakly-connected subgraphを2つ確保できる
  • 2つの新subgraphが相互にもdisjointである
  • direct lookup / relation / negative controlをそれぞれ含むgoldをpublic sourceで監査できる
  • acquisition queryがzero-write invariantを満たす

条件を満たすsubgraphが得られない場合は、結果を観測せず停止する。

データ分離とfreeze

production D1から次の2 setをread-only取得する。

  1. 新 development subgraph
  2. 新しい未観測 holdout subgraph

両setについてfixture、gold、provenance、manifest、variant定義、選択規則、停止規則を、variant resultを観測する前の独立commitで固定する。

contamination auditでは次を検証し、機械可読artifactとして保存する。

  • 新 developmentと新 holdoutのdoc path、node ID、source URLが相互に重ならない
  • 両setが旧 development / 旧 holdoutのdoc pathおよびnode IDと重ならない
  • normalized query、期待node、relation endpointの重複を列挙する
  • fixture内edgeの両endpointがfixture内に存在する
  • 各fixtureがweakly connectedである
  • canonical JSON hash、schema fingerprint、取得時刻、selection orderを保存する
  • 全D1 queryのrows_written=0changes=0changed_db=falseを保存する
  • known_gapsとD1がlossy search snapshotである制約を保存する

旧 holdoutの識別子は重複拒否用denylistとしてのみ照合できる。旧 holdoutのgold、rank、metrics、resultをrunnerへ入力してはならない。

固定variant

最大variant数は6とし、parameter gridは作らない。全variantは同じentry score、graph weight、hop decay、seed count、expansion limit、recurrent step数を使う。

  1. current
    • 現行のcurrent_positive_additive
  2. recurrent-balanced
    • PR #12の固定parameterを変更せず使うbest prior recurrent baseline
  3. local-neighbor
    • global inhibitionを使わず、同じsource nodeから出る sibling neighbor間だけで競合させる
  4. local-neighbor-query
    • local-neighborに決定論的query relevanceを加え、queryとの関連度でsibling messageを配分する
  5. local-neighbor-path
    • nodeへ集約する前のactive path identityを保持し、同じactive path frontier内だけでneighborを競合させる
  6. local-neighbor-query-path
    • query relevanceとactive path membershipの両方で局所競合setとmessage配分を決める

path membershipはruntimeで生成されたseed-to-node edge sequenceだけから計算する。gold path、expected node、case ID、特定query文字列、特定node IDをruntime条件に使わない。

各局所競合はglobal node集合へ抑制を波及させず、決定論的tie-breakと固定上限を持つ。

development評価と候補選択

新 developmentで6 variantsを一度だけ実行し、次を保存する。

  • 全体およびcohort別MRR / Hit@3 / rank
  • relation endpoint / edge type path一致
  • credited / uncredited feedback edge変更
  • 非対象caseのrank変更
  • step数、展開数、active path数、activation総量、収束、停止理由
  • 各local competition setのsource、path identity、neighbor数、query relevance、配分前後のmessage量
  • baselineとの差分と候補gate判定

local candidateは次をすべて満たす場合だけgateを通過する。

  1. relation MRRがcurrentrecurrent-balancedの両方を厳密に上回る
  2. direct lookup MRRがcurrentから退行しない
  3. negative-control MRRがcurrentから退行しない
  4. 全relation caseで固定endpoint / edge type pathが一致する
  5. credited feedback edgeが1本以上変化する
  6. uncredited edgeと非対象case rankが変化しない

複数候補が通過した場合のtie-breakは次の順に固定する。

  1. highest worst-cohort MRR
  2. highest relation MRR
  3. fewest mean expansions
  4. lowest structural complexity
  5. lexicographic variant ID

候補がなければdefaultを維持し、holdoutを開かず終了する。

一回限りのholdoutと採用条件

development候補が一意に選ばれた場合だけ、新 holdoutで次の3 variantsを一度実行する。

  • current
  • recurrent-balanced
  • 選択候補

holdout resultがすでに存在する場合、runnerは再実行と上書きを拒否する。

default採用にはdevelopmentと同じgateをすべて要求する。

  • relation MRRが両baselineを厳密に上回る
  • direct / negative MRRがcurrentから退行しない
  • 全relation pathが一致する
  • feedback isolationが成立する

一つでも失敗した場合はdefaultを変更しない。holdout観測後にvariant、parameter、gold、doc path、閾値、選択規則、停止規則を変更しない。

停止規則

次のいずれかで実験を停止する。

  • production D1 read-only accessを確認できない
  • 条件を満たす2つの新規disjoint subgraphを確保できない
  • freeze前のcontamination auditに失敗する
  • development gateを通る候補がない
  • holdout resultがすでに存在する
  • holdout adoption gateに失敗する
  • variant数が6を超える変更を必要とする

失敗、tradeoff、候補なし、holdout不採用もversioned resultとして保持する。

制約

  • 旧 developmentは探索的family根拠に限定する
  • 旧 holdoutを候補選択やtuningへ再利用しない
  • production D1以外から作ったgraph fixtureで本実験を代替しない
  • core dynamicsをLi+固有node、gold、D1 schemaへ依存させない
  • standard-libraryのみの決定論的実装を維持する
  • learned router、embedding学習、query-specific exceptionは別issueとする
  • 品質数値をCIの固定合格値にしない
  • CIはhash、分離、determinism、再生成一致、one-time holdout、stop ruleを検証する

想定変更箇所

  • src/neuron_graph_rag/dynamics.py - 局所競合strategyとpath-local state
  • src/neuron_graph_rag/models.py - 必要なdiagnostics schema
  • src/neuron_graph_rag/engine.py - strategy wiring
  • tools/acquire_d1_fixture.py - disjointness / contamination audit
  • tools/run_dynamics_experiment.py - 固定variant、選択、one-time holdout
  • tests/fixtures/ - 新development / holdout、gold、provenance、manifest、results
  • tests/ - local competition invariant、分離、determinism、停止規則
  • docs/requirements.md - dynamicsとexperiment契約
  • docs/neural-dynamics-local-competition-experiment.md - protocol、結果、適用限界
  • README.md - 実行方法と最終判断

完了条件

  • production D1由来の新しいdisjoint development / holdoutが観測前に固定される
  • 6 variantsを再現可能に比較できる
  • query relevance、active path membership、neighbor competitionの寄与をablationで分離できる
  • development候補選択とone-time holdout採用判断が機械的に再現できる
  • provenanceとcontamination auditが保存される
  • 未観測holdoutが全採用条件を通過した場合だけdefaultが変更される

Metadata

Metadata

Assignees

Labels

doneImplementation phase finished; awaiting orchestration.enhancement新機能・改善要望ready本文が実装開始できる形まで収束している状態。ただし更新は継続可能

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions