READSmart

Finding 05

Finding 5 — One bilingual model, or one per language?

In one sentence: The pre-chosen option was right — a one bilingual model + language flag works best overall, and the differences between the three options are small.

Why this question exists

The system has to score both English and Filipino. Two reasonable designs: build one correction for each language, or build a single one that is told which language it is hearing. Separate models can specialise; a shared model gets more data to learn from. With only ~100 recordings per language, that trade matters.

Speech model: medium. Recordings: 167 (83 English, 84 Filipino). All three options were scored on exactly the same held-out recordings.

Results — reading speed (words per minute)

ConfigurationEnglishFilipinoBothOffset (both)
(none — raw measurement)9.44720.56115.037-13.60
A — separate model per language8.00612.39510.214+0.07
B — learn on the other language, re-centre8.74212.32610.544+0.36
C — one bilingual model + language flag ← primary7.86212.19810.043+0.15

Numbers are the average miss in WCPM — lower is better.

How much does the choice matter?

The best and second-best configurations differ by 0.17 WCPM on a measure where two teachers already disagree by around ±9.6 WCPM (Finding 01). That is far inside the noise. The configuration choice is not important — pick the simplest one to build and maintain, which is the single bilingual model. Reporting this as a meaningful win would be overstating it.

Filipino is still the harder language

Even under the best configuration, the correction misses by 7.862 WCPM in English and 12.198 WCPM in Filipino — about 1.6× worse.

This is inherited, not caused by the configuration: Finding 02 showed the speech model itself is worse at Filipino at every size. Sharing a model does not fix that, and neither does separating them. Any deployment must report the two languages separately rather than quoting a single blended figure that hides it.

Honest limitations

  • ~83 recordings in the smaller language. Small differences between configurations are not reliable at this size.
  • Configuration B is the simple form of transfer — borrow the relationship from the other language, then correct the offset locally. Richer transfer methods exist and were not tried.
  • Ridge was held fixed across all three so this compares configurations, not algorithms.

Generated by pipeline/language_configs.py.

All findings