Use case · Paediatric speech therapy products

Pronunciation scoring API for speech therapy apps

A pronunciation scoring API for a speech therapy app is an HTTP service that takes a recording of a child plus the word they were asked to say, and returns a score for each individual sound in that word along with what was produced instead when a sound was wrong. For a paediatric therapy product that is the difference between telling a child “try again” and telling them the R at the start of rabbit came out as a W — and the difference between a parent reporting that practice happened and a clinician being able to count it.

What changes when feedback is per-phoneme

Speech therapy does not target words. It targets sounds, in specific positions within words, tracked to a percentage across sessions. A word-level score is the wrong shape for that work — it can tell you a production was imperfect but not which part of it was, and it cannot be aggregated into a goal.

  • Targets are sounds in positions, not words. A goal is written as “/r/ in initial position, 80% accuracy across three sessions”. A per-word score cannot be aggregated into that. A per-phoneme score can be filtered to initial /r/ and counted directly.
  • Feedback becomes specific enough to act on. “Try that word again” teaches nothing. “The R at the start of rabbit came out as a W” names the sound, the position, and the substitution — which is what a cue is built from.
  • Progress becomes a curve on one sound. With phone-level rows you can plot a single target sound over weeks, in a specific word position, which is the shape a clinician actually reasons about between sessions.
  • Generalisation becomes visible. A child whose /s/ is stable in isolation but collapses in clusters shows up in phone-level data as a positional pattern. A word-level score averages that away.

This is why the unit of the response matters more than the headline accuracy number. An engine that is excellent at scoring whole utterances and silent about individual sounds is solving a different problem — a good one, but not this one.

The practice-volume problem, and why automation helps

The bottleneck in articulation therapy is not clinical skill. It is repetitions. A child needs far more scored attempts at a target sound than any weekly session schedule can supply, and the attempts that happen at home have traditionally been unmeasured — nobody knows how many there were or how many were right.

  • The arithmetic of a weekly session is unforgiving. One or two short sessions a week gives a child a limited number of scored repetitions of a target sound. What actually drives change is the practice between sessions — and historically that practice has been invisible, unscored, and unreported.
  • Automated feedback makes home practice countable. Every attempt is a row: the target, the phone, the score, the timestamp. A clinician opening a dashboard on Monday can see 140 attempts at initial /r/ with a rising mean, instead of a parent saying “we did some.”
  • Latency is the whole design constraint. A child will not wait. Score returns in roughly a second; build your loop so the feedback lands while the child still remembers the attempt, and do the aggregation asynchronously.
  • Do not correct on every flag. At real base rates most flags are wrong. A product that interrupts a child two-thirds of the time it should not is worse than one that stays quiet — which is the entire reason the three-tier model exists.

The three-tier output, and the worklist you build from it

Every scored phoneme comes back with a tier as well as a score. The tiers exist because two different consumers need two different thresholds: a child should only be interrupted when the engine is confident, while a clinician wants everything borderline surfaced.

The tier field in the scoring response
TierWhat it meansWhat to do with it
flagThe engine's score is low enough to be its strongest available signal that something went wrong — which is still wrong more often than not on our evaluation setSurface to the child as corrective feedback; add to the clinician worklist
reviewBorderline — the score sits in the band where the engine and a human often disagreeDo not correct the child. Queue it silently for the clinician
cleanThe engine found nothing wrong with the productionReinforce the child. Do not treat as cleared — see the limit below

Turning tiers into a clinician worklist

  • Rank, do not filter. Sort every production from the week by engine score ascending. The clinician works down the list until they run out of time; nothing is hidden from them.
  • Budget the listening. In our clinical evaluation, reviewing only the worst-ranked productions recovered a disproportionate share of the clinician’s own error list — well above what reviewing the same number at random would have found. A fraction of the listening for a large share of the findings is what a triage layer is for.
  • Group by target sound, not by session. A clinician reviewing twelve attempts at initial /r/ back to back forms a judgement far faster than one hopping between sounds.
  • Show the engine’s reason. Put the candidate substitute and error type next to each item. It is what turns a listening queue into a shortlist the clinician can skim.
  • Never label a bucket “cleared”. The clean tier is not a clearance and the UI must not imply it is. See the limit below.

What the engine does on clinical audio

