Final-year dissertation · BSc Computer Science · Lancaster University · 2026

A fake-review detector that shows its working

A system that flags AI-generated product reviews, shows a human moderator why, and is built to avoid falsely accusing real customers.

Real example from the test setModels disagree

“love the fit. needed for work. this pair is my back up pair.”

Ground truthHuman
RoBERTa✗ wrongly flaggedAI
DistilBERT✓ correctHuman

Short, casual human reviews are where detectors go wrong. The project finds these cases, explains them word by word, and picks the model that punishes fewer real customers.

97.9%test accuracy on 8,105 held-out reviews (DistilBERT)
3.5%genuine reviews wrongly flagged, vs 6.1% for RoBERTa and ~13% for the baseline
194 : 50DistilBERT vs RoBERTa correct answers when the two models disagreed
3 of 100real reviews still reached the high-risk queue with high confidence, which is why a person makes the final call
The problem

Accurate detectors exist. Detectors a moderator can trust are harder.

Cheap LLMs make it easy to flood a platform with fake reviews. Transformer classifiers can catch many of them, but they give a score with no reason attached. When one flags a real customer, the moderator has nothing to check it against. I set out to build a detector that behaves like a decision-support tool: accurate, but also open about why it made each call and where it's likely to be wrong.

The challenge

Three questions a moderator needs answered

Is this review fake?

AI-written reviews are cheap to produce at scale. The detector has to catch them reliably, and the final model gets 97.9% of unseen reviews right.

Why was it flagged?

A score on its own can't be checked or argued with. Every flag comes with the words that drove it and a plain-English note.

What if it's wrong?

Accusing a real customer does real damage. The system is tuned to avoid that, and uncertain cases go to a person instead of being acted on automatically.

How I approached it

Decisions driven by the harm, not the leaderboard

Harm-aware model selection

I chose the smaller model because it harms fewer real users

RoBERTa catches the most fakes, but it wrongly flags almost twice as many genuine reviewers. I picked the model that makes fewer false accusations, because accusing a real customer is the costlier mistake in moderation.

Explanation to action

Model output becomes a moderator's report

The report combines the prediction, the confidence and the most influential words into a short verdict with advice. Tools like GPTZero and DetectGPT stop at the score.

Human in the loop

Uncertain cases go to a person

Reviews are routed to High risk Low risk or Ambiguous queues by confidence, so low-confidence calls are never actioned automatically.

Disagreement as a diagnostic

Two models find each other's hard cases

I collected every test review where the models disagreed, then compared which words pushed each model to its opposite verdict.

Results

Both transformers beat the baseline. DistilBERT makes the safer mistakes.

Genuine reviews wrongly flagged

Per 1,000 human-written reviews. Lower is better for users.

Baseline
130
RoBERTa
61
DistilBERT
35
050100150

AI reviews missed

Per 1,000 AI-generated reviews. Lower is better for catching fakes.

Baseline
150
RoBERTa
1.5
DistilBERT
7
050100150

RoBERTa misses about 5 fewer fakes per 1,000 but wrongly accuses about 26 more real customers per 1,000. For moderation, that trade isn't worth it. Overall accuracy: DistilBERT 97.9%, RoBERTa 96.9%, baseline 86.4%.

Who was right when the models disagreed?

244 of 8,105 test reviews (3%). These are the most ambiguous cases in the set.

Explainability in practice

Word-level explanations make the model's mistakes visible

LIME explanation: 'Bought for my 2 year old granddaughter' predicted AI at 0.98; granddaughter, for and Bought push towards Human, my and year push towards AI
A genuine review flagged as AI with 98% confidence. No phrase sounds like AI; ordinary words (“my”, “year”) add up to a confident mistake. The explanation doesn't make the model right, but it gives the moderator something concrete to challenge.
Triage queue (100 test reviews)CountCorrectIncorrect
High risk predicted AI51483
Low risk predicted human48471
Ambiguous manual review101
Total100955

The triage run is where I found the system's main weakness. Three false positives reached the high-risk queue with over 89% confidence, and a threshold can't catch that. I report this openly, and it's the main reason the tool supports moderators rather than replacing them.

Key findings

What the project showed

Skills demonstrated

What this project shows I can do

Fine-tuning transformers

Adapted two pre-trained language models to this task, with a test set kept unseen until the very end.

Evaluation beyond accuracy

Judged models by the kind of mistakes they make and who those mistakes hurt, then tested for shortcuts.

Explainable AI

Word-level explanations for individual decisions, compared side by side across two models.

Building for real users

Output that non-technical moderators can act on, and a workflow that keeps a human in charge of uncertain decisions.

Research and writing

A dissertation that grounds the design in research on content moderation and explainable AI, and is candid about limitations.

Limitations

What I'd do next