Inspiration

When people practise a speech, they get feedback like "slow down" or "you sound flat", but never where or by how much. As students, we've all rehearsed presentations and vivas with no way to see exactly which phrase went wrong. We wanted a tool that points to the exact words and seconds, and shows the numbers behind every piece of feedback.

What it does

Speech-Eval compares a reading with a reference reading of the same text, word by word. For every flag it answers three questions: what went wrong, where (the exact words and seconds) and why (the measured value next to the reference).

  • Seven flaw types: rushing, dragging, monotone, too quiet, mumbling, awkward pauses and missing pauses.
  • Three modes: Mode A compares you with expert readers, Mode B with your own earlier take, and Mode C with general speaker norms.
  • A dashboard that draws each flag on the waveform, explains it in plain language, and plays your phrase next to the reference reading of the same words.
  • A score card across pace, pitch, pauses, volume and clarity.

How we built it

  • Alignment: we compared the Montreal Forced Aligner with WhisperX and picked MFA (52 ms median boundary error, deterministic on CPU).
  • Features: speaking rate, pitch variation in semitones, loudness relative to the speaker's median, a high-band clarity ratio, and pauses, measured in 3-word windows with Praat and librosa.
  • Comparison: robust z-scores, using the median and MAD with a shrinkage prior, so one reader or ten both give a fair spread. Thresholds were chosen on development speakers only.
  • Benchmark: 1,103 recordings (36 hours) from public-domain readings, with seven flaw types inserted at five strengths at known positions, split by speaker.
  • Stack: Python, React/Vite and Docker, plus a free static demo on Hugging Face Spaces.

Challenges we ran into

  • No labelled data. No dataset marks delivery flaws with exact times, so we built our own benchmark with known flaw positions.
  • Fairness across voices. A fast reader isn't rushing and a deep voice isn't monotone, so everything is measured relative to the speaker and to how much expert readers themselves vary.
  • Too many pause flags. Real recordings got mostly pause flags. We traced it to a near-zero pause spread in the reference and tested a pre-registered 52 ms timing-floor fix.
  • Free hosting. The full pipeline needs a 16.8 GB Docker image, so the public demo shows frozen results and live analysis runs locally.

Accomplishments that we're proud of

  • On speakers it had never seen, it finds 40% of flaws at the right place, and 90% of awkward pauses.
  • Every benchmark result reproduces byte for byte from a fresh clone (563 of 563 outputs).
  • Honest evaluation: thresholds were frozen before testing, protocols were committed before runs, and the weak results (low precision, the false alarms) are reported openly.
  • A live demo that catches a planned pause in a brand-new recording at the exact words.

What we learned

  • Evaluation design matters as much as the model: without known flaw positions, you can't tell whether a tool points to the right place.
  • Robust statistics (median, MAD, shrinkage) matter when you only have a few reference readers.
  • A tiny reference spread can turn harmless 10 ms timing wobbles into huge scores, so measurement noise has to be part of the maths.
  • Being honest about limits makes a project more convincing, not less.

What's next for Speech Evaluation

  • Validate with people: independent listener ratings and fresh test speakers.
  • Better maths: a two-part pause model (how often readers pause, and for how long), aligner noise built into every spread, and false-alarm control per recording.
  • More languages, starting with Hindi, Tamil and Telugu.
  • A real product: any text and spontaneous speech, progress tracking over weeks, on-device privacy, and views for teachers and speech therapists.

Built With

  • docker
  • huggingface
  • librosa
  • montreal-forced-aligner
  • praat-(parselmouth)
  • python
  • react/vite
Share this project:

Updates

Submission history