BuildNot yet confirmed elsewhere1 publisher3 min readPublished
A 26M-parameter edit tagger out-corrects LoRA-tuned Gemma 3 270M and SmolLM2 360M on a phone keyboard
A 26M-parameter edit tagger scored F0.5 0.799 at phone-keyboard grammar correction against 0.663 for fine-tuned small LLMs, its authors report. It altered correct text 2.4% of the time against 20.1%, on a benchmark the authors ran themselves.
The Engineer · Build desk
Key figures: the tagger (v1.5) changed correct text 2.4% of the time, against 20.1% for the LoRA fine-tunes; it takes about 4 ms per sentence on a phone CPU; an iOS keyboard extension gets about 60 to 80 MB of memory; training took about 9 hours on one laptop GPU.
| Figure | Value | Note | Claim |
|---|---|---|---|
| Correct text changed by the tagger (v1.5) | 2.4% | against 20.1% for the comparison | 2 |
| Per sentence, phone CPU | 4 ms, about | 3 | |
| iOS keyboard extension memory, at least | 60 MB, about | up to about 80 MB before jetsam kills it | 5 |
| Total training, one GPU | 9 hours, about | 12 |
What happened
- It ships as a 26 MB Core ML model on iOS and a 27 MB int8 ONNX model on Android, at about 4 ms per sentence on a phone CPU.
- Instead of generating text, the model predicts one edit label per word, applies the labels, and reruns on its own output for up to three passes.
- Training the whole pipeline took about nine hours on one RTX 3080 Ti laptop GPU.
Why it matters
- constraint On iOS the 26 MB model is roughly a third to 43% of the 60 to 80 MB a keyboard extension gets, if resident memory tracks file size.
- exposure At the reported rates a user would see roughly one correct sentence in five altered by the LLMs and about one in 42 by the tagger.
- capability Apache-2.0 weights let a keyboard team measure the tagger on its own text before trusting the authors' set.
The gap starts with what each model is allowed to output. A generative corrector rewrites the sentence token by token. The post's authors describe the consequence: "Generative correction regenerates every token, so every token is a chance to change something that was fine." [9] Fine-tuning reduces that risk a lot, they wrote, but does not remove it. [22]
The tagger's output space is a fixed set of 15,000 edit labels on an 8-layer encoder with 26.2M parameters. [11] $KEEP is a real answer: 30% of the 12.02M training pairs are identity pairs. [13] The model has roughly 10 to 14 times fewer parameters than the two LLMs it was compared with [30], and its F0.5 is 0.136 higher [27].
Three additions sit around the network, and the authors say they "do a lot of the work". [23] A constant added to the $KEEP logit sets strictness. Values 1, 2 and 3 map to the "Catch more", "Balanced" and "Only sure fixes" settings. [14] Inside a detected name, number, email or URL only $KEEP is allowed, and the suite shows 0.0% lost protected spans for every tagger version. [15] A $REPLACE is accepted only if it is a known kind of fix or a small edit distance. [16]
The post's summary gives one set of LLM numbers. The portion we have does not break them out by model, and does not say whether the LoRA models ran behind equivalent filters. If they did not, part of the 0.136 gap belongs to the filters.
Treat the 0.799 as a claim about this workload. The LLM side is one configuration: LoRA r32 on the same correction data, served with llama.cpp. [8] The tagger's training mix leans on synthetic phone typos such as QWERTY neighbours, apostrophes, their/there/they're and agreement errors, plus real misspellings, CoEdIT and casual messages written by a local Qwen2.5-14B. [24] The 4,356 test cases were kept out of training by a deterministic hash split. [7] For the score to transfer, your users' errors have to look like that mix, and the LoRA run has to be a fair stand-in for what you would tune.
The false-change rate also moves with the set. The summary says 2.4%; on the 2,000 held-out real-style messages v1.5 scores 1.9%. [2][17] Tense is still weak, according to the authors. [26]
The post documents a failure in full. Versions 1.3 and 1.4 lost to 1.2, with false positives on correct text going from 3.1% to 7.4% and 9.1%. [18] The fine-tune script set the number of training steps from a time budget, using the speed it timed at step 300. For v1.2, that timing landed during a VRAM spill into WSL shared memory, and the run was accidentally given a short schedule. [19] So the best early version owed its short schedule to a GPU that was swapping. Once the spill was fixed, v1.3 and v1.4 ran 2.6 to 2.9 epochs against 1.4. [19] The authors wrote: "The comparison wasn't fair, and the long runs were the bad ones." [20] The extra errors were mostly preposition swaps next to names, such as "booked table 27 at Kyiv" becoming "in Kyiv". [21]
The evidence supports a narrow claim. One task, two LLMs and one LoRA configuration produced a win for a purpose-built tagger on the authors' own benchmark. [1][8] We think the design is the right trade for a keyboard. The iOS extension has no GPU guarantees [5], the OS enforces the no-network rule [25], and the authors wrote that "A false correction costs more user trust than a missed one". [6] Whether that generalises to other on-device tasks is not tested here. The weights are Apache-2.0, so anyone can run the check on their own text. [4]
What to watch
- Whether the next tagger version fixes tense errors without pushing false changes on correct text back up.
- Independent runs of the Apache-2.0 weights on keyboard text the authors did not write or score.
- A per-model breakdown of F0.5, false changes and latency for Gemma 3 270M and SmolLM2 360M.
Clarity's read
What the record supports and how the coverage leans. The claims behind it follow.
Reality
- Evidence50
- Adoption
- Insufficient
- Hype gap+12
- Incentives45
- Confidence50
Claim ledger
Ranked by verification strength, evidence, and original report placement.
- [1]
The authors compared LoRA fine-tunes of Gemma 3 270M and SmolLM2 360M with a GECToR-style edit tagger trained from scratch, for grammar correction inside a phone keyboard that runs on-device only.
- [2]
The 26M tagger (v1.5) scored F0.5 0.799 against 0.663 and changed correct text 2.4% of the time against 20.1%.
- [3]
The tagger ships as a 26 MB Core ML model on iOS and a 27 MB int8 ONNX model on Android, and takes about 4 ms per sentence on a phone CPU.
- [4]
The weights are on Hugging Face under Apache-2.0 as Mindscend/mindtype-tagger-v1.5.
- [5]
A keyboard extension on iOS gets about 60-80 MB of memory before jetsam kills it, with no GPU guarantees, and has to stay responsive while the user types.
- [6]
The authors wrote: "A false correction costs more user trust than a missed one".
- [7]
There are 4,356 held-out cases, kept out of every training set by a deterministic hash split.
- [8]
The LLM baseline is LoRA r32 on the same correction data, served with llama.cpp.
- [9]
The authors wrote: "Generative correction regenerates every token, so every token is a chance to change something that was fine."
- [10]
Following GECToR, the model predicts one edit label per word; the labels are applied and the model runs again on its own output, up to 3 passes, so dependent fixes can chain.
- [11]
The architecture is an encoder-only transformer with 8 layers, d_model 384, 26.2M parameters and 15,000 edit labels.
- [12]
Training used one RTX 3080 Ti laptop GPU for about 9 hours in total.
- [13]
Stage 2 training used 12.02M (noisy, clean) pairs, 30% of them identity pairs, so $KEEP is learned as a real answer.
- [14]
A constant added to the $KEEP logit sets strictness; bias 1, 2 and 3 map to the user-facing settings "Catch more", "Balanced" and "Only sure fixes".
- [15]
Inside a detected name, number, email or URL only $KEEP is allowed, and the result is 0.0% lost protected spans across the suite for every tagger version.
- [16]
A $REPLACE is accepted only if it is a known kind of fix (confusion sets, agreement pairs, irregular forms, articles) or a small edit distance.
- [17]
On the 2,000 held-out real-style messages, v1.5 changes correct text 1.9% of the time (v1.2: 2.8%).
- [18]
v1.3 (new error types) and v1.4 (a longer-pretrained encoder) both lost to v1.2; false positives on correct text went from 3.1% to 7.4% and 9.1%.
- [19]
The fine-tune script turned a time budget into a step count by measuring speed at step 300. v1.2 measured its speed during a VRAM spill (WSL shared-memory fallback) and got a short schedule by accident. After the fix, v1.3 and v1.4 got 2-3x the steps (2.6-2.9 epochs vs 1.4).
- [20]
The authors wrote: "The comparison wasn't fair, and the long runs were the bad ones."
- [21]
The extra false positives were mostly preposition swaps next to names, for example "booked table 27 at Kyiv" becoming "in Kyiv".
- [22]
Fine-tuning reduces the risk of changing text that was fine a lot but doesn't remove it.
- [23]
The authors say three cheap tricks (KEEP bias, protected spans, plausibility guard) do a lot of the work.
- [24]
Stage 2 data includes synthetic phone typos (QWERTY neighbours, apostrophes, their/there/they're, agreement, irregular verbs, articles, "should of"), real misspellings, dropped words, tense errors, CoEdIT, and casual messages written by a local Qwen2.5-14B and filtered for correctness.
- [25]
The no-network rule is enforced by the OS: the iOS keyboard never requests Full Access and the Android app has no INTERNET permission.
- [27]
The tagger's F0.5 is 0.136 higher than the LLM figure.
- [28]
The 26 MB iOS model is about 32.5% of 80 MB and about 43.3% of 60 MB, if resident memory tracks file size.
- [29]
At the reported rates the LLM figure is about one correct sentence in five altered and the tagger about one in 42.
- [30]
Gemma 3 270M has about 10.3 times and SmolLM2 360M about 13.7 times the tagger's parameter count.
Sources
1 independent publisher whose own reporting we read for this story.
- dev.toA 26M-parameter tagger beat our fine-tuned small LLMs at grammar correction, and runs in ~4 ms on a phone
1 article · October 12, 2026
Topics and entities
Follow any of these and your For You feed starts watching them — no settings page required.
Topics
- Small Model StrategyFollow
- On-device machine learningFollow
- Grammatical error correctionFollow
- Mobile keyboardsFollow