The Zero-Shot Plateau A fine-tuned RoBERTa encoder reached 0.78 macro-F1 on a 1,232-item test split of the author's tldr_news classification taxonomy, 30 to 40 points above every zero-shot system tested, including Anthropic's Claude Haiku 5.5 at 0.409 and Cloudflare's distilled 9B clef-flash at 0.466, according to a benchmark post by Jules Belvéze. The seven zero-shot systems, spanning 0.4B to 27B parameters plus two undisclosed-size APIs, all landed between 0.38 and 0.47 on the custom taxonomy while scoring 0.88-0.93 on AG News, which the author attributes to label conventions that one-line class descriptions cannot convey. LoRA fine-tuning Tev1-4B closed the gap with RoBERTa by 100 labels, both at 0.55, after the 4B model led at 25 labels, 0.45 to DistilBERT's 0.27. The Zero-Shot Plateau https://julesbelveze.github.io/zero-shot-plateau/ My last post https://julesbelveze.github.io/small-specialized-models/ made a narrow claim: on a classification taxonomy of my own, a fine-tuned encoder beats the zero-shot “decision models” everyone shipped this autumn by about 30 macro-F1 points, at a fraction of the cost. Four fair objections came up, all some version of “you went easy on the zero-shot side”: - Use a bigger or better zero-shot model. - Fine-tune the decision model, then. - Escalate the hard cases to a frontier LLM. - Route on the confidence scores instead of taking the top label. So I ran all four on the same dataset split. The short spoiler: two of the four roads dead-end on the same plateau, one works but mostly proves the labels were the point all along, and the last one works. Same disclosure as before: my dataset, my label mapping, my class descriptions. Every number shares the same seeded stratified split 1,232 test items , body-only input, macro-F1. “Use a bigger zero-shot model” The obvious gap in the first post was that I never tried a general-purpose LLM. So I added Claude Haiku 5.5, which Anthropic had just repriced https://venturebeat.com/technology/anthropic-launches-claude-haiku-5-5-with-90-api-price-reduction-matching-gpt-6-luna to $0.10 per million input tokens and markets for exactly this: high-volume classification and routing . Gave it the same five label descriptions every decision model got, without examples. It scored 0.409, right in the middle of the decision-model pack. Here is the whole zero-shot field now: seven systems, five of them ranging from 0.4B to 27B parameters and two that don’t disclose a size. | System | Params | tldr news custom | AG News benchmark | |---|---|---|---| | laya | 0.4B | 0.381 | 0.929 | | Jev API | undisclosed | 0.407 | 0.884 | | Haiku 5.5 | generalist | 0.409 | 0.899 | | Tev1-4B | ≈5B | 0.410 | 0.896 | | Strands Decider | 2B | 0.418 | 0.902 | | Clef | 27B | 0.419 | 0.904 | | clef-flash | 9B | 0.466 | 0.904 | From a 0.4B router to a 27B joint-head model to a general-purpose LLM, every zero-shot approach lands between 0.38 and 0.47 on my tldr news taxonomy and jumps to 0.88-0.93 on AG News. A fine-tuned RoBERTa sits at 0.78 on the same split, 30 to 40 points above the entire field, for seven cents of training. The ceiling is informational: a one-line description like “Business & Strategy: company news, markets, funding rounds” pins down maybe 40% of my editorial calls. The rest lives in conventions that exist only in my labels. No count of parameters recovers information that was never in the prompt. Putting labeled examples in the prompt lifts it about ten points at best, still far short of a fine-tune