← Back to context

Comment by Liogra123

14 hours ago

Try it in the browser (the forward pass is plain JS, nothing leaves the page): https://huggingface.co/spaces/graafhenk/numberwang-demo

What it is: a character-level CNN with 80,804 parameters. The weights are a 1.79 MB JSON file and inference is about 100 lines of Python standard library — no PyTorch, no NumPy. It runs on a Pi Zero. It accepts digits, number words in eleven languages, arithmetic ("96 divided by 2", "deux fois trois"), Roman numerals, ordinals, clock times, currency, and fictional numbers ("shinty-six"). Anything with no numeric content is correctly ruled out as never able to be Numberwang. Whatever comes to 1 or 44 is Wangernumb and you rotate the board.

Held-out accuracy is 88.9% on 486 probes reserved from training by construction. The ceiling is ~98%, because roughly 2% of training labels are inverted at compilation time, in accordance with long-standing adjudication practice.

For comparison I ran Qwen3-1.7B on the same suite with the four verdicts as a constrained multiple choice: 51.9%, which is 2.3 points above answering "Numberwang" to everything. It answers "Numberwang" to 93% of inputs and never once identifies a Wangernumb. So the accuracy table has a verdict-distribution column, since one number can't tell a model that decides from one that agrees.

Honest weak spot: arithmetic is memorised, not computed. A conv net can't add. On operands reserved from training it gets 60% on symbolic expressions and 44% on foreign-language ones.

Dataset (185k adjudicated utterances), training script, evaluation harness and benchmark are all in the repo and reproduce from a fixed seed. Model card on HF: https://huggingface.co/graafhenk/numberwang