| ---
|
| library_name: cbct-clinical-reasoner
|
| tags:
|
| - medical-imaging
|
| - cbct
|
| - report-generation
|
| - toothfairy4
|
| - odin2026
|
| ---
|
|
|
| # cbct-clinical-reasoner
|
|
|
| Finding predictor and calibrated report decoder for **ODIN 2026 Task 1
|
| (ToothFairy4)**: generating a maxillofacial surgical-planning report from a
|
| single 3D CBCT volume.
|
|
|
| For each of ~989 clinician-written statements the
|
| model predicts the probability that it applies to this scan; per-statement
|
| thresholds fitted on out-of-fold predictions then decide which to emit. Selecting
|
| from observed clinician phrasing means an entailment failure can only come from
|
| choosing the wrong finding, never from invented language.
|
|
|
| ## Contents
|
|
|
| | Path | Description |
|
| |---|---|
|
| | `bundle/prototypes.json` | Sentence-prototype label space built from the training corpus |
|
| | `bundle/decoder.json` | Per-prototype thresholds calibrated on out-of-fold predictions |
|
| | `bundle/checkpoints/` | Per-fold encoder checkpoints, ensembled at inference |
|
| | `bundle/config.json` | Preprocessing and training configuration |
|
| | `bundle/fallback_report.txt` | Prior-only report used if inference fails |
|
| | `plots/` | Diagnostic figures for every pipeline stage |
|
| | `results.json`, `RESULTS.md` | Metrics with provenance |
|
|
|
| ## Development metrics
|
|
|
| Out-of-fold over 622 public training cases.
|
|
|
| | metric | value |
|
| |---|---:|
|
| | **final** (0.8 clinical + 0.2 captioning) | 0.3544 |
|
| | clinical F1 (offline surrogate) | 0.3861 |
|
| | logical precision | 0.4910 |
|
| | logical recall | 0.3181 |
|
| | BLEU-4 (grader-exact) | 0.1493 |
|
| | METEOR (grader-exact) | 0.3064 |
|
|
|
| ## Ablation
|
|
|
| | variant | final | clinical | BLEU-4 | METEOR |
|
| |---|---:|---:|---:|---:|
|
| | corpus prior (no imaging) | 0.3575 | 0.3937 | 0.1170 | 0.3082 |
|
| | linear, 122 features | 0.3544 | 0.3861 | 0.1493 | 0.3064 |
|
| | fine-tuned encoder (29M params) | 0.3403 | 0.3752 | 0.1331 | 0.2684 |
|
|
|
| Mean out-of-fold mAP across folds: **0.0738**
|
|
|
| ## How to read these numbers
|
|
|
| * **BLEU-4 and METEOR are exact.** They reimplement the grader's own local
|
| implementations and match NLTK to machine precision, so they compare directly
|
| with the public leaderboard.
|
| * **The clinical score is a surrogate.** RadFact carries 80% of the challenge
|
| ranking, but computing it needs an LLM judge. The figure above comes from an
|
| offline lexical entailment model built to *rank* decoder variants cheaply. It
|
| is not the challenge metric — obtain that with
|
| `cbct-reasoner evaluate --radfact-lite`.
|
| * **These are in-domain.** Stratified folds over the public release, not the
|
| hidden 50-case external-centre test set. Leave-one-centre-out
|
| (`--strategy center`) is the honest external estimate and reads lower.
|
|
|
| ## Intended use and limitations
|
|
|
| Research artifact for a benchmark. **Not a medical device.** Generated text is a
|
| draft for review by a qualified clinician and must not be used for patient care.
|
| It has not been validated for any clinical purpose.
|
|
|
| ## Data provenance
|
|
|
| Derived from the access-controlled ToothFairy4 release. `prototypes.json`
|
| contains sentences taken verbatim from clinical reports, so this repository is
|
| **private by default** and must not be made public without checking the
|
| ToothFairy4 data-use agreement.
|
|
|