NeuroCue · patient console

A synthetic aphasia patient you can run experiments on, and a therapist you can correct

Every patient is two lesion weights in a published model of word retrieval. Every therapist is a policy you can watch, question and teach. Every number on this page is produced live by the validated engine, and the page tells you where each one comes from.

PersonalisedSeverity and lesion type make the patient; her words, her errors and her course are hers. Change two numbers and she is someone else.
CustomisableA clinician corrects the therapist a few times and DITTO turns the corrections into a rule, adopted where it applies and nowhere else.
TransparentThe lesion is recoverable from her answers, every curve is the engine's own prediction, and a taught rule shows exactly where it fires.
Enginemodel + fitter loadedtrained policy: checking…
1
Make a patientTwo numbers: how severe, where the damage is.
2
Hear herReal pictures, her errors, spoken the way real patients speak.
3
Diagnose herThe fitter recovers her lesion from her answers alone.
4
Treat herThree therapists on identical copies of her, scored a month later.
5
Bring in the physicianCorrections become rules, adopted where meant and nowhere else.
1

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.

Severity · WAB Aphasia Quotient (0–100, higher = milder)
very severeseveremoderatemild
AQ 60 · moderate · expected naming accuracy for this severity: –
Lesion type · which connections are weak
Both connection weights lowered alike: a mix of meaning errors and sound errors.
Random seed · same seed, same patient
patientnone yet. Press New patient.
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.

2

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.

picture to name
Picture · – · IPNP naming norms
Marisol, 23 · synthetic patient
Or skip the listening:· fills the feed and the diagnosis at once, no speech
target word–what she said–response type–so far0 pictures
Response types (PNT convention) correct semantic related in meaning: bench → chair formal related in sound: comb → coat mixed both: cat → rat unrelated neither: house → table nonword sounds scrambled: queen → kwiyd
#targetwhat she saidtype
3

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.

horizontal: semantic weight s (0 → 0.06) · vertical: phonological weight p (0 → 0.06) · bright = likely · ring = best estimate · orange dot = truth
responses used0 lesion read from the errors– predicted naming accuracy– best estimate (s · p)– true weights (s · p)hidden until revealed
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.

4

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.

course design4 sessions on days 0, 3, 7, 10 · 40 trials each · 20 words she personally struggles with scored onpredicted unaided retention of those words at day 17 and day 38 (Middleton et al. 2019's design) cueing hierarchywhat clinics do: round-robin through the words; after an error, repeat with the first sound, then the whole word trained policyMaskablePPO trained on predicted retention; it picks the word (due / repeat / weakest / strongest) and the cue each trial from what a session records. It personalises to her: the words it chooses come from her own history. noteThe policy is trained on the engine's own prediction of retention, so it already encodes what the learning layer rewards: spaced retrieval, few cues.
Create a patient first.
cueing hierarchytrained policy· dashed lines = session days · y = predicted retention at day 17
Trained policy's 160 trials · one row per session · the same policy as the teal line
Green = named correctly, red = error. Letter = cue given: p first sound, s meaning cue, w whole word, blank = no cue. Hover for the word.

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.
5

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 correction loop
Every session, the agent proposes, the patient responds, and the clinician corrects what she disagrees with. The corrections are folded into the policy, and the engine audits where the new rule applies before it is ever used on the patient. Press play to follow one correction round the loop.
Patientnames pictures, errs, learns Agentchooses word and cue Clinician"I would have…" Engine auditwhere does the rule apply? proposes a trial the clinician watches the session corrections → DITTO → a rule retrained policy adopted where meant, contained elsewhere

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.

What physician input does over months of use · an illustration
A generic policy starts out matching a given clinician's practice only partly. Each week she corrects what she disagrees with; each correction becomes a rule; the share of decisions she would have made herself rises, and the number of corrections she needs to make falls. Move the sliders. This is a conceptual model of the loop, not data; the mechanism it describes is the one running live below.
decisions that match this clinician's practicecorrections she still needs to make per weekpatient-specific rules the agent carries
The mechanism, live, on the policy from step 4
Say what you would have done and when. The server turns it into six demonstrations from the recorded course, runs DITTO, and shows where the retrained policy now follows your rule and where it left the policy alone.
whenever she has just…
I would have…
with…
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.