perplexity
Perplexity is the standard *intrinsic* measure of how well a language model predicts text, and the cleanest way to understand it is as the model's average *branching factor*: at each token, how many equally-likely choices does the model effectively think it is choosing between? A perplexity of 10 means the model is, on average, as uncertain as if it were picking uniformly among 10 options for every next token. Lower is better — a perfect model that always assigned probability 1 to the correct token would have a perplexity of 1. That single number, tracked over a training run, is the heartbeat of language-model pretraining, and it comes directly from the loss the model is already optimizing.\n\n**Perplexity is just the exponential of the cross-entropy loss, which is why it costs nothing to compute.** A language model is trained to maximize the probability it assigns to the real next token, and the cross-entropy loss is the average negative log-probability it assigns to the true tokens of a held-out text. Perplexity is simply that loss exponentiated — raise e (or 2) to the average cross-entropy and you get perplexity. So the quantity the optimizer is already minimizing *is* perplexity in log space; there is no separate evaluation to run. This tight coupling is exactly why perplexity is the natural training-time metric: it is the loss, re-expressed on a scale that has an intuitive meaning.\n\n**That meaning is uncertainty, and it doubles as a measure of compression.** Because cross-entropy is measured in bits (or nats), perplexity is directly tied to *bits per token* — the number of bits you would need, on average, to encode the next token given the model's predictions. A lower-perplexity model is literally a better compressor of the text, which is the deep reason perplexity tracks language-modeling quality: predicting text well and compressing it well are the same problem. This is also why "perplexity equals effective vocabulary size" is a fair intuition — it is the size of the uniform distribution that would leave the model equally surprised.\n\n**Its fatal limitation is that perplexity is only comparable within the same tokenizer and data, and it does not measure usefulness.** Perplexity is computed per token, so a model with a different vocabulary or tokenizer chops the text into different units and produces numbers that cannot be compared to another model's — a smaller perplexity across tokenizers can be an artifact of tokenization, not better modeling. It is also purely *intrinsic*: it rewards assigning high probability to the reference text, which is not the same as being helpful, truthful, or good at a downstream task. A model can have excellent perplexity and still fail at reasoning, follow instructions poorly, or hallucinate. This is why perplexity anchors *pretraining* but is complemented by task benchmarks and human preference for judging a finished model.\n\n| Property | What it means |\n|---|---|\n| Definition | exp(cross-entropy loss) — the average per-token surprise |\n| Interpretation | Effective branching factor / uniform choices per token |\n| Direction | Lower is better; a perfect model scores 1 |\n| Ties to | Bits per token; text compression quality |\n| Key limitation | Tokenizer-dependent; measures fit, not usefulness |\n\n```svg\n\n```\n\nThe unhelpful way to meet perplexity is as an opaque number on a training dashboard that should go down. The useful way is to hold onto its one plain meaning — the average number of choices the model feels it is guessing among for each token — and let everything else follow from it. Because it is the exponential of the cross-entropy the model already minimizes, it is free to compute and tracks training directly; because uncertainty and compression are the same thing, a lower-perplexity model is a better compressor of language; and because it is measured per token against a reference, it cannot be compared across tokenizers and says nothing about whether the model is actually useful. Read perplexity through a how-surprised-is-the-model-at-each-token lens rather than a mysterious-loss-number lens, and it becomes both the most natural metric to watch during pretraining and one you know better than to trust alone.