Our keyboard's grammar model is a 26.2M-parameter tagger we trained from scratch: one label per word (KEEP / DELETE / REPLACE_x / APPEND_x), no text generation, Core ML on the phone. Over two weeks it went from F0.5 0.693 with 11.1% false positives to 0.803 with 1.9% , and from fixing 22% to 77% of phone typos exactly . Here's what moved the numbers, including one bug that made model soups fail.
Scoreboard (4,356-case held-out suite, plausibility guard)
Version Change F0.5 False positives
v1 from-scratch baseline 0.693 11.1%
v1.1 plausibility guard 0.748 8.7%
v1.2 better (noisy, clean) pairs 0.800 3.1%
v1.3 / v1.4 2β3Γ more steps (rejected) 0.784 / 0.758 7.4% / 9.1%
v1.5 real misspellings, dropped words, tense; fixed --steps 0.80 2.4%
v1.6 past-tense errors 0.802 2.8%
v1.9 + phone-typo slips, keep bias 4 0.784 2.2%
v2.0 40% identity pairs, more chat text, 3-run soup , keep bias 3 0.803 1.9%
Phone-typo set: F0.5 0.689 (v1.6) β 0.912 (v2.0); exact 22% β 77%.β¦