Tell it what to do.
Instructions and examples improve behaviour without changing model weights. Try this first; it may be enough.
READSIGIL / SMALL LANGUAGE MODELS
Do you need a 70-billion-parameter model to classify a support request? Probably not. Does a smaller model automatically become cheaper, private or trustworthy? Also no. Here's how to decide, build, and measure.
01 / THE BASICS
A small language model is a language model with comparatively few parameters. There is no universal parameter cut-off. It still predicts tokens; being small doesn't make it rule-based, deterministic or immune to hallucination.
Instructions and examples improve behaviour without changing model weights. Try this first; it may be enough.
RAG supplies relevant information at request time. Better for current documents and changing policies than memorising facts in weights.
Adapt weights using labelled examples. Most practical 'build an SLM' exercises start from an existing model, not random initialisation.
02 / MYTHBUSTERS
Make your call on each one before you see the evidence. Every claim has a grain of truth. The catch is where budgets, timelines and audits go wrong.
Depends
Partly true
Busted
Busted
Busted
unknown, not accuracy alone. That is why this lab has an unknown label. See step 01.Busted
--model to swap the base.Busted
Wrong tool
Busted
baseline_classic.py yourself.Depends
Make your call on each claim. Your tally appears here.
None of the ten holds as stated. Three hold only under conditions you would have to measure.
baseline_classic.py on this workshop’s data. No sound.25 of 25 held-out messages sorted correctly by a classical text classifier, trained in 0.19 seconds on the same 75 messages the workshop uses.
No GPU and no model download. The settings were fixed before the test set was scored.
A perfect score is also a warning. Twenty-five clean, single-language messages are too easy to tell models apart. Real customer messages mix languages, misspell words and ask two things at once. That is where the comparison starts to mean something.
Download the baselineTry to beat it
Claim 09: a higher benchmark score means a better model for our task. We tested it on this page’s own data: 75 training messages, 25 held-out messages, five labels. The method is a TF-IDF character n-gram classifier with logistic regression, and no language model. Command: python baseline_classic.py. Output: trained in 0.19 seconds on CPU; 25 of 25 correct; every label 5 of 5. A perfect score is a warning too: this test is too clean to separate models. Beat the baseline before you fine-tune.
03 / WHERE IT FITS
The real decision is rules vs traditional ML vs prompted model vs retrieval vs fine-tuned model. Choose using task-level accuracy, latency, operating cost, privacy and risk—not model size alone.
04 / HANDS-ON WORKSHOP
We'll adapt an existing 0.5B-parameter model to sort fictional banking support messages into five categories. You'll have genuine training code, a separate test set and a report of what changed. Browser steps guide the build; actual fine-tuning runs in Python.
Input: one fictional support message. Output: a single lowercase label. No account action, advice, or financial decision.
cardspaymentsaccountotherunknownWhy unknown? Some messages contain too little information. Forcing a confident answer hides a failure.
Training: 75 invented and labelled messages. Held-out check: 25 separately authored messages, five per category. This tiny dataset teaches the process, not production performance.
My debit card was declined at the supermarket.
EXPECTED OUTPUTcardsThe supplied Python script first runs the unmodified model against the 25 held-out messages. You will later run the adapted model on the exact same set. For a credible comparison, also run a classical classifier that uses no language model. On this test it scored 25 of 25, so a fine-tuned model has to justify its cost against that.
The cheapest baseline, in seconds on any laptop:
python -m pip install scikit-learn python baseline_classic.py
We don't display invented accuracy or simulated model responses here. The scores appear only when you actually run the script.
LoRA freezes the foundation weights and trains a small adapter. You can adjust rank and training epochs; the script will report trainable parameters and save the adapter.
In a terminal, from the slm directory:
python -m pip install -r requirements.txt python train.py --train data/train.jsonl --eval data/eval.jsonl --epochs 3 --rank 8
To run it, you must obtain the model weights and install the dependencies. No model training happens in this web page.
Check out/metrics.json and out/individual_predictions.json after the run. Enter the number of exact matches from your own results to inspect the improvement or regression.
TAKE IT FURTHER
The files are readable Python and JSONL, not a pretend model running inside your browser.
05 / THE DECISION
Start only when the workflow is narrow, frequent, measurable and stable. If an SLM can't beat a cheaper baseline on the metrics that matter, don't deploy it just because the model is fashionable.
Can reviewers agree on the correct answer consistently?
Do you have held-out examples and an explicit threshold for intervention?
Can you monitor quality, protect data and roll back safely?
Qwen2.5 0.5B model card ↗ · PEFT / LoRA documentation ↗ · Hugging Face training guide ↗
The research behind the claims: LoRA ↗ · QLoRA ↗ · Training-data extraction ↗ · Retrieval-augmented generation ↗ · Fine-tuning and hallucination ↗ · GPTQ quantization ↗ · OWASP LLM Top 10 ↗ · NIST AI RMF ↗ · RBI FREE-AI ↗ · OSI Open Source AI Definition ↗
Claims and sources last reviewed 18 October 2026.