Joint or Per-Option? Compact Encoders for Closed-Set Decisions from 17 Million to 1 Billion Parameters
Organizations: Federal Institute of São Paulo (IFSP), São Paulo, Brazil
Abstract
Many language-model pipelines end in a closed-set decision, such as selecting a tool. Prompting a large language model for it is slow and order-sensitive. We ask how small an encoder for such decisions can be and whether it should read the options jointly or separately. In a three-seed study at 32 million parameters, per-option scoring beats joint scoring on a held-out sample of a 37-benchmark decision suite by 5.8 points of chance-corrected skill at matched optimizer steps and by 2.8 at approximately matched training compute; two external benchmarks agree, though not significantly on their unseen tasks. Crossing reader with initialisation shows that the advantage requires a reranker initialisation, whose query-candidate pair input matches per-option reading; from the raw encoder the two readers are indistinguishable. Per-option scoring needs 5 to 13 times more encoder passes: at most twice the median latency, but more than four times the mean. Of six released joint encoders (17 million to 1 billion parameters), the 68- and 150-million-parameter models exceed a 435-million-parameter DeBERTa-v3 zero-shot classifier by 4.9 and 5.9 accuracy points on 209 overlap-audited System1-Arena tasks and are at least on par with it on the 145 tasks unseen in training. The smallest answers a median request in 14 milliseconds on 16 processor threads, against 728 for the classifier. Reordering options changes 12 to 23% of the joint models' answers (per-option scoring: none). Up to 68 million parameters, they lead their size range on a public leaderboard's private, mainly in-distribution tests.
Figures & tables
| Benchmark (unit) | Unseen | Seen: split | Seen: overlap | Unseen items |
|---|---|---|---|---|
| S1-Arena (tasks) | 145 | 25 | 39 | 28,723 / 41,183 |
| BTZSC (datasets) | 4 | 12 | 6 | 18,852 / 172,501 |
| Model | Params | Layers/dim | Teacher | Cost (US$) |
| Crivo-17M | 16.9M | 7 / 256 | Crivo-150M v1 | 13–16 (with 68M) a |
| Crivo-32M | 32.0M | 10 / 384 | Crivo-400M | 10 (with 150M) a |
| Crivo-68M | 68.4M | 19 / 512 | Crivo-400M | (with 17M) |
| Crivo-150M | 149.6M | 22 / 768 | Crivo-400M | (with 32M) |
| Crivo-400M | 395.8M | 28 / 1024 | none | 28 |
| Crivo-1B | 1.03B | 28 / 1792 | none | 26 |
| Arm | pub15 skill | S1-60 acc. | S1-60 unseen | BTZSC-500 F1 | unseen-4 F1 | S1-60 Brier | pub15 ECE | Perm. flips |
|---|---|---|---|---|---|---|---|---|
| Mean s.d. over 3 seeds | ||||||||
| J (released reader) | 0.180 0.002 | 0.406 0.003 | 0.401 0.003 | 0.425 0.069 | 0.386 0.062 | 0.612 0.002 | 0.123 0.017 | 0.277 0.015 |
| J-steps (steps matched to P) | 0.187 0.004 | 0.417 0.014 | 0.406 0.009 | 0.485 0.029 | 0.439 0.020 | 0.602 0.002 | 0.102 0.036 | 0.262 0.030 |
| J-comp (compute matched to P) | 0.217 0.006 | 0.424 0.008 | 0.417 0.009 | 0.532 0.006 | 0.472 0.011 | 0.672 0.008 | 0.040 0.014 | 0.253 0.009 |
| P (per-option) | 0.245 0.003 | 0.455 0.001 | 0.428 0.003 | 0.602 0.022 | 0.497 0.028 | 0.584 0.003 | 0.103 0.019 | 0.000 0.000 |
| J-comp-raw (J-comp from raw encoder) | 0.226 0.013 | 0.416 0.001 | 0.406 0.002 | 0.459 0.011 | 0.431 0.033 | 0.676 0.004 | 0.056 0.039 | – |
| Task-mean accuracy | vs DeBERTa zs-v2 [task CI] | |||||
| System | Params | All (209) [item CI] | Unseen (145) [item CI] | Seen (64) | All tasks | Unseen tasks |
| Crivo-17M | 16.9M | 0.428 [0.423, 0.432] | 0.414 [0.409, 0.420] | 0.459 | +0.011 ∗ [ 0.013, +0.037] | +0.000 [ 0.021, +0.021] |
| Crivo-32M | 32.0M | 0.448 [0.444, 0.452] | 0.429 [0.424, 0.434] | 0.491 | +0.031 ∗ † [+0.007, +0.057] | +0.015 ∗ [ 0.005, +0.035] |
| Crivo-68M | 68.4M | 0.466 [0.461, 0.470] | 0.441 [0.435, 0.446] | 0.522 | +0.049 ∗ † [+0.024, +0.074] | +0.027 ∗ † [+0.004, +0.049] |
| Crivo-150M | 149.6M | 0.475 [0.471, 0.480] | 0.442 [0.437, 0.447] | 0.550 | +0.059 ∗ † [+0.031, +0.086] | +0.028 ∗ † [+0.001, +0.055] |
| Crivo-400M | 395.8M | 0.510 [0.505, 0.514] | 0.474 [0.468, 0.479] | 0.591 | +0.093 ∗ † [+0.066, +0.120] | +0.060 ∗ † [+0.032, +0.086] |
| System | Params | Unseen-4 [item CI] | Seen-18 | All-22 |
|---|---|---|---|---|
| This work (seen-18 = training split seen) | ||||
| Crivo-17M | 16.9M | 0.469 [0.460, 0.476] | 0.523 | 0.513 |
| Crivo-32M | 32.0M | 0.514 [0.506, 0.521] | 0.622 | 0.603 |
| Crivo-68M | 68.4M | 0.553 [0.545, 0.561] | 0.693 | 0.667 |
| Crivo-150M | 149.6M | 0.564 [0.554, 0.572] | 0.695 | 0.671 |
| Crivo-400M | 395.8M | 0.636 [0.627, 0.643] | 0.713 | 0.699 |
| Board | S1-Arena | BTZSC | |||||
| all 209 | unseen | all-22 | unseen-4 | ||||
| System | ECE | ECE | Brier | Brier | ECE | ECE | Brier |
| Crivo-17M | 0.080 | 0.069 | 0.603 | 0.621 | 0.029 | 0.061 | 0.616 |
| Crivo-32M | 0.133 | 0.125 | 0.610 | 0.633 | 0.022 | 0.013 | 0.577 |
| Crivo-68M | 0.103 | 0.133 | 0.595 | 0.625 | 0.040 | 0.087 | 0.520 |
| Crivo-150M | 0.115 | 0.174 | 0.617 | 0.658 | 0.086 | 0.161 | 0.560 |
| A100 GPU, ms | CPU, 16 threads, ms | Board | |||||
| System | med. | mean | p95 | med. | mean | p95 | med. (ms) |
| Crivo-17M | 8.2 | 10.9 | 24.9 | 13.5 | 80 | 486 | 5.9 |
| Crivo-32M | 10.5 | 13.9 | 33.3 | 21.9 | 139 | 856 | 7.6 |
| Crivo-68M | 17.6 | 22.5 | 52.3 | 53.2 | 384 | 2,173 | 12.4 |
| Crivo-150M | 19.8 | 27.5 | 78.4 | 97.3 | 684 | 3,859 | 13.4 |
| Crivo-400M | 24.1 | 37.5 | 129.3 | 253.4 | 1,434 | 7,554 | 16.7 |
| Model | Params | Full 0.4 | Same skills | New domains | Public | Latency (ms) | Group |
| 20M | |||||||
| Crivo-17M | 16.9M | 11.11 | 15.88 | 3.22 | 22.15 | 5.9 / 10.0 | 47 |
| Bekko v0 17M | 17.0M | 5.72 | 5.89 | 4.61 | 7.44 | 6.8 / 16.5 | 51 |
| 32M | |||||||
| Crivo-32M | 32.0M | 13.70 | 18.44 | 5.34 | 27.34 | 7.6 / 11.6 | 45 |
| 68M | |||||||