SyFox / docs /EVALUATION.md
Mr-DS-ML-85's picture
Upload folder using huggingface_hub
c97bd71 verified
|
Raw History Blame Contribute Delete
6.58 kB
# Giant model β€” measured evaluation (v3.1.3, one interleaved pass)
All numbers below are from real runs of the committed binary and corpora
(deterministic; seed 77). Engine: SyFox 3.1.2 substrate + v3.1.3 CLI routing
fix. `energy-norm` ON everywhere (mandatory at corpus scale β€” v3.1.0).
Selection (calibration, router wording) used CAL only; hidden was scored
once. Per-row records: `datasets/eval/dump_pass1.jsonl`.
## Corpus
16 domains, 76,142 train rows (152,284 lessons per epoch), 278 globally
unique opaque anchors, 3 full per-script calibration files + 1 latin merge.
Recipe (the three failure-mode fixes): empty per-row instructions at learn;
globally-unique anchors; round-robin domain interleave. Criteria: preserved
verbatim for tickets/game/guard/bank77/sms (keys remapped to anchors),
mined top-10 for the 8 new HF domains (train rows only). See
`datasets/MANIFEST.json`.
## Hidden results β€” latin substrate (model-giant-latin, 43,420 nodes / 1,905,170 lanes)
| domain | n | router acc | class acc | end-to-end | deferred | ms/row |
|---|---:|---:|---:|---:|---:|---:|
| tickets_en | 1,800 | 0.831 | 0.904 | 0.761 | 0 | 7.65 |
| bank77 | 3,080 | 0.931 | 0.023 | 0.022 | 0 | 10.47 |
| sms | 838 | 0.233 | 0.752 | 0.222 | 2 | 6.42 |
| clinc | 4,500 | 0.334 | 0.309 | 0.123 | 0 | 11.02 |
| enron | 1,110 | 0.394 | 0.752 | 0.323 | 0 | 6.79 |
| emotion | 2,000 | 0.155 | 0.249 | 0.073 | 0 | 6.76 |
| hate | 1,500 | 0.381 | 0.653 | 0.277 | 0 | 6.52 |
| agnews | 2,000 | 0.320 | 0.604 | 0.206 | 0 | 7.02 |
| polarity | 2,000 | 0.339 | 0.571 | 0.189 | 0 | 6.52 |
| dbpedia | 2,000 | 0.403 | 0.475 | 0.204 | 0 | 7.55 |
| boolq | 1,500 | 0.097 | 0.531 | 0.059 | 0 | 6.18 |
Weighted over these 22,328 rows: router 0.432 Β· class 0.454 Β· e2e 0.196.
## Hidden results β€” multilingual substrates (post-isolation-fix)
| domain | substrate | n | router | class | e2e |
|---|---|---:|---:|---:|---:|
| tickets_bn | giant-bengali (579 nodes / 12,972 lanes) | 540 | 1.000 | 0.943 | 0.943 |
| tickets_hi | giant-devanagari (546 / 12,353) | 539 | 1.000 | 0.920 | 0.920 |
| tickets_ru | giant-cyrillic (680 / 14,915) | 539 | 1.000 | 0.959 | 0.959 |
Reference dedicated fabrics (v3.0, README): bn 0.969 / hi 0.965 / ru 0.970 β€”
the giant's per-script fabrics land within 1-4.5 points at a fraction of the
size, with the router trivially perfect inside a single-domain substrate.
## Handcrafted probes (41; 37 scored + 4 OOD)
Router 10/41 = 0.244 Β· class 11/37 = 0.297. OOD: the pure-gibberish probe
deferred (`zzqvv plork wumfus xanquu blorp`); the other three OOD probes
answered at confidence 0.000-0.031 (near-silence, honest). Full transcript
reproducible via `tools/giant_bench.py --probes`.
## Router-criteria wording sweep (cal only, never hidden)
| variant | router cal acc (n=3,250) |
|---|---:|
| short4 (trained wording) | **0.426** |
| mid8 specific | 0.164 |
| rich12 specific | 0.079 |
| long abstract | 0.208 |
Richer SPECIFIC wording makes the router worse β€” the direct-term harvest
mechanism of docs/PROBING.md: criteria words that occur in states harvest
energy regardless of router meaning, and more words = more cross-domain
harvest. Abstract register words recover part of the loss but do not beat
the short anchor-led probe. Winner (short4) matches what pass-1 trained.
## Probe-condition dependence (measured)
The router readout depends on what ELSE the decide call asks β€” every
question's criteria tokens inject into the same settled field:
| condition | router acc |
|---|---:|
| blind (router question alone), hidden n=23,528 | **0.400** |
| blind, cal n=1,500 | 0.399 |
| informed (router + the TRUE domain's class question β€” the hidden table above) | 0.432 weighted |
| router + ALL 15 class questions, cal | 0.399 |
Asking everything does NOT recover the informed condition: the other
domains' criteria dilute the anchoring (competitor dilution). Production
contract: a caller that only asks for routing gets the honest blind
estimate (0.400); the class numbers apply when the caller names the domain.
## Calibration (per-script, on cal only)
- giant-latin: choice temperature 0.1777; multiclass ECE 0.333 β†’ 0.230
(choice), noul Platt (a=12.64, b=-1.00) ECE 0.511 β†’ 0.095.
- giant-bengali / -devanagari / -cyrillic: fitted on their own cal splits.
## Honest reading
1. **Class channels work where per-anchor data is thick**: tickets_en 0.904,
sms 0.752, enron 0.752, hate 0.653, agnews 0.604, polarity 0.571 in a
single shared fabric alongside 15 other domains.
2. **The single 16-way router is the e2e bottleneck** (0.10-0.40 on the new
domains; wording sweep shows the limit is the mechanism, not the wording).
e2e = router x class; when the caller names the domain (API use), use the
class numbers. Blind routing alone measures 0.400 on hidden (see the
probe-condition section).
3. **bank77's 77-way decision collapses in the shared fabric** (0.023 class
vs 0.081 for the dedicated fabric): 77 anchors competing in a 43k-node
multi-domain fabric is a harder readout than the dedicated fabric β€”
hub crowding at scale, consistent with the v3.1.0 anatomy.
4. **boolq stays near majority** (0.531 vs ~0.62 True-majority): boolean
passage comprehension is beyond bag-of-words SI readout β€” measured limit,
not a bug.
5. **One interleaved pass, not three**: pass-1 lanes sit at their decay
equilibrium because every domain is re-touched throughout the round-robin
stream (the condition that made 3-epoch consolidation necessary β€”
sequential training with lane decay 0.995/lesson β€” does not arise here).
The chunked corpus (`data/giant/chunks/`) supports additional passes; the
v3.1.0 ladder measured epochs 2-3 adding +0.008-0.012 on bank77 β€” run
them if margins matter more than latency of training.
## Reproduce
```
make all # build engine
python3 tools/hf_fetch.py # download HF datasets (cached)
python3 tools/giant_prepare.py # build corpus + chunks + probes
for c in 0 1 ... 11: # one pass = 12 incremental learns
./build/syfox learn --examples data/giant/chunks/chunk_0$c.jsonl \
--model model-giant --lang auto --epochs 1
./build/syfox calibrate --model model-giant-latin \
--examples data/giant/cal_latin.jsonl --energy-norm # (+ 3 scripts)
python3 tools/giant_bench.py --model-slug giant-latin --domains ... --dump out.jsonl
python3 tools/giant_bench.py --model-slug giant-latin --probes
python3 tools/router_sweep.py --model-slug giant-latin
```