Download docs/EVALUATION.md from Mr-DS-ML-85/SyFox: direct link, hf CLI and curl.
- Browser
- Download file 6.58 kB
-
https://huggingface.co/Mr-DS-ML-85/SyFox/resolve/main/docs/EVALUATION.md
- Command line
-
hf download hf://Mr-DS-ML-85/SyFox/docs/EVALUATION.md
-
curl -L -o EVALUATION.md https://huggingface.co/Mr-DS-ML-85/SyFox/resolve/main/docs/EVALUATION.md
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
- 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.
- 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).
- 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.
- 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.
- 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