Text Classification
syfox
decision-engine
decision-making
decision-model
structured-prediction
system-one
si-substrate
intent-classification
routing
abstention
uncertainty-quantification
selective-prediction
hebbian
energy-based-model
associative-memory
no-transformer
no-neural-network
no-pattern-matching
moderation
spam-detection
multilingual
File size: 6,575 Bytes
c97bd71 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | # 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
```
|