Evaluating Small Language Models

How to tell whether a fine-tuned small language model is good enough to ship: teacher evaluation, choosing metrics, building a test set, and why eval scores mislead.

Evaluation is the part of the pipeline that decides whether anything else was worth doing, and it is where most of the avoidable mistakes happen. Not because the metrics are hard, but because the test set is usually built after the fact, from the same distribution as the training data, and therefore cannot detect the failures that matter.

Evaluate the teacher first

Before generating a single training example, check that the teacher model can actually solve your task. This takes minutes and it is the highest-value check in the whole pipeline.

The reasoning is mechanical. The student learns to reproduce the teacher’s behaviour. If the teacher is 75% accurate on your task, the student’s ceiling is roughly 75%, and you will spend a training run and an evaluation cycle discovering something you could have known upfront. A teacher that fails here is a signal to reconsider the task framing or the teacher choice, not to proceed and hope.

Metrics follow the task type

There is no universal metric, and picking the wrong one produces confident nonsense.

Classification has clean answers: accuracy when classes are balanced, F1 when they are not. Accuracy on a dataset that is 95% one class will read 95% for a model that has learned nothing.

Extraction and structured output want exact match, sometimes relaxed to normalised match. Tool calling wants schema validity plus argument correctness. A call with the right function name and wrong arguments is a failure, not a partial success.

Free-text generation is the genuinely hard case. Overlap metrics like BLEU and METEOR were built for machine translation and correlate poorly with quality on generation tasks; they are treated as legacy here for that reason. LLM-as-judge evaluation is the more useful approach, with the caveat that you are now trusting one model’s opinion of another’s.

Why good scores fail in production

The usual cause is that the test set was drawn from the same distribution as the training data. Both are clean, both are representative of what you imagined, and neither resembles what users actually send.

The fix is unglamorous: hold out real examples before training, including the messy ones. If your training data is synthetic and your test set is also synthetic, your evaluation is measuring internal consistency rather than performance.

Comparing the fine-tuned student against the base model on the same test set is the other check worth running. It tells you what the training actually bought, which is a different question from whether the final number looks good.

Where this cluster goes

The articles below cover teacher evaluation, which metric fits which task, sizing a test set, building one that catches real failures, reading the base-versus-fine-tuned comparison, and the twelve-model benchmark that produced much of the data cited across this site.

Accuracy, F1 or Exact Match: Which Metric Should You Use?

A side-by-side comparison of accuracy, F1, exact match, ROUGE-L, LLM-as-a-judge and the tool-calling metrics, with the task each one fits and the specific way each one lies to you.

How Big Should Your Test Set Be?

Published distil labs test sets run from 10 to 374 examples, with 50–250 the working band. Here are the real sizes, the platform defaults, and the resolution each size actually buys you.

How We Benchmarked 12 Small Language Models

The design and results of the distil labs study that fine-tuned 12 small language models on 8 tasks: average ranks, tunability, the student-versus-teacher table, and what the method does and does not establish.

Base Model vs Fine-Tuned Model: How to Compare Them

How to measure what fine-tuning actually bought you: get a base-model score on the same held-out set, train, read both numbers against the teacher, and check the comparison is fair before believing it.

Building a Test Set That Catches Real Failures

A step-by-step recipe for constructing a held-out evaluation set from production traffic: reserving it before the pipeline sees it, seeding it with known failures, and baselining the system you're replacing.

Is Your Fine-Tuned Model Good Enough?

A four-baseline decision framework for shipping a fine-tuned small language model: compare against the base model, the teacher, the system you're replacing, and run-to-run noise before you call it done.

What Is a Held-Out Test Set?

A held-out test set is data the model never saw during training or synthetic data generation. In a distillation pipeline that second clause is where contamination usually gets in.

What Is LLM-as-a-Judge Evaluation?

LLM-as-a-judge scores model output by asking a large model to grade it: the default metric for generation tasks on distil labs, and what it costs you to trust one model's opinion of another.

What Is Teacher Evaluation?

Teacher evaluation scores the teacher model on your held-out test set before any training runs, a feasibility gate that tells you whether the task is solvable and what accuracy the student should be aiming at.

Why METEOR and BLEU Are Legacy Metrics

METEOR has been retired from the distil labs scorecard and BLEU was never on it. Here's what the platform reports instead, and why a whole class of word-overlap metrics misleads on generation tasks.

Why Your Model Passes Eval But Fails in Production

Diagnosing the gap between a good held-out score and bad real-world behaviour: filtered test sets, per-turn scores read as per-session reliability, and evaluation data drawn from the same place as training data.