Quality score
held-outHigher is better (0–100)Measures: Overall note quality for the demo gate — structure, necessity, grounding, claims, and safety.
Weighted composite from structure presence/richness, medical-necessity cues, claim grounding, and the omit>fabricate safety composite.
SOAP structure
bothHigher is betterMeasures: Whether Subjective / Objective / Assessment / Plan are present and how rich each section is.
Binary presence (≥24 chars) plus length bands and section-cue heuristics (symptoms, measures, diagnosis, follow-up). Six-metric blends ratio + richness into one score.
QA factual consistency
six-metricHigher is better (0–1)Measures: Whether key facts from the transcript show up in the note (QAGS-lite).
Extracts short clinical “answers” from the transcript and checks note/claim support. Labeled proxy for full T5+DistilBERT QAGS.
Claim grounding
held-outHigher is betterMeasures: Fraction of note claims that overlap the transcript (FactEHR / Omi-style).
Token-overlap between note sentences / CAP claims and transcript spans. Also drives ungrounded rate (fabrication soft signal).
SciBERT BERTScore
six-metricHigher is better (F1)Measures: Semantic similarity of note vs transcript using SciBERT token embeddings.
Python transformers path (`allenai/scibert_scivocab_uncased`). Falls back to a labeled lexical token-F1 proxy if neural weights are missing.
BioBERT similarity
six-metricHigher is better (cosine)Measures: Clinical embedding cosine between note and transcript.
Mean-pooled BioBERT (`dmis-lab/biobert-v1.1`). Lexical proxy when neural path fails.
Fluency / perplexity (PPL)
bothRaw PPL ↓ better · fluencyScore ↑ betterMeasures: How fluent / predictable the note text is under a small language model — a writing-quality proxy used in prior CAT evals.
Prefer real GPT-2 perplexity via local `openai-community/gpt2` (Python). Score maps PPL≈18–40 → 0–1. If GPT-2 is unavailable, a labeled structure-richness proxy still fills the column; path to full PPL is documented. Together logprobs are not wired yet.
Six-metric and held-out/lab share this path. Env: SKIP_FLUENCY_PPL=1 or LAB_SKIP_FLUENCY_PPL=1 for proxy-only.
Per-section LLM judge
six-metricHigher is better (0–1 mean)Measures: Clinical coherence of each SOAP section vs the transcript.
DeepSeek-R1-class distill on Together rates S/O/A/P and lists unsupported sentences. Deferred (no score) if Together is missing or SKIP_SECTION_JUDGE=1.
Safety / omission composite
held-outHigher is betterMeasures: Prefer missing safety facts over fabricating unsupported claims (Omi-style omit > fabricate).
Checklist for SI, meds, follow-up, measures → omissionCoverage. safetyScore = 0.65×omissionCoverage + 0.35×(1−ungroundedRate).
PDSQI-9 subset (heuristic)
held-outHigher is betterMeasures: Accurate / Thorough / Useful / Organized — offline PDSQI-9 lite.
Derived from structure, claims, omissions, and necessity cues. Default gate when no LLM judge is run.
PDSQI-9 subset (LLM judge)
held-outHigher is betterMeasures: Same four attributes rated by a Together chat model.
Enabled with PDSQI_LLM_JUDGE=1. Never OpenAI. Stub mode documents deferred without API calls.
Regression gate
labHigher is betterMeasures: Simple 0–1 pass bar used by the product gate (≥ ~0.72 historically).
Normalized view of quality for promote/compare checks on /lab and /soap.
Grounding coverage
labHigher is betterMeasures: How much of the note is tied to Linked Evidence / utterance provenance.
Counts grounded snippets and overlapping utterance IDs from the hierarchy.