Skip to content

Build1 publisher3 min readPublished

250 Japanese labels put a 310M encoder 12 points ahead of a hosted decision API

On three Japanese tasks scored against the same 250 frozen rows, a fine-tuned encoder won topic classification by 12 points and tied both polarity tasks, while every zero-shot open-source model in the run lost all three.

The Engineer · Build desk

Illustration accompanying 250 Japanese labels put a 310M encoder 12 points ahead of a hosted decision API

What happened

  • Three Japanese classification tasks of 250 rows each, sharing the same gold labels, were run through six systems in two conditions: zero-shot with no labels, and trained on 250 labels.
  • A 310M encoder fine-tuned on those 250 labels beat TypeSafe's Jev on topic classification by 12.0 points at McNemar p=0.00007 and ran 4 to 20 times faster, while tying Jev on both polarity tasks.
  • GLiClass multilang-mini, from the GLiNER family, scored 62.8 / 87.2 / 44.8 zero-shot against Jev's 76.8 / 94.4 / 74.0 and lost all three tasks.
  • A char n-gram plus logistic regression baseline scored 0.884 against Jev's 0.768 on long-document topic classification, an 11.6 point win for a model that takes five minutes to fit.
  • Laya scored 29.2% on the nine-class task, and on a frozen-question benchmark its hard score was 34.1% despite a model card implying a win over Jev off a fine-tune on that benchmark's training split.

Compiled by The EngineerSomething wrong?How this is made

Why it matters

  • decision The build-or-buy call is settled by whether you can label 250 rows for your task. Pick the architecture after that question is answered, because the same family loses everywhere at zero labels and wins or ties at 250.
  • constraint A task where the label lives in the wording caps what cheap lexical features can reach. On short-text polarity the baseline gave up 20.8 points, and that is where a hosted decision API is still the better buy.
  • exposure Teams shortlisting classifiers from model cards are choosing on a fine-tune they cannot reproduce. A self-reported comparison from a model trained on a benchmark's training split leaves your rows untested.
  • cost The trustworthy version of this comparison costs 250 labeled rows per task, five training runs per reported number, and paired scoring on identical row ids. Whoever owns the encoder repeats that work every time the label set changes.

Task shape here is the difference between a label that sits in the surface words and a label you have to read for. The topic task was livedoor, nine classes [19]. A character n-gram pipeline with logistic regression on top beat Jev there and lost badly on short-text polarity, a swing of 32.4 points for one feature extractor across two tasks [20]. Vocabulary identifies the topic of a long Japanese document, and counting character n-grams finds vocabulary. Short-sentence polarity turns on wording.

The trained system is sbintuitions/modernbert-ja-310m with a classification head, and its numbers are out-of-fold: train on 200 rows, predict the held-out 50, five times, so all 250 reported predictions come from a model that never saw that row [10]. The linear baseline ran the same protocol [10]. That is what makes the two rows comparable.

The tie on polarity is where that discipline matters. At n=250 the independent confidence interval is about plus or minus 6 points [11]. Trained 88.8 against Jev's 94.4 is a gap of 5.6 points [21]. That sits inside the interval, so only a paired test on identical row ids decides it, and McNemar on those ids is how every comparison in the run was scored [11].

Trained on the same 250 labels, the GLiNER-family classifier scored 88.8 / 92.8 / 75.2 [5], gains of 26.0, 5.6 and 30.4 points over its own zero-shot row, all significant [6]. Zero-shot, its three-class polarity score sat 11.5 points above the 33.3 chance line [22].

Two other models in the run failed on the same rows. SemIf, a Qwen3.5-4B system, lost all three tasks, two of them significantly [16]. Laya's median confidence on the nine-class task was 0.029 [14], while a uniform guess over nine classes would assign 0.111, so its median confidence sat below its own prior [23]. Laya's own documentation gives a zero-shot English score of 0.362 [15]. The author of the dev.to post calls this a zero-shot defect and not a Japanese one.

The choice comes down to the labeling cost. Jev costs $0.042 per 1M input tokens with output free, offers roughly 32k of context, returns a confidence number, and needs no training data [7]. If every one of a task's 250 rows filled that window, the run would be 8M tokens, about $0.34 [24]. The adoption cost is 250 labeled rows per task and five training runs per reported number, against an API call that needs neither [10][7].

For 88.8 to transfer to your topic task, three things have to hold: the label set is fixed, the documents are long enough for lexical signal to separate the classes, and you are willing to label 250 rows in the language you actually run. On the third, the author wrote: "A decision API wins when you have no labels; a small trained encoder wins when you have a few hundred" [18].

What to watch

  • Published document lengths for the livedoor rows would show how much of the topic win depends on long inputs.
  • Whether Jev's $0.042 per 1M input tokens with free output holds at production volume.
  • Zero-shot Japanese scores for GLiNER-family models on public row ids, to test whether 44.8 on three-class polarity is representative.
Loading claim ledger
Loading source directory links
Loading share composer
Loading topic controls
Loading related stories