PACT: Pairwise-Anchored Calibrated Tuning for Single-Token Typed Decisions
Organizations: Victoria University of Wellington Wellington, New Zealand
Abstract
Single-token typed-decision models answer a schema question by reading the logits of a few one-letter answer codes at a single position: they are fast and return a probability for every allowed answer, but they are trained with plain cross-entropy that ignores most of the structure in their training data. We study such a model whose data is curated as contrastive pairs---two contexts that differ in one edited fact that flips the answer---each carrying a machine-checked certificate that deleting the decisive sentence makes the fact unknown. We propose PACT, which turns this structure into four training terms that need no new annotation: a difference-in-differences margin over each pair that is invariant to any shared logit offset, a permutation-consistency term against answer-code position bias, an evidence-necessity term on certificate-verified ablated contexts, and an ordinal transport cost for rubric fields, plus a three-parameter contextual temperature. On a frozen 324-item holdout with three seeds, PACT matches the published recipe in accuracy ( vs. ; McNemar at every seed) while giving the lowest position bias of all runs (answer flips under relabelling vs. ) and the lowest ordinal error on rubric fields (MAE vs. ). Against a control with the same optimiser and schedule but cross-entropy only, PACT is significantly more accurate at two of three seeds, halves the seed-to-seed spread and lowers NLL by . Seed-matched ablations and pre-specified falsification tests locate these gains precisely: no single term raises raw accuracy, and the method's value lies in robustness and stability rather than headline accuracy. Code, data splits, trained adapters, and all run records are available at https://github.com/BennyLinntu/PACT-Pairwise-Anchored-Calibrated-Tuning-for-Single-Token-Typed-Decisions.
Figures & tables
| Split | Fam. | Records | Pairs | Choice | Bool. | Score | Role |
|---|---|---|---|---|---|---|---|
| Training | 30 | 2,334 | 1,167 | 766 | 796 | 772 | train |
| Selection | 2 | 116 | 58 | 26 | 32 | 58 | select |
| Calibration | 2 | 226 | 113 | 64 | 60 | 102 | fit |
| Holdout (frozen) | 6 | 324 | 162 | 146 | 114 | 64 | test only |
| Run | Objective | Views ‡ | Opt. | Seeds |
| Base model | – (adapter off) | – | – | – |
| Nimble recipe | 2/0/0 | A | 3 | |
| CE-only | 2/0/0 | B | 3 | |
| PACT | Eq. ( 6 ) | 2/2/1 | B | 3 |
| , , | PACT minus one term | 2/2/1 | B | 1 |
| PACT minus JSD | 2/2 ∗ /1 | B | 1 |
| Run | Acc. | Pair acc. | NLL | Brier | ECE | ECE T | AURC | Score MAE |
|---|---|---|---|---|---|---|---|---|
| Base model | 66.4 | 35.8 | 1.094 | 0.549 | 24.6 | – | – | 0.571 |
| Nimble recipe | 85.2 2.1 | 71.0 3.9 | 0.449 0.110 | 0.236 0.042 | 9.5 3.4 | 5.4 0.8 | 3.41 0.55 | 0.311 0.030 |
| CE-only | 82.2 6.0 | 70.2 6.2 | 0.760 0.296 | 0.305 0.110 | 14.3 6.4 | 10.3 4.7 | 4.46 2.94 | 0.322 0.153 |
| PACT (ours) | 84.6 2.8 | 73.3 6.2 | 0.560 0.088 | 0.251 0.026 | 10.8 1.7 | 7.9 1.1 | 3.95 1.03 | 0.232 0.120 |
| Seed | PACT | Ctrl. | 95% CI | |||
|---|---|---|---|---|---|---|
| PACT vs. Nimble recipe | ||||||
| 17 | 84.0 | 84.0 | 0.0 | 19/19 | 1.000 | [ 3.7, +3.7] |
| 18 | 82.1 | 84.0 | 1.9 | 25/31 | 0.504 | [ 6.5, +2.8] |
| 19 | 87.7 | 87.7 | 0.0 | 27/27 | 1.000 | [ 4.6, +4.3] |
| PACT vs. CE-only | ||||||
| 17 | 84.0 | 87.3 | 3.4 | 13/24 | 0.099 | [ 7.1, +0.3] |
| Run | Acc. | Pair | ECE | TV | Flip | |
|---|---|---|---|---|---|---|
| Base model | 67.6 | 38.3 | 21.4 | 12.0 | 23.5 | +1.2 |
| Nimble recipe | 85.7 2.6 | 72.4 4.4 | 4.7 1.0 | 6.9 0.9 | 13.8 1.8 | +0.5 |
| CE-only | 84.6 4.6 | 73.3 6.8 | 8.2 3.4 | 7.4 1.6 | 12.1 3.8 | +2.4 |
| PACT (ours) | 83.8 2.6 | 72.4 5.5 | 8.6 1.6 | 5.6 1.4 | 9.8 2.1 | 0.7 |
| Variant (seed 17) | Acc. | Pair acc. | NLL | ECE | AURC | Score MAE | TV K=4 | Flip K=4 |
|---|---|---|---|---|---|---|---|---|
| PACT (ours) | 84.0 | 72.8 | 0.659 | 12.6 | 4.44 | 0.229 | 5.0 | 8.0 |
| 84.3 | 71.6 | 0.491 | 11.1 | 2.74 | 0.284 | 5.3 | 9.6 | |
| 87.7 | 79.6 | 0.513 | 7.5 | 2.82 | 0.138 | 4.8 | 9.3 | |
| 80.9 | 64.8 | 0.545 | 10.3 | 6.63 | 0.344 | 11.7 | 17.6 | |
| 84.3 | 70.4 | 0.388 | 5.8 | 3.43 | 0.282 | 8.9 | 15.7 | |
| permuted views | 84.9 | 74.1 | 0.510 | 8.8 | 3.51 | 0.356 | 6.6 | 13.0 |
| H | Prediction | Evidence | Verdict |
|---|---|---|---|
| H1 | loses more pair accuracy than accuracy | Seed-matched, : accuracy pp, pair accuracy pp (direction as predicted); under the direction reverses ( / pp). Mechanism confirmed: rises from to nats (Fig. 9 ). | INCONCLUSIVE |
| H2 | Lower TV/flip than CE-only; smaller gain | TV 5.6 vs. 7.4%, flip 9.8 vs. 12.1%, vs. pp; also below the Nimble recipe. Seed-matched: dropping the JSD term raises flips 8.0 9.3%, dropping all permuted views 8.0 13.0%. | SUPPORTED |
| H3 | more confident on ablated contexts; no better pair accuracy | Confidence on ablated contexts was not logged for (untested half). Pair accuracy pp, accuracy pp, TV 5.0 11.7%; with the ablated-context gap shrinks from 3.4 to 0.1 nats. | PARTLY TESTED |
| H4 | raises Score MAE at similar Score accuracy | Score MAE 0.229 0.282, but Score accuracy is not similar (79.7 84.4%). Multi-seed: lowest Score MAE of all arms; Score accuracy above the Nimble recipe at all three seeds. | PARTLY SUPPORTED |
| H5 | ECE falls under , accuracy kept | Holdout ECE lower in 9/9 runs (PACT 10.8 7.9%); accuracy unchanged by construction; AURC slightly worse (3.95 4.21). | SUPPORTED |
| Run | Steps | Views/pair | Hours | Peak GiB | Acc. |
|---|---|---|---|---|---|
| Nimble recipe | 292 | 2.0 | 0.26 | 21.8 | 85.2 |
| CE-only | 584 | 2.0 | 0.50 | 21.8 | 82.2 |
| PACT | 584 | 5.0 | 1.37 | 28.8 | 84.6 |
| 584 | 5.0 | 1.37 | 28.7 | 84.3 | |
| 584 | 5.0 | 1.36 | 28.7 | 87.7 | |
| 584 | 4.0 | 1.06 | 26.4 | 80.9 |
Appendix figures & tables4 assets
Supplementary material from the paper’s appendix.
Appendix
| Run | Seed | Choice | Boolean | Score | Score MAE |
|---|---|---|---|---|---|
| Base model | – | 59.6 | 84.2 | 50.0 | 0.571 |
| Nimble recipe | 17 | 80.8 | 95.6 | 70.3 | 0.326 |
| Nimble recipe | 18 | 81.5 | 94.7 | 70.3 | 0.331 |
| Nimble recipe | 19 | 84.9 | 97.4 | 76.6 | 0.277 |
| CE-only | 17 | 78.8 | 97.4 | 89.1 | 0.182 |
| CE-only | 18 | 68.5 | 94.7 | 57.8 | 0.486 |
| Calib. split | Holdout | |||||
|---|---|---|---|---|---|---|
| Run | Seed | pre | post | pre | post | |
| Nimble recipe | 17 | 1.85 [1.10, 2.89] | 14.4 | 6.5 | 13.3 | 5.8 |
| Nimble recipe | 18 | 1.54 [0.99, 2.00] | 11.4 | 8.3 | 8.3 | 6.0 |
| Nimble recipe | 19 | 1.85 [1.28, 2.41] | 16.1 | 9.1 | 6.8 | 4.5 |
| CE-only | 17 | 2.01 [1.78, 2.23] | 15.5 | 6.0 | 7.6 | 4.9 |
| CE-only | 18 | 2.12 [1.95, 2.32] | 15.7 | 4.5 | 20.4 | 13.0 |
| Setting | Value |
|---|---|
| Base model | Qwen3.5-9B, BF16, SDPA attention |
| Max. prompt length | 2,048 tokens (longest seen: 1,098) |
| LoRA | rank 16, =32, dropout 0.05, rsLoRA |
| LoRA targets | q,k,v,o,gate,up,down (language model) |
| Optimiser | AdamW, lr , weight decay 0 |
| LoRA+ ratio | 8 (lr of / lr of ) |
Language Model Post-Training
Language model post-training adapts pretrained models to follow instructions, reason, use tools, and meet task-specific or human-defined goals.
See all 190 papers