TurboSkillSlug / EVAL_REPORT.md
legendarydragontamer's picture
deploy
51a9974
|
Raw
History Blame Contribute Delete
3.66 kB
# Groundedness Eval: does the fine-tuned 1.5B hallucinate more than the 7B it replaces?
TurboSkillSlug's whole promise is a witness that only says what it saw. So the
extraction model has one job above all others: do not invent facts. This eval
measures exactly that, comparing the shipped fine-tuned 1.5B LoRA against the
Qwen-7B it replaced and against its own un-tuned 1.5B base, on 25 held-out
transcripts the LoRA never saw in training.
## Setup
- **25 held-out transcripts** (never in the 167-pair training set).
- **Three systems**, same prompt, same decoding (temp 0.3, top-p 0.9, 768 tokens):
prompted Qwen-7B, prompted Qwen-1.5B base, fine-tuned 1.5B LoRA.
- **Two groundedness metrics per extracted fact** (approaches, dead ends,
breakthroughs, gotchas):
- *Lexical*: fraction of the fact's content words present in the transcript.
- *Semantic*: max cosine similarity of the fact's embedding to any sentence
window of the transcript (all-MiniLM-L6-v2), grounded if >= 0.55.
- **Raw generations saved before scoring**, so the metric can be revised
without re-running the models.
## Results
| system | semantic | lexical | mean sim | parse | facts |
|-----------------|---------:|--------:|---------:|------:|------:|
| prompted 7B | 0.716 | 0.576 | 0.640 | 24/25 | 272 |
| prompted 1.5B | 0.565 | 0.390 | 0.567 | 21/25 | 140 |
| **LoRA 1.5B** | **0.762**| 0.378 | 0.649 | 21/25 | 195 |
## What this shows
**The fine-tuned 1.5B matches and slightly exceeds the 7B on semantic
groundedness (0.76 vs 0.72), at roughly a third of the active parameters.**
The mean per-fact similarity agrees (0.649 vs 0.640).
The lexical and semantic metrics disagree sharply for the LoRA: it has the
*lowest* lexical overlap (0.378) but the *highest* semantic groundedness
(0.762). That gap is the point. The fine-tune taught the model to restate the
transcript's meaning in its own words rather than copy spans. Word-overlap
scoring punishes that; embedding scoring credits it. The LoRA paraphrases
faithfully, which is what a good extractor should do.
## What this does NOT show, and the caveats we are not hiding
- **The LoRA is less reliable at producing valid JSON: 21/25 vs the 7B's
24/25.** That is a real cost of the smaller model. In the live app a
brace-walking parser and field validators recover most malformed output, but
the raw parse rate is what the table reports, unsoftened.
- **The semantic threshold is imperfect.** A calibration block of six
hand-labeled cases (run before scoring, printed in the logs) passed 5/6: one
true paraphrase fell just under the 0.55 line. The single miss is a
*false negative* (a grounded fact scored ungrounded), which means the LoRA's
real groundedness is if anything *underestimated* here, not inflated. We
report the number the fixed threshold produced rather than tuning it after
seeing results.
- **25 transcripts is a small sample.** Treat the gaps as directional, not
precise. The LoRA-vs-7B semantic difference is small enough that the honest
claim is "matches or slightly exceeds," not "beats."
## Honest one-line summary
A 1.5B LoRA fine-tune reaches 7B-level semantic groundedness on held-out
sessions at a third the active size, by learning to paraphrase rather than
copy; it pays for this with a lower valid-JSON rate (21/25 vs 24/25), and the
metric itself is calibrated to within 5/6 on known cases.
---
*Reproduce:* `modal run semantic_eval.py`. Raw generations, per-fact scores,
calibration outcome, threshold, and embedding model are all saved in
`eval_results_semantic.json` and `eval_raw_outputs.json`.