EXP / 007
Fine-tuning a small model to classify reviews (LoRA)
Fine-tuning a 1.5-billion-parameter model with LoRA to classify short football performance reviews, and what the evaluation does and does not show.
Model: Qwen2.5-1.5B-Instruct, LoRA adapter
Objective
Find out whether a LoRA adapter makes a small open model better at labelling a performance review as positive, neutral or negative, and at answering in a format a program can read.
Problem investigated
Small models often ignore the required answer format or lean toward the wrong label, and classifying reviews by hand does not scale. Fine-tuning is a candidate fix, but only a fair evaluation can say whether it helps.
Approach
The base model, Qwen2.5-1.5B-Instruct, was loaded with 4-bit quantization on a Colab T4 GPU and trained with a LoRA adapter (rank 16, alpha 32, on the attention query and value projections) for three epochs, with a system instruction and a JSON answer holding a single sentiment field. The training set was one file of 75 short reviews, 25 per class. The comparison switches the adapter off and on over the same model, with greedy decoding, and counts correct labels, invalid answers and a confusion matrix.
Results
On the same 75 reviews used for training, the model without the adapter labelled 55 correctly and the adapted model 63. Invalid answers fell from 13 of 75 to 1 of 75. Negative reviews found rose from 14 of 25 to 22 of 25, and positive reviews from 23 of 25 to 25 of 25, while neutral reviews found fell from 18 of 25 to 16 of 25 and neutral reviews labelled positive grew from 5 of 25 to 9 of 25. Because these reviews were also the training data, the counts show what the adapter learned, not how it would perform on new reviews.
Limitations
There is no held-out test set. The write-up of the exercise describes a stratified split with one fifth of the data held out, but the notebook I kept evaluates the whole file it trained on, so I treat every count above as measured on training data and as no evidence of generalization. 75 reviews, one run and one seed are a very small sample, with no confidence interval. Label quality depends on how clearly positive, neutral and negative were defined, and ambiguous examples hurt both training and evaluation. One answer from the adapted model was still invalid, and neutral descriptions of facts (a yellow card, having started the match) drifted toward positive. It is not ready for unattended use.
What I learned
A higher count is not evidence until the test data is kept apart from training: here the same file feeds both, so the table cannot say whether the adapter generalizes. Counting format failures separately from labelling errors, and looking at which examples drifted, taught more than the headline number. Next time I would split the data first, freeze the test set and repeat with other seeds.