wime-syllable-40m
The syllable model of wime, an Emacs Chinese double-pinyin input method. Given the text before the cursor and the typed syllables, it scores one Chinese character per syllable. wime fuses it with Qwen3.5-2B-Base to decode whole sentences on a local GPU.
Use
Follow the neural decoding setup (็ฅ็ป่งฃ็ ) in
wime's README: it downloads this
model into ~/.local/share/wime/wime-syllable-40m/, where wime looks for it.
Loading the file needs wime's neural/transducer.py and neural/charlm.py.
Model
- Input: up to 64 characters of left context, then each syllable as a pinyin initial, final and optional tone; any part may be unknown, so toneless, toned and half-typed input share one model. Auxiliary (shape) codes are not input; wime applies them, and typed tones, as constraints in its search.
- Layout-independent: wime's word database for each double-pinyin layout records which initial and final every pair of keys stands for, so the same model serves Microsoft, Xiaohe, Sogou and Ziranma layouts (only Microsoft was evaluated).
- Architecture (40.0M parameters): an 8-layer causal character network (448 wide) reads the context and the characters so far; a 6-layer bidirectional encoder (384 wide) reads the syllables; the top 4 character layers attend to the encoder, and a joint head scores each syllable's character through the tied character embedding.
- Vocabulary: 13,254 tokens, of which 12,408 are Chinese characters.
- File:
model.safetensors, FP16, formatwime-syllable-transducer-v1, sha256f9b0d8aa2e7ed9d6d6406b5c78309c619240309c1a9b998f0787d63f0388f75a.
Evaluation
Sentence accuracy of wime's full decoder (this model plus Qwen3.5-2B-Base at weight 1.5, beam 32), Microsoft double pinyin without tones, each sentence typed after its real left context. A case counts when the first candidate equals the reference or an accepted variant; cases that need knowledge the context does not give (rare names, local jargon) are left out.
| Set | Sentences | This model | wime's earlier 25M model |
|---|---|---|---|
| Development (used to choose the model) | 759 | 703 | 693 |
| Held-out, evaluated once after the choice | 208 | 184 | 179 |
| Held-out, every tone typed | 208 | 196 | โ |
On the held-out set the paired 95% interval of the difference is โ2 to +13 sentences. References and their boundaries were reviewed by an AI agent, not by people.
Limitations
- Characters outside the 12,408 it knows get almost no probability, so the decoder cannot produce them; wime still offers them from its dictionary lattice.
- It was trained and evaluated on simplified Chinese only.
- Readings in the training data are automatic (G2PW-based), not checked by hand.
Training
The character network starts from a character language model pretrained on the Chinese part of C4 and on LCCC, which wime fine-tuned on pinyin-conditioned input; encoder, cross-attention and joint head are new. Training ran 16,000 steps of 256 states (whole sentences, prefixes, continuations after a commit) over 1.32M sentences; tones are dropped at random, so typing them is optional.
Sources of the training data across all stages:
- C4, Chinese part (ODC-BY); LCCC dialogues (MIT); CHID (thu-coai)
- WildChat-1M (ODC-BY), Chinese Wikipedia 2026-10-01 (CC-BY-SA-4.0), Fineweb-Edu-Chinese-V2.1 (Apache-2.0 metadata; its card also requires the OpenCSG Community License), MNBVC Zhihu, forum, wiki and news parts (MIT card; upstream terms apply)
- Documentation: Python (PSF documentation license), Kubernetes, OpenHarmony, React and Vue (CC-BY-4.0), MDN (CC-BY-SA-2.5 prose), Apache Doris and PaddlePaddle (Apache-2.0), TRPL, Rust by Example and RIME (MIT)
The weights are released under CC-BY-SA-4.0, the most restrictive share-alike license among these sources; check the upstream terms for your use.