Downloads · 30 days
365
30% of all-time downloads
omurberaisik/NoTokenLM-Gen-4.5
NoTokenLM-Gen-4.5 is a text generation model from omurberaisik. Use it when you need the model to write or continue text. It is set up for transformers. The card lists the license as apache-2.0.
Downloads · 30 days
365
30% of all-time downloads
All-time downloads
1.2K
Public
Parameters
20.3M
83.5 MB on disk
Likes
2
Public
Click a slice to open those files.
.safetensors81.3 MB · 97%
From the Hugging Face model README

A 20-million-parameter, byte-level, tokenizer-free language model. No subword vocabulary, no BPE — just raw UTF-8 bytes in, raw UTF-8 bytes out.
This is part of the NoTokenLM family: a series of small models built around one guiding question — how much can a genuinely small model do, if the architecture and training are done carefully, without leaning on scale to cover for weak design?
If you're looking for a model that reasons, does math, or holds a long conversation coherently — this isn't that, and this card will tell you exactly why not. If you're curious what a 20M-parameter transformer can actually pull off when it's pointed at simple narrative text — keep reading.
from transformers import AutoModelForCausalLM, AutoTokenizer
repo = "omurberaisik/NoTokenLM-Gen-4.5"
model = AutoModelForCausalLM.from_pretrained(repo, trust_remote_code=True)
tok = AutoTokenizer.from_pretrained(repo, trust_remote_code=True)
model.eval()
ids = tok("Deep in the forest, Jack found a shell", return_tensors="pt")["input_ids"]
out = model.generate(ids, max_new_tokens=35, temperature=0.5, top_k=40)
print(tok.decode(out[0]))
Or with the pipeline API:
from transformers import pipeline
pipe = pipeline("text-generation", model="omurberaisik/NoTokenLM-Gen-4.5", trust_remote_code=True)
print(pipe("The little dog", max_new_tokens=35, temperature=0.5, top_k=40))
Recommended sampling settings are in the How to actually run this thing section below.
Gen-4.5 is a continuation of Gen-3.5-Focused — same architecture family (RoPE, RMSNorm, SwiGLU, byte-level), same lineage — carried forward through more training, not a from-scratch run and not a different model bolted on. Two things changed on top of that continued pretraining:
d_model=240 (~9M parameters). Gen-4.5 grows that to d_model=360 (~20M parameters) using a function-preserving width expansion — the existing trained weights are embedded into the larger matrices rather than the model restarting from random init, so the extra capacity is trained on top of what the smaller model had already learned, not instead of it.At the time these results were produced, this checkpoint had gone through 6,900 training steps across 3 sessions post-width-growth, with a best validation loss of 1.0729. Numbers throughout this card come from the EMA (exponential moving average) weights, which is standard practice for evaluation at this scale — it consistently produces smoother, less erratic generations than the raw training weights.
We generated 1,000 completions — 1,000 distinct prompts, one generation each, temperature 0.5, top-k 40, 35 new bytes — and every single one was read by hand and sorted into one of three categories. No automated heuristic, no filtering, no cherry-picking; everything below is the real distribution.
Grading criteria (same strict standard as prior NoTokenLM evaluations — "grammatically fine but says nothing coherent" does not count as a win):
| Category | Definition | Count | Share |
|---|---|---|---|
| Fully coherent | Correct grammar and the sentence actually makes sense — characters, objects, and pronouns tracked correctly throughout. | 749 | 74.9% |
| Grammar OK, meaning breaks down | Reads like well-formed English sentence-by-sentence, but drifts into a pronoun/gender mismatch, a non-sequitur detail, or an object described inconsistently with the scene. | 246 | 24.6% |
| Grammar breaks down | The sentence structure itself collapses — stuck repetition, a garbled or malformed clause. | 5 | 0.5% |
Result: 74.9% fully coherent, 99.5% grammatically correct overall, on a test set with no repeated prompts and no simplification.
"Leo was carrying a folded map very carefully, while Sam was making a plan to find a wool scarf."
-> "He had heard tales of a magical sc[arf]"
"Just before sunset, the young fox was cleaning up at the market after a long day."
-> "The warm smell of fresh fruit fill[ed the air]"
"Long ago, Rosie found a folded map in the attic."
-> "It was hidden in a box of old book[s]"
"Every afternoon, Otto spent the whole morning in the flower field."
-> "She loved to play there every day."
"Without any warning, Sam was looking for a stack of leaves on the hill."
-> "He had heard tales of a secret soc[iety]"
"On a rainy Tuesday, Anna noticed a wooden box was missing."
-> "It was her lost city that she had"
<- grammatically fine, but "her lost city" doesn't follow from a missing wooden box
A pronoun/gender mismatch a sentence or clause after a character is introduced is the single most common failure inside this category.
"That very night, Nora was looking for a paint brush in the toy store."
-> "She had a big blue blue but never" <- stuck repetition, then a dangling fragment
"Aria began to dig a hole in the village, while Miles asked a friend for help carrying a glass jar."
-> "They began to dug and play and sil" <- wrong verb inflection + trails into word salad
"Early in the spring, Hazel noticed a broken toy was missing."
-> "It was a toy was found in a box. E" <- doubled subject, syntax collapses
The full per-example labels for all 1,000 outputs are included in gen45_1000_test_outputs.json under the manual_category field.
Manual coherence grading is our own methodology. To see how the model does on standard, external academic benchmarks — the kind used to evaluate real language models, not just our own test set — we ran it against three established suites. None of these involve code or math; all three test grammar, commonsense, and long-range language understanding, which is what a text-only, 20M-parameter narrative model can realistically be judged on. Everything below is a genuine, reproducible score, run directly against the released weights, sample sizes noted throughout.
BLiMP tests grammatical knowledge across 67 distinct syntactic/morphological phenomena, scoring whether a model assigns higher likelihood to a grammatical sentence over a minimally-different ungrammatical one. We ran all 67 paradigms (30 pairs each, 2,010 total pairs) and compared against the official baselines reported in the BLiMP paper (n-gram, LSTM, Transformer-XL, and GPT-2-large, 774M parameters — note this is not the small 124M GPT-2).
| Model | Params | BLiMP avg. (67 paradigms) |
|---|---|---|
| 5-gram | — | 61.2% |
| NoTokenLM-Gen-4.5 | 20M | 66.8% |
| LSTM | — | 69.8% |
| Transformer-XL | — | 69.6% |
| GPT-2-large | 774M | 83.0% |
Gen-4.5 clears the n-gram baseline and lands close to the LSTM/Transformer-XL range, despite being dramatically smaller and trained on a narrow slice of narrative text rather than a general corpus. It also outperforms GPT-2-large on 10 of the 67 individual paradigms — mostly short-range morphological agreement (e.g. irregular_past_participle_verbs: 100% vs. 86.1%; sentential_negation_npi_licensor_present: 100% vs. 97.1%). It falls sharply behind on paradigms requiring long-distance syntactic dependencies — island constraints, wh-extraction over long distances — several of which score near or below chance (e.g. wh_vs_that_with_gap_long_distance: 6.7%). This tracks with everything else in this card: strong on local, short-range grammar; weak the moment a dependency has to be tracked across a long stretch of the sentence.
HellaSwag gives a context and four possible continuations; the model has to pick the one a human would find most plausible. We scored 150 examples via length-normalized log-likelihood.
| Accuracy | |
|---|---|
| NoTokenLM-Gen-4.5 | 20.7% |
| Random chance (4-way) | 25.0% |
Below random chance. This is a real and honest result, not an oversight: HellaSwag continuations describe everyday human activities in a register the model has never been trained on, and the model's narrative-generation bias appears to actively mislead it here rather than simply providing no signal.
LAMBADA gives a full paragraph and asks the model to predict the final word — a test of whether a model can actually use long-range context, not just local grammar. We scored 100 examples via greedy decoding, exact string match.
| Model | Params | LAMBADA accuracy |
|---|---|---|
| NoTokenLM-Gen-4.5 | 20M | 12.0% |
| GPT-2-small | 124M | ~46% |
| GPT-2-large | 774M | ~59% |
| GPT-3 (zero-shot) | 175B | 76.2% |
This is the clearest evidence of the model's core limitation: it was never trained to hold onto and use long-range context to predict a specific target, and it shows. This result should be read alongside the BLiMP long-distance-dependency paradigms above — both point at the same gap.
| Skill | Result |
|---|---|
| Byte-level spelling accuracy (own eval, 7,271 words) | 99.99% correct |
| Short-range grammar (BLiMP) | 66.8% — competitive with LSTM/Transformer-XL |
| Long-range syntax (BLiMP subset) | near chance on several paradigms |
| Commonsense reasoning (HellaSwag) | below chance |
| Long-context word prediction (LAMBADA) | far below even the smallest GPT-2 |
Put together, this model has clearly and specifically learned how to produce well-formed, correctly-spelled English at the sentence level — and just as clearly has no world knowledge and very limited ability to track information across a long context. That's not a hedge; it's the actual shape of what 20M parameters trained on narrow narrative text buys you, and we'd rather state it plainly than let a single headline number stand in for the whole picture.
Gen-3.5-Focused's internal test reported roughly 86% coherence. The 1,000-prompt manual review above lands at 74.9% fully coherent. That's a real number, not a typo, and it deserves an honest explanation rather than a footnote.
The two evaluations are not comparable, and the difference in methodology explains essentially all of the gap:
Put plainly: a 75% fully-coherent rate on 1,000 unique, harder, more varied prompts is a stronger result than an 86% rate on 10 easy prompts repeated many times. The drop in the headline number reflects a much tougher exam, not a worse model. If anything, running Gen-4.5 against the old narrow-and-repeated style of prompt would very likely reproduce numbers at or above the old 86% — we just don't think that test tells you anything useful anymore, so we didn't lean on it here.
For reference, when the same 1,000-prompt, unique-prompt methodology used above was run against Gen-3.5-Focused itself (rather than its old 10-prompt-repeated test), it scored:
| Category | Share |
|---|---|
| Fully coherent | 69.2% |
| Grammar OK, meaning breaks down | 30.6% |
| Grammar breaks down | 0.2% |
If you want the full 1,000 raw outputs behind that score, they'll be posted to the NoTokenLM-Gen-3.5-Focused repo shortly — check there if you want to inspect them directly.
Recommended: temperature 0.5, top-k 40. All the numbers in this card were produced at these settings. Going much higher noticeably increases how often generations drift into the "grammar OK, meaning breaks down" and "grammar breaks down" categories; going much lower produces safer but more repetitive text.
| Parameters | ~20.3M |
| Layers | 13 |
| d_model | 360 (grown from 240 via function-preserving width expansion) |
| Attention heads | 6 |
| Feedforward dim | 960 |
| Vocabulary | 256 (raw bytes, no tokenizer) |
| Context length | 1024 bytes |
| Position encoding | RoPE |
| Normalization | RMSNorm |
| Feedforward | SwiGLU |
| Output layer | Weight-tied to input embedding |
| Training | Byte-level next-token prediction, continued pretraining from Gen-3.5-Focused (pretraining only — no instruction tuning) |
Short, simple children's-story-style narrative text, continued from the same data mix used for Gen-3.5-Focused rather than replaced. No general web text, no encyclopedic corpus, no math-formatted data, and no instruction-following format is present in this checkpoint's training.
Part of the NoTokenLM family — small models, built and evaluated honestly.
This project is licensed under the Apache License 2.0. See the LICENSE file for the full license text.