← Back to selected work

Applied AI / preference modeling

LLM Response Quality Classification

I started with a small rubric for reviewing response quality, then moved to a larger question: can a model predict human preferences while admitting that reviewers sometimes disagree?

Research question

Can a text model tell the difference between a clear winner and a genuinely ambiguous comparison?

The main data source is the public Arena preference export. Each record contains a prompt, two responses, and a human vote. Instead of collapsing every vote into a binary winner, the pipeline keeps model A, model B, tie, and tie (bothbad) as separate outcomes.

Current scale: 135,634 votes, 53 models, 126 languages, and a 27,127-row temporal test held out from later model selection.
Dataset / protocolSizeNotes
Arena export135,634 votes53 models; 126 languages
Development pool108,507 rowsGrouped by normalized question
Frozen temporal test27,127 rowsHeld out before formal baseline
Primary metricMacro-F1Accuracy and tie recall reported alongside

Evaluation design

The split is part of the model

  1. A

    Start with the label

    The task has four outcomes: model A wins, model B wins, tie, or both responses are bad. Keeping the two tie outcomes matters because a winner-only classifier can hide disagreement.

  2. B

    Keep prompts together

    The development folds are grouped by a normalized question so a near-duplicate prompt does not appear in both training and validation.

  3. C

    Separate development from test

    Model selection uses the chronological train pool. A separate 27,127-row temporal split is frozen for the formal baseline.

  4. D

    Compare simple models first

    Word and character TF-IDF provide interpretable references before introducing soft targets or a neural scorer.

  5. E

    Model disagreement explicitly

    Soft-label training and pairwise scoring are evaluated with tie recall, Macro-F1, calibration, and error slices rather than accuracy alone.

  6. F

    Keep the encoder result honest

    The pretrained pairwise encoder is still a development experiment. More rows did not automatically produce a better Macro-F1.

Model comparison

More complexity did not automatically solve the hard part

The development metric is Macro-F1 because the two tie classes are smaller than the two winner classes. Tie recall is reported separately because a system that never predicts ties can still look acceptable on accuracy.

ModelAccuracyMacro-F1Tie recallMacro-F1 95% CIProtocol
Word TF-IDF0.36090.25080.1005[0.2323, 0.2693]3 seeds × 3-fold
Character TF-IDF0.35220.2488[0.2304, 0.2672]3 seeds × 3-fold
Class-balanced soft-label TF-IDF0.32270.28500.3385[0.2833, 0.2867]3 seeds × 3-fold
Pairwise TF-IDF ranker0.28820.26740.7016[0.2481, 0.2866]3 seeds × 3-fold
Pairwise BERT, 2K MPS0.28600.24160.65462 epochs; 3-fold
Pairwise BERT, 5K MPS0.26040.23980.69892 epochs; 3-fold
Formal locked word TF-IDF0.34630.2505single test value27,127 frozen rows
Macro-F1 and tie recall across LLM preference models
Development and formal baseline values are shown together, with the protocol kept in the table above.
Development selection and frozen baseline Macro-F1
The locked comparison is a reference, not a head-to-head model selection result.

What changed with soft labels

The best current model trades some winner accuracy for better disagreement coverage

The class-balanced soft-label TF-IDF model reached mean Macro-F1 0.2850 and mean tie recall 0.3385 across three seeds. Its accuracy was lower than the hard-label baseline. That is not a universal improvement; it is a deliberate choice to make ambiguous judgments visible.

Training targetAccuracyMacro-F1Tie recallECE
Hard-label TF-IDF0.36620.25950.1005
Class-balanced soft-label TF-IDF0.32270.28500.33850.0179
Hard-label and soft-label metrics across three seeds
Soft-label training lowers accuracy while improving Macro-F1 and tie recall in the development protocol.

The pairwise TF-IDF ranker pushed tie recall to 0.7016, but its Macro-F1 was 0.2674. It shows that the score-difference structure is useful, while the underlying response-quality scorer still needs work.

Pretrained encoder

The encoder is currently an exploratory result

The shared BERT pairwise scorer was run locally with MPS on 2K and 5K rows. The 5K run reached Macro-F1 0.2398 and tie recall 0.6989. It is not selected as the final model. The next fair comparison would fix the seeds, epochs, token budget, and development folds before any new locked evaluation.

Pairwise scorerAccuracyMacro-F1Tie recallTraining
Pairwise TF-IDF0.28820.26740.70163 seeds
Pairwise BERT, 2K MPS0.28600.24160.65462 epochs
Pairwise BERT, 5K MPS0.26040.23980.69892 epochs

Error and slice analysis

The weak slice is creative writing, not the largest language group

These are descriptive word-TF-IDF out-of-fold slices. The sample size is shown because a higher slice accuracy is not automatically more reliable when the slice is small.

SliceAccuracyRows
Russian0.402184
Polish0.391297
Hard prompt0.3721,446
Code0.367849
English0.3581,574
Math0.348264
No domain knowledge0.317526
Creative writing0.288264
Accuracy across selected LLM response quality slices
Creative-writing prompts are the weakest selected slice in this run. These differences are not causal estimates.

Formal locked evaluation

The locked result is reported once and then left alone

The word-TF-IDF baseline was trained on 5,000 sampled train-pool rows and evaluated on all 27,127 frozen temporal rows. This table is a final reference point; it is not used to tune the newer soft-label or encoder models.

MetricValueEvaluation set
Accuracy0.346327,127 locked rows
Macro-F10.250527,127 locked rows
Weighted-F10.316027,127 locked rows

Takeaway

The useful result is a better evaluation question

The hard-label baseline learns a winner signal but misses disagreement. Soft targets improve the balance between winner and tie classes, while pairwise scoring makes the disagreement trade-off easier to inspect. The current evidence supports the evaluation design; it does not support claiming that the pretrained encoder is already the best model.

Read the code and reports on GitHub