The benchmark we publish measures phoneme scoring on child voices, and its speakers are English learners rather than children in therapy. So the engine is also evaluated against a speech and language therapist's judgements on recordings of children with diagnosed speech sound disorders. That work is ongoing research on a corpus licensed for non-commercial use, so we do not publish its figures here. Two of its findings decide how a therapy product should be built, and both are stated in full below.

The second finding is the limit below, and it is the one that decides your architecture.

The limit that decides your product architecture

The shape that works

Put together, the measurements point at one product architecture and away from several others. Automated feedback in the child's practice loop, tuned to interrupt rarely and gently. A complete, ranked record of every attempt for the clinician, with the engine's reasoning attached. A clinician who reviews the top of that list and whose judgement is the only thing that ever marks a sound as achieved. No screening, no clearing, no diagnosis.

That product is useful today and can be described accurately to a clinician. The one that assesses a child unsupervised cannot, and our own measurements are the reason we say so.

What the response looks like in a review queue

One scoring response, rendered the way a clinician would want to read it. Every field shown below is taken from the sample response published on the ArticScore overview — the API returns the data, and the review interface around it is yours to build.

In a clinician’s review

rabbit

1 flagged61.4
SoundScoreSounded likeError typeTier
R /ɹ/41.2W /w/substitutionflag
AE /æ/88.1clean
B /b/94.0clean
IH /ɪ/79.6clean
T /t/90.3clean

Every column is a field the API returned: phone, phone_ipa, score, sound_most_like, error_type and tier. An em dash means the response carried no value for that field on that phoneme — those keys are only present on a flagged sound.

One way this response could look in your product— the API returns the data, you own the experience. Every phone, score, substitute and tier above is read straight from the sample response for rabbit; the layouts, the star rule, the colour bands and the coaching sentence are things a product decides, not fields the API sends back.

Building a paediatric speech therapy product?

ArticScore is in limited early access, rolled out case by case. Tell us your use case and expected volume and we will come back to you.

Request access

Speech therapy apps — frequently asked questions

Can a speech therapy app use ArticScore to replace a speech-language pathologist?
No. Our own clinical evaluation is the reason we say that flatly: on recordings of children in active therapy, productions the engine scored as clean still included real errors the clinician caught. An SLP who treated clean as cleared would miss them. ArticScore is built for practice support and clinician triage — ranking which recordings to listen to first — not for assessment, screening, or clearing a child on any sound.
How does ArticScore behave on children with real speech sound disorders?
It is evaluated against a speech and language therapist's judgements on recordings of children in active therapy, separately from our published child-speech benchmark. That work runs on a corpus licensed for non-commercial research use, so we do not publish its figures on a commercial page. Two findings from it shape what we tell developers. The engine's score rises consistently as the clinician's rating rises, on labels nothing in the engine was ever trained against — which is what makes ranking a listening queue by score a sound design. And its own clean bucket still contained real errors, which is why it must never be used as a screening pass.
Why is per-phoneme scoring better than word-level scoring for therapy?
Because therapy targets sounds in positions, not words. A goal like "/r/ in initial position at 80% accuracy" cannot be computed from a word score. Per-phoneme rows can be filtered to a target sound and position, counted, and plotted over time — and when a production is wrong they carry what the engine heard instead, which is what a cue is built from.
Can ArticScore detect a lisp?
Only some kinds. An interdental lisp, where /s/ moves toward "th", sometimes surfaces as a substitution the engine can name. A lateral lisp is a distortion — the production is still an /s/ attempt and is not cleanly any other phoneme — and a scorer that works by comparing phonemes against phonemes has no symbol to represent it. On our benchmark the engine detected 2 of the 7 labelled distortions in the set, and fine-tuning did not improve that. This is structural to the approach rather than a tuning problem, and it applies to every phoneme-scoring API we are aware of.
How should a therapy app present a flag to a child?
Only on the flag tier, never on review, and framed as information rather than failure — name the sound and the position, offer the cue, and move on. Because most flags at real base rates are false positives, the interaction has to survive being wrong: a child who said the sound correctly and gets a gentle "let's try that R again" is fine, while one who gets a red X and a lost streak is being punished for the model's error.
What does a product built on ArticScore have to say about itself?
That it supplements a licensed speech-language pathologist rather than replacing one, that it does not diagnose, and that it is not a standardized assessment or a medical device. That is not only a legal posture — it is what our measurements support. Position the product as practice support and clinician triage, and keep a qualified person in the loop on anything that looks like a clinical decision.