Views
No views yet
wrld → world, dsmvwld →
disemvoweled, brd → bread. Vowel placement lives only in a learned lexicon, so
a rule-only script has nothing to compute; the model recovers the most likely word
a consonant skeleton came from. A ~1M-parameter (1,016,960) byte-level
transformer.wrld => world
schl => school
frnd => friend
brd => bread (not bird — the model picks the common word)
thn => then (not than / thin)
ppl => people (not apple)world → wrld) is a trivial one-line script. Inverting it
is the hard direction, and it is many-to-one: brd could be bread, bird, beard,
board, or broad; thn could be than, then, or thin. There is no rule — the only way
back is knowing which word is more likely. A 5-line script has no such knowledge.
nano-vowel packs a frequency-weighted vocabulary into its weights and recovers the
intended word.| model | naive script | freq. script | |
|---|---|---|---|
| overall | 84.7% | 68.7% | 85.1% |
| collision slice (N=1767) | 65.4% | 29.2% | 66.3% |
python eval_nano_vowel.py --n 4000.| input type | accuracy |
|---|---|
| in-vocab words | high (see benchmark) |
| out-of-vocabulary words smushed | 14% |
t (at/eat/it/out/to) carry too
little signal for any method to fully resolve.1pip install -r requirements.txt
2python modeling_nano_vowel.py # demo1from modeling_nano_vowel import load, restore
2m = load("model.safetensors", "config.json")
3restore(m, "wrld") # -> "world"
4restore(m, "dsmvwld") # -> "disemvoweled"modeling_nano_vowel.py — self-contained model + load() / restore() (torch + safetensors only).data_vowel.py — the code data generator (shared by train and eval).eval_nano_vowel.py — the model-vs-script benchmark (naive + frequency dictionaries).test_nano_vowel.py — labels-correct / collision-slice / determinism / published-weights regression.model.safetensors, config.json — weights + architecture.report/nano-vowel-report.pdf — the technical report.TRAINING.md — reproduction recipe.