STEP 1637 — invariance-checker empirical v0.1
1. 何をしたか
ローカル Ollama 上の qwen2.5:3b (3.1B params, Q4_K_M) を 対象に、 12 個の 一段算術文章題 に対して 3 つの機械的変換 (人名置換 / 空白追加 / 同義語置換) を掛け、 各条件 2 サンプル (temperature=0.7, seed=1000/1001) で 計 96 回 生成。 変換は 3 つとも 意味 preserving を意図した設計 = 「正しく解ければ 答えは 変わらない」 pair。
Comparator = numericMatch (last-integer extract + abs tolerance 1e-6)。 判定は STEP 1631 primitive 3 段 (single I1-I5 / aggregate A0-A7 / statistical → mapMultiTrialToD8 STEP 1371 BH-FDR)。 α=0.05, FDR q=0.05。
2. 結果 (要約)
Loading empirical data from /data/invariance-checker/empirical-2026-08-31.json…
3. Per-problem table
| Problem | Expected | Difficulty | variable-rename | whitespace-noise | synonym-swap | Aggregate |
|---|---|---|---|---|---|---|
| Loading… | ||||||
4. Cross-problem BH-FDR aggregate
Loading…
5. Honest scope
- 単一 model、 単一 run。 「モデル差」 「run 差」 は 本 table から 言えない (v0.2 で 2 モデル以上 + N run)
- Comparator = last-integer 抽出。 モデルが 答えを 冒頭 or 途中に 書くと 拾えない → verdict FALSE 側に 偏る可能性 (comparator brittleness = artifact, not model failure)。 v0.2 で LLM-as-judge comparator 検討
- 変換の "equivalence" は caller 主張 (asserter=self)。 synonym-swap の
bakery→bakeshopのような 置換が 完全に semantics preserving か は module 外の judgment - Sample サイズ 2 は 検定力不足 (n=2 で pValue 分解能 {1.0, 0.75, 0.5, 0.25, 0.0} の 5 値)。 「一致 2/2」 でも 「一致 0/2」 でも 有意 になりにくい (statistical layer は 診断だけ、 意思決定 層 は 別)
- 変換 3 つ とも 「答えを 変えない」 が 想定。 変換の 陰性対照 (「答えが 変わる 変換」 = 変数値 変更、 誤変換) は 本 run に 入れていない。 v0.2 で 陰性対照 混ぜ込み ⇒ 「True→NEITHER (見逃し)、 True→FALSE (誤検知)」 の 4 象限 出せる
- 問題 corpus 12 件 は 全て 一段算術 (easy 6 + medium 6)。 GSM8K/MATH 本 dataset に対する empirical は 別 STEP
6. 反証条件 (self-test)
本 empirical run が 診断能力を持つ = 以下 の 少なくとも一つ を 満たす:
- 少なくとも 1 問題 で FALSE / BOTH / NEITHER が 出る (全 TRUE なら primitive が 何も 拾っていない)
- 3 変換の verdict 分布 が 有意に 異なる (人名置換 と 空白追加 で 破綻率 が 同じなら, 変換の 選択が 診断値ゼロ)
- Cross-FDR 集計 で naive-significant と fdr-survivor の 差 が 見える (naive=survivor なら FDR gate が 何も 篩っていない = 検出力過剰)
これら全てが 発火 しなかった場合、 empirical layer は 「動いているが 見えていない」 状態。 v0.2 で 陰性対照混入 + サンプル増強 + comparator 頑健化 を 検討する signal。
7. Raw data
Full JSON with per-call latency + provenance: /data/invariance-checker/empirical-2026-08-31.json
Reproduce: npx tsx scripts/invariance/run-empirical.ts --model qwen2.5:3b --samples 2 --alpha 0.05 --fdr 0.05