Who are you listening to
Two numbers make the patient: how severe, and where the damage is. Change them and the same pictures produce a different person, with her own words, her own errors and her own course of therapy.
What the two lesion weights are
In the Dell semantic-phonological model, naming is two steps: meaning activates a word, then the word activates its sounds. Each step runs over a connection weight. Healthy speakers have both at about 0.04. A weak semantic weight (s) lets neighbouring words win, so the patient says chair for bench or home for house. A weak phonological weight (p) lets the sounds come out wrong, so the patient says kwiyd for queen. The population prior that picks s and p was fitted to 74 real PSST participants; Dell's original prior is kept as an alternative.
The patient names pictures
She looks at the picture, pauses for as long as the engine says the response took, then says it. Nonwords are spoken from their phoneme string. The framing around the word, "uh", "it's a", a false start, is sampled from how real PSST patients framed theirs.
Diagnose the patient from what you heard
The fitter estimates the two lesion weights from the pattern of response types alone. This is the same grid likelihood that reproduced Dell's published patients. Watch it narrow as answers arrive, then reveal the truth.
How to read the heat map
Each cell is one possible patient: a semantic weight (left to right) and a phonological weight (bottom to top). Brightness is how likely that patient would have produced the response types heard so far. Healthy speakers sit at the top right, around 0.04 on both. Semantic errors pull the estimate left; nonwords pull it down. With 8 to 10 answers the bright region usually contains the truth; with 30 it is a small blob.
Two therapists treat the same patient
A course of therapy personalised to her: twenty words she struggles with, four sessions over ten days, scored the way a real study scored it, by what she can still name unaided a week and a month later. Both therapists run on identical copies of her with identical dice, so the difference is the therapy, and every line is the engine's own prediction.
What the trainer learned, on 80 held-out patients
- Spaced retrieval with no cues: +0.32 retention at one week. The trained policy: +0.32, cueing on 1% of trials. Cueing hierarchy: +0.29. Errorless (whole word every time): +0.26. Massed practice: +0.23.
- Why an override rarely lifts the curve. In the fitted learning layer a cue raises the chance of success now, but a cued success lays a weaker memory trace (0.79 against 1.00 for an unaided success; a failure followed by the word lays 0.59). The arithmetic favours a first-sound cue only while the word is still below about 40% retrievability, and retrying a word right after failing it also loses the spacing benefit. The trained policy already sits at this model's optimum, so a clinician's override is adopted faithfully and then priced: on severe patients it can edge the curve up, on moderate ones it costs a point or holds even. The trace weights for cued successes are assumptions, not fitted, so this is the engine's current opinion, not a verdict on cueing.
- The policy rediscovered spaced, uncued retrieval practice, the best clinical practice, and found nothing better. A cue buys success now and a weaker memory trace later; that trade-off is the fitted learning layer's, not an assumption of the trainer.
- One clinician override moves the policy in about 10 of 160 states, half of them the same kind of situation, none unrelated.
Where the physician comes in
The trained therapist is generic: one policy for every patient the engine can produce. A clinician is not. She knows this patient, her frustration, the cue that works for her and the one that patronises her. DITTO is the mechanism that lets a clinician's corrections become the agent's rules: each correction is treated as preferred over what the agent would have done, the agent is retrained against its original self as an anchor, so it changes where the clinician meant and nowhere else. This step shows the loop, what it does over months of use, and the mechanism running live on the policy from step 4.
The agent proposes a word and a cue. The clinician, watching, would have done something else and says so. DITTO treats her choice as preferred over the agent's and retrains the policy against its original self. The engine then checks every recorded moment: the rule now fires where she meant it, and nowhere else.
Honest footnotes
- The live block is real: DITTO (agents/ditto.py) on the MaskablePPO policy from step 4, judged by adoption on moments it was not shown and by leakage elsewhere.
- On this patient model the trained policy already does what the fitted learning layer rewards, so a clinician's rule does not move the retention number here. That is why this step is about the mechanism and what it enables, not about a score.
- The over-time chart is an illustration of the loop's logic with two knobs, not a measurement. Measuring it needs real clinicians correcting a deployed agent.