Build1 publisher3 min readPublished
Rebalancing one tokenizer's corpus to 50% Indic cut Tamil's tokens per word by 21%
The test built three tokenizers that differed only in their language mix, and the halfway split cost English about 1% while a fully balanced five-language corpus made English 17% more expensive.
The Engineer · Build desk

What happened
- A dev.to post tokenised the same short sentence in five languages and got about one token per word for English and almost 11 for Tamil.
- The author built three tokenizers from scratch that differed only in training mix: 90% English with 10% Indic, an even 50/50 split, and one balanced across English, Hindi, Telugu, Tamil and Kannada.
- Full balance gave diminishing returns on the Indic side and pushed English to 3.60 tokens per word, and a vocabulary sweep helped every language from 300 to 800 tokens before flattening.
Compiled by The EngineerSomething wrong?How this is made
Why it matters
- cost Indic-language users buy less conversation per context window and pay more per turn for the same meaning, and the post says their replies also come back slower.
- decision A team serving English and Indic users from one tokenizer has to choose a corpus split, because the mix that helps Indic least at the margin is also the one that taxes English most.
- constraint The percentages can only be used as direction: they came off a hand-written corpus whose merges were exhausted by an 800-token vocabulary, so 19% is a directional figure and no team can quote it as a production saving.
- contradiction The post's subtitle prices the problem at 3x for Hindi while its table runs to nearly eleven tokens a word for Tamil, so a context budget needs a figure per language.
Tokenizer A, the 90% English mix, spent 3.05 tokens on an average English word [7]. The comparison table at the top of the same post puts English at about one token per word [1]. The experimental tokenizer is therefore roughly three times worse at English than the one in that table [5]. Nobody ships a tokenizer that spends three tokens on an English word. "Read the direction and size of the shifts, not the absolute numbers," the author wrote, of a corpus that was small and self-authored [11][12].
The direction holds because of how the vocabulary gets built. Byte-level BPE starts from raw bytes and repeatedly merges whichever adjacent pair occurs most often, so every entry in the vocabulary was earned by frequency in the training text [5]. English characters usually take one byte of storage, and Devanagari, Telugu, Tamil and Kannada take three per character [3]. The post rejects the easy inference from that: a byte-level tokenizer can merge several bytes into one token, and a 3-byte character costs three tokens only when no good merge was learned for that byte sequence [4]. A corpus that is 90% English gives English patterns thousands of chances to earn a one-token merge and Indic patterns far fewer [6].
The two rebalancing steps behaved differently. Going from 90/10 to 50/50 cut Hindi by about 19%, Telugu by 18% and Tamil by 21%, while English lost about 1% [9][2]. Going all the way to an even five-language split moved the Indic numbers little and took English from 3.08 to 3.60 tokens per word, about 17% [8][3]. The second step spends on English roughly what the first step won for Hindi [4].
The vocabulary sweep has the same shape. On the balanced corpus, raising the vocabulary from 300 to 800 tokens helped every language, and past 800 nothing moved, which the author attributes to the tiny training corpus running out [13]. That ceiling limits how far the figures generalise. For a 19% Hindi saving to appear in a production tokenizer, the merges that Indic data buys at the margin of a large vocabulary would have to behave like the merges it bought between 300 and 800 tokens on a hand-written corpus.
What a team can do about any of this depends on whose tokenizer it is. If you train the tokenizer, the corpus mix is the control, and the post is describing the shape of its effect. If you are serving someone else's model, the post names the other route: the technique multilingual teams use to retrofit a tokenizer onto a model that has already been trained [15]. It leaves out what that retrofit costs. The cost of leaving it alone is stated plainly enough: in Indian languages the same meaning fills the context window faster and costs more to run, and the post says replies come back slower [14]. Between the extremes of its own table, the per-word token count differs by about eleven to one [1].
What to watch
- A published retrofit measurement: tokens per word before and after a vocabulary swap on the same trained model.
- A repeat of the mix sweep on a production-scale corpus and a large vocabulary, where merges keep going past 800 tokens.
- Per-language tokens-per-word figures from API vendors for Indic scripts, which would let teams price the penalty without building a tokenizer.