Chengyi Wang, Sanyuan Chen, Yu Wu, … Furu Wei (Microsoft) — arXiv 2301.02111, January 2023

VALL-E: Speech as a Language

Stop regressing continuous spectrograms. Turn speech into a sequence of discrete codec tokens, train a language model on 60,000 hours of it — and a three-second recording of a stranger becomes a prompt.

Prerequisites: next-token prediction (a transformer decoder over a finite vocabulary) + what a spectrogram is. Residual vector quantization is re-derived from zero in Chapter 2.
11
Chapters
12
Interactive Sims
60K
Hours of Speech
3s
Enrollment Prompt

Chapter 0: The Studio Problem

Suppose someone hands you thirty seconds of a stranger's voice — a voicemail, a podcast clip, a recording of a grandparent who is no longer alive — and asks you to make that voice say a sentence it has never said.

In 2022 the honest answer was: not with thirty seconds. Come back with a few hours of that person reading scripted sentences, in a treated room, on a good microphone, with clean transcripts. Then we can fine-tune a model for them. Give us a day of GPU time and a per-speaker checkpoint to store.

That answer is not a failure of imagination. It is a direct consequence of how text-to-speech systems were built, and the shape of the constraint is worth understanding precisely, because VALL-E's contribution is not a better network. It is a different contract with the data.

What a cascaded TTS system actually is

The dominant design — Tacotron 2, FastSpeech, Transformer-TTS, and their descendants — is a two-stage cascade. Stage one, the acoustic model, maps text (usually converted to phonemes first) to a mel spectrogram: a matrix of real numbers, roughly 80 rows of frequency-band energies by a few hundred columns of time frames. Stage two, the vocoder, maps that spectrogram back to a waveform you can play.

Text
"After early nightfall, the yellow lamps would light up…"
↓ grapheme-to-phoneme (G2P)
Phonemes
AE F T ER   ER L IY   N AY T F AO L …  — a short discrete sequence
↓ acoustic model (the hard part)
Mel spectrogram
A real-valued matrix, e.g. 80 × 800 floats. Continuous. Predicted by regression against the ground-truth spectrogram.
↓ vocoder (HiFi-GAN, WaveGlow, WaveNet…)
Waveform
22–24 kHz samples. Playable audio.

The paper's Figure 1 draws exactly this as the "previous pipeline": phoneme → mel-spectrogram → waveform. Hold that arrow chain in mind; the entire paper is the claim that the middle arrow is the wrong intermediate.

Now look at the training objective of the acoustic model. It predicts a spectrogram frame and is scored by how close, in L1 or L2 distance, that frame is to the ground truth. This is continuous signal regression. Every property of the system that will hurt us later follows from that one choice.

Consequence 1: regression demands clean targets

A regression loss says "output the conditional mean of the target." If your training audio was recorded in a bedroom with a laptop fan and a passing bus, the conditional mean of "what a spectrogram looks like given these phonemes" includes fan and bus. The model does not learn to ignore noise; it learns to emit the average noise.

Worse, regression punishes legitimate variation. The same sentence, spoken twice by the same person, differs in rhythm, pitch contour, and emphasis. Both renditions are correct. A squared-error loss handles two correct answers by outputting their average, which is a third thing that is often less natural than either. This is the classic over-smoothing failure of regression TTS: mumbly, flat, "averaged" prosody.

So the field converged on a workaround: only train on studio recordings. LJSpeech is one speaker reading in a quiet room. LibriTTS is a curated, filtered, cleaned subset of audiobook recordings. VCTK is 108 speakers in a hemi-anechoic chamber. The paper states the constraint bluntly — advanced systems "still require high-quality clean data from the recording studio," and "large-scale data crawled from the Internet cannot meet the requirement, and always lead to performance degradation."

The trap, stated as a loop. Regression needs clean targets → clean targets are expensive → expensive data is small (the paper's number: at most about 600 hours) → small data covers few speakers and few acoustic conditions → the model generalizes badly to a new voice → so you fine-tune per speaker → which requires clean data from that speaker. The loop never opens from inside. You cannot fix a data-contract problem with a better decoder.

One more angle on the same trap, for anyone who has fought it in another domain: the data requirement is not a property of speech, it is a property of the loss. Swap the loss and the requirement evaporates, along with the ceiling it imposed. That sentence is the whole paper, and everything after this point is the engineering needed to make the swap possible.

Consequence 2: no in-context learning

Here is the part that should feel strange to anyone who has used a large language model. In text, you do not fine-tune GPT-3 to make it write in a particular style. You paste an example into the prompt. The model reads the example and continues in kind. That is in-context learning: adapting behaviour from a prefix, with zero parameter updates.

A mel-regression TTS system has no equivalent move. Its input is a phoneme sequence; there is no slot in which "here is what this speaker sounds like" is a natural continuation of the same sequence. The information is a different type from the input. So the field bolted on side channels, and there were two families:

FamilyMechanismWhat it costs you
Speaker adaptationFine-tune some or all weights on the target speaker's recordings (Chen et al. 2019; Wang et al. 2020; AdaSpeech). Meta-learning variants (Meta-TTS) cut it to 5-shot.A training run and a stored checkpoint per speaker. Minutes-to-hours of latency before the voice exists.
Speaker encodingA separate speaker encoder — often pre-trained on speaker verification — turns enrolled audio into a fixed embedding vector that conditions the acoustic model (Jia et al. 2018; Arik et al. 2018; YourTTS).An extra pre-designed module, a bottleneck of one vector, and quality that degrades sharply for speakers outside the encoder's training distribution.

The paper's summary of both: they require "additional fine-tuning, complex pre-designed features, or heavy structure engineering." And it notes, citing Jia et al. and Arik et al., that speaker encoding works with three seconds of enrolled audio for in-domain speakers — the qualifier doing enormous work. Tan et al.'s survey is quoted as finding even advanced speaker-embedding models "still undesirable" for unseen voices.

Sit with the speaker-encoder bottleneck for a moment, because it is the sharpest technical statement of what is missing. Everything the system will ever know about a voice must survive compression into one vector — typically 256 or 512 floats, trained to answer a verification question ("same person, yes or no?"). That objective rewards discarding exactly the things TTS needs. Room reverberation? Discard it — it varies within a speaker. Emotional state? Discard it — same. Breathiness on a particular vowel? Not verification-relevant. The encoder is a professional forgetter, and we are asking it to be a recorder.

The gap the paper walks into

By late 2022 two facts sat next to each other, unresolved.

Fact one. Text language models had shown that scale plus a discrete-token objective yields in-context learning for free. The paper traces the pre-training data curve explicitly: 16 GB of uncompressed text for BERT, 160 GB for RoBERTa, 570 GB for GPT-3, roughly 1 TB for PaLM. Nobody engineered "few-shot prompting" into GPT-3; it emerged.

Fact two. TTS had a hard ceiling of about 600 hours, because the loss function demanded clean targets, and clean targets do not scale.

VALL-E's move is to attack fact two so that fact one becomes available. If speech could be represented as discrete tokens rather than continuous spectrograms — and if predicting those tokens could be a classification problem rather than a regression problem — then noisy audio stops being poison. A token sequence extracted from a noisy recording is a perfectly valid token sequence; the model learns "this prefix leads to these tokens," fan noise and all, and can reproduce the noise or not depending on the prompt.

Here is the paper's own comparison table, reproduced exactly. Four rows; every one of them is a consequence of the first.

Current systems (2022)VALL-E
Intermediate representationmel spectrogramaudio codec code
Objective functioncontinuous signal regressionlanguage model
Training data≤ 600 hours60K hours
In-context learningnoyes

Read that table top to bottom as a causal chain, not a list of independent upgrades. Change the representation to something discrete, and the objective can become a language model. Once the objective is a language model, noisy internet-scale audio becomes usable, so the data can jump by two orders of magnitude. Once the model is a language model trained on that much data, prompting works — and prompting is zero-shot voice cloning, because a voice is just a prefix.

The one-sentence thesis. VALL-E does not learn to clone voices. It learns to continue token sequences, on so much data that continuing a sequence which begins with your voice happens to mean speaking in your voice. Voice cloning is not a feature that was added; it is a side effect of the framing that could not be prevented.

What the three seconds actually buy

Before the machinery, watch the shape of the two workflows side by side. On the left, the pre-VALL-E path for a new speaker: collect clean audio, transcribe it, fine-tune, store a checkpoint, then synthesize. On the right, VALL-E: encode three seconds into tokens, paste them in front of the sequence, decode. No gradient ever moves.

Two workflows for one new voice

Press play to run both pipelines for a speaker the system has never heard. The old path spends its time in a training loop that produces a per-speaker artifact. The VALL-E path has no training loop at all — the enrolled audio enters as tokens in the prompt. Toggle the enrollment budget to see which path even survives at 3 seconds.

The old pipeline needs enough clean audio to fine-tune on. Watch what it reports at each budget.

The asymmetry the simulation is trying to make visceral: the two paths do not differ by a constant factor of effort. They differ in kind. One of them has a per-speaker training step, and therefore a per-speaker minimum data requirement, a per-speaker storage cost, and a per-speaker latency. The other has none of those things, because adding a speaker means writing 225 numbers at the front of a sequence.

What is at stake beyond convenience

It would be easy to file this under "nice engineering win." Three consequences say otherwise, and each gets a chapter later.

A fourth consequence is organizational rather than technical, and it explains why this paper changed a field's direction rather than just its leaderboard. Once TTS is a language-modelling problem, the people who improve it need not be speech researchers. Every advance in decoding, scaling, prompting, or transformer efficiency arrives from a much larger community for free. Fields that adopt a general substrate get to ride other people's progress; fields that keep bespoke machinery have to generate all of their own.

And one consequence that is not a benefit: a system that clones a voice from three seconds of audio, with no fine-tuning, is a system that clones anyone's voice from three seconds of audio. The paper's Broader Impacts paragraph names spoofing voice identification and impersonation directly. Chapter 10 takes that seriously rather than as a footnote.

A note on what this chapter has NOT claimed. Nothing above says cascaded TTS sounds bad. Trained on studio data, for a speaker it knows, a 2022 system produces excellent audio — that is why the field shipped it in products. The failure is narrow and specific: an unseen speaker, from seconds of audio, with no training run. Keep the failure narrow; a paper that solves a narrow failure is easier to evaluate than one that claims to solve everything.

Feel the over-smoothing, with actual numbers

"Regression averages two correct answers" is easy to say and easy to nod along to without believing. Make it concrete with the smallest possible case, and do every step by hand.

Take a single frequency bin of a mel spectrogram at one time frame — one number. The speaker says the same sentence twice. In take A, at that frame, the vowel has already begun and the bin's log-energy is 4.0. In take B the speaker was a hair slower, the vowel has not started, and the bin sits in silence at 0.0. Both takes are real recordings of a real human saying the sentence correctly.

Your acoustic model outputs one number, call it m, and is trained with squared error against whichever take it is shown. Over the corpus each take appears equally often, so the expected loss is

L(m) = ½(m − 4.0)2 + ½(m − 0.0)2

Differentiate and set to zero, showing every step because the conclusion depends on it:

dL/dm = ½ · 2(m − 4.0) + ½ · 2(m − 0.0) = (m − 4.0) + m = 2m − 4.0
2m − 4.0 = 0  →  m* = 2.0

The optimum is 2.0 — a half-energy vowel onset that neither take contains. And the residual loss at that optimum is not zero:

L(2.0) = ½(2.0 − 4.0)2 + ½(2.0 − 0.0)2 = ½(4.0) + ½(4.0) = 4.0

Four units of irreducible loss, and the model's best possible answer is an artifact. The training signal is telling the network "you are wrong" no matter what it does, and the least-wrong response is to smear the vowel onset. Multiply that across every frame and every bin and you have the characteristic mushy consonants of regression TTS.

Now redo the same situation as a classification problem. Quantize the bin into a discrete alphabet — say the tokens silence, half, full — and train with cross-entropy. The optimum is now a distribution: p(silence) = 0.5, p(full) = 0.5, p(half) = 0. And the loss at that optimum is

L = −½ log(0.5) − ½ log(0.5) = log 2 ≈ 0.693 nats

Still nonzero — the ambiguity is real and no model can wish it away — but notice what changed. The model's output is now honest about the ambiguity instead of resolving it into a fiction. And at sampling time you draw silence or full, each a genuine rendition, never the impossible middle. This is the whole reason the paper can write "language model" in the objective row of its comparison table and mean something load-bearing by it.

python — the two objectives, side by side on the ambiguous frame
import numpy as np

takes = np.array([4.0, 0.0])            # two valid ground truths

# --- regression: the model emits ONE number ---
m_star = takes.mean()                  # 2.0  <- not in `takes`
mse    = ((m_star - takes) ** 2).mean()  # 4.0  irreducible

# --- classification: the model emits a DISTRIBUTION ---
p = np.array([0.5, 0.0, 0.5])         # silence / half / full
ce = -(np.log(0.5) * 0.5 + np.log(0.5) * 0.5)  # 0.693 nats
draw = np.random.choice(['silence', 'half', 'full'], p=p)
# draw is ALWAYS a real rendition. 'half' has probability zero.

One caveat so this is not oversold. Quantization is lossy: rounding a continuous bin to three levels throws away detail, and a bad codebook would trade over-smoothing for coarseness. The entire reason this paper is possible in 2023 and not 2018 is that neural audio codecs got good enough that the quantization loss stopped mattering perceptually. That is Chapter 2's subject.

What "zero-shot" means here, precisely

The phrase is used loosely across the literature, so pin it down before the results chapter asks you to compare systems. There are four adaptation regimes, and they differ in what happens to the model's weights.

RegimeWeights change?Target audio neededTime to first outputPer-speaker artifact
Full fine-tuningall of themminutes to hours, cleanhoursa whole model
Parameter-efficient adaptationa small subset (AdaSpeech-style)minutes, cleanminutesa small delta
Few-shot / meta-learneda few gradient steps (Meta-TTS: 5-shot)seconds to a minuteseconds to minutesa small delta
Zero-shot (speaker encoding)none≈3 simmediateone embedding vector
Zero-shot (VALL-E)none≈3 s, any qualityimmediate1,800 integers — the prompt itself

The last two rows look similar and are not. A speaker encoder is a learned compressor: it was trained on some distribution of voices, and it maps a new recording into an embedding space it built. If the new voice is unlike anything in that training distribution, the embedding lands somewhere meaningless and quality collapses — the failure mode Tan et al.'s survey flags. VALL-E's "speaker representation" is not learned at all; it is the enrolled audio, tokenized. There is no encoder to be out of distribution.

Two more clarifications about the word, because both come up:

A last note on vocabulary before moving on. This lesson uses enrolment for the short recording of the target speaker, acoustic prompt for its tokenized form C̃, and prefix specifically for the AR model's use of it. Papers in this area use all three loosely and sometimes interchangeably; Chapter 6 shows the AR and NAR models use the prompt in structurally different ways, so the distinction is worth keeping.

The economics, since they drive everything

It is worth being blunt about why the 600-hour ceiling existed, because it was not a technical limit. It was a budget.

Cost lineStudio TTS corpusLibriLight-style corpus
Recordingbooked studio, engineer, paid voice talent, retakeszero — the audio already exists
Transcriptionhuman transcription and verification, per utterancezero — an ASR model generates pseudo-labels
Segmentation and cleaningmanual or semi-manual, with rejection of noisy takesautomatic cropping; nothing is rejected
Speakerseach one is a separate hiring and recording effort≈7,000, free
Marginal cost of the 601st hourhundreds of dollars≈ the cost of the disk

Once you see that column comparison, the whole paper reads as an attempt to move TTS from the left column to the right one. Every technical choice — discrete tokens, a classification loss, a frozen off-the-shelf codec, pseudo-labels from a hybrid ASR model — exists to make the right column usable. The architecture is downstream of the accounting.

One more framing note. Nothing in that economics table is speech-specific. Any field whose training objective demands curated data pays the same tax, and any field that can switch to an objective tolerant of noise gets the same refund. Keep the shape of the argument; the domain is incidental.

Inline check before Chapter 1. If regression's problem is over-smoothing, why not just use a GAN or a diffusion model on mel spectrograms — both of which model distributions rather than means? — You can, and people did (Grad-TTS, diffusion zero-shot TTS). It fixes the over-smoothing but not the prompting problem: the output is still continuous frames, so enrolment audio still has no natural slot in the input, and you are back to a speaker encoder. Discreteness is what makes the prompt and the output the same kind of object.

Three misconceptions to kill before Chapter 1

A short history of the intermediate representation

Every generation of speech synthesis is characterized by what it chose to put in the middle. Reading the lineage this way makes VALL-E look less like a jump and more like the next entry in a very old argument.

EraIntermediateWhy it was chosenWhy it was abandoned
Concatenative (1990s–2000s)Recorded diphone unitsReal human audio, so the timbre is perfectJoins are audible; a new voice means recording a whole new unit database
Statistical parametric (2000s)Vocoder parameters (F0, spectral envelope, aperiodicity)Compact, controllable, small footprintBuzzy vocoded quality — the parameterization discards too much
Neural cascaded (2016–2022)Mel spectrogramPerceptually aligned, easy for a CNN/RNN to regressContinuous regression → over-smoothing, clean-data requirement, no prompting
Self-supervised units (2021–)HuBERT / vq-wav2vec k-means codesDiscrete at last, and semantically richThey deliberately discard speaker identity — and need a separately trained vocoder
Neural codec codes (VALL-E)EnCodec RVQ tokensDiscrete and speaker-preserving and shipped with a decoder— (Chapter 10 has the honest limitations)

Two rows in that table deserve a second look because they set up the next chapter's argument. The self-supervised-units row is where GSLM lives: it discretized speech and got a language model working over the tokens, which is most of VALL-E's idea. But HuBERT codes are trained to predict masked content, and they succeed by throwing away who is speaking. The paper quantifies the damage in Chapter 9's table: GSLM's speaker similarity is 0.126 against a ground-truth ceiling of 0.754. The tokens are right about the words and know nothing about the voice.

Which sets up the precise requirement VALL-E's vocabulary must satisfy: discrete like HuBERT, but retaining everything HuBERT throws away. The paper is explicit that this is why it reaches for an audio compression codec rather than a representation-learning model — a codec is trained to reconstruct the waveform, so by construction it cannot discard speaker identity, room acoustics, or emotion. It is not allowed to forget. That is the whole trick, and Chapter 2 is about how EnCodec pulls it off.

Four questions readers ask here

The abstract, decoded line by line

Abstracts compress a paper into six sentences and are therefore mostly unreadable until you already understand the work. Since you now understand the problem, here is the abstract with each clause mapped to the chapter that unpacks it — a table of contents disguised as a summary.

ClauseWhat it is actually claimingChapter
"a language modeling approach for text to speech synthesis"The objective changes from regression to next-token classification. Everything else follows.1
"discrete codes derived from an off-the-shelf neural audio codec"The vocabulary is EnCodec's RVQ tokens. Frozen, not trained here.2
"rather than continuous signal regression as in previous work"The explicit rejection of the mel-spectrogram intermediate.0–1
"scale up the TTS training data to 60K hours"The bet: 100× the prior ceiling, made possible by the objective change.8
"emerges in-context learning capabilities"Emerges, not "implements" — nobody built voice cloning; it is a consequence of prefix-continuation on speaker-preserving tokens.4, 6
"only a 3-second enrolled recording of an unseen speaker as an acoustic prompt"225 frames, of which the AR model sees 225 integers — 281 bytes.6
"significantly outperforms the state-of-the-art zero-shot TTS system"YourTTS, on speaker similarity and naturalness, on two datasets.9
"could preserve the speaker's emotion and acoustic environment"Two capabilities nobody designed, both consequences of a tokenizer that is not allowed to forget.9

One word in there is doing more work than the rest: emerges. Papers use it loosely, but here it is precise and checkable. Chapter 4 shows the training code that contains no prompt construction of any kind. The capability is not in the code; it is in what the objective implies.

Where we are going

Reframe and vocabulary (Ch 1–3)
Regression → language modelling · EnCodec tokens as the alphabet · the formal objective
The two decoders (Ch 4–6)
AR for codebook 1 · NAR for codebooks 2–8 · the acoustic prompt as in-context learning
Showcase and evidence (Ch 7–9)
Fill the token grid yourself · the 60K-hour bet · every number the paper reports
Honest ledger (Ch 10)
Robustness failures · coverage gaps · the safety chapter · what came next

How to read this lesson

Eleven tabs, and they are not all the same kind of thing. Three routes through them, depending on what you came for.

If you want…ReadWhy
The idea, in twenty minutes0, 1, 7, 10The problem, the reframe, the showcase, the honest limits. Skips the derivations.
To implement it2, 3, 4, 5, 7Vocabulary, objective, both decoders, and the full inference loop with shapes.
To review or teach itall, in orderEvery result is normalized against a ceiling and every derived number is marked as derived.

Each chapter ends with a quiz that tests the one idea it was built around. If a quiz feels unanswerable, the answer is in that chapter, not a later one — that is the constraint the chapters were written under.

One reading habit for the whole lesson: every time a number appears, ask what it is a number of. This paper mixes hours, frames, tokens, quantizers, seconds, and bits per second, and confusing frames with tokens is the single fastest way to lose the thread. Chapter 2 sets up the conversion table and we will use it relentlessly.

Why could pre-VALL-E TTS systems not simply train on 60,000 hours of noisy internet audio and get the same benefits?

Chapter 1: The Reframe — Speech as Next-Token Prediction

Chapter 0 ended on an ambition: make speech synthesis a language modelling problem so that scale and prompting come along for free. Ambition is cheap. This chapter asks what it would actually take, and discovers that the obvious attempts fail for two different reasons — which is exactly why the solution needs the specific machinery it does.

A language model needs two things from its data: a finite vocabulary it can put a softmax over, and a sequence short enough that a transformer can attend across it. Text hands you both for free: 50,000 subwords, a few thousand of them per document. Speech hands you neither.

Attempt 1: model the raw waveform

Audio is stored as a stream of 16-bit integers. The paper opens its background section with exactly this observation: "a generative model is required to output 216 = 65,536 probabilities per timestep to synthesize the raw audio."

Sixty-five thousand output classes is uncomfortable but not fatal — text models routinely carry vocabularies that size. The fatal part is the second sentence: "the audio sample rate exceeding ten thousand leads to an extraordinarily long sequence length."

Put numbers on it. At 24 kHz, ten seconds of speech is

24,000 samples/s × 10 s = 240,000 timesteps

Two hundred forty thousand positions for one short sentence. And self-attention costs O(T2): the attention matrix alone would have 240,0002 = 5.76 × 1010 entries — 57.6 billion pairwise scores, per head, per layer, for one utterance. Nothing about this is negotiable with a bigger GPU.

Two separate problems, two separate fixes. Vocabulary size and sequence length are independent axes, and a solution has to move on both. Confusing them is the reason several plausible approaches half-work. Keep the axes separate in your head for the rest of this chapter — the table below is organized around them.

Before the attempts, one orienting sentence: each of the three below fixes exactly one of the two axes, and the winner is the first representation that fixes both without destroying the speaker.

Read them as a search, not a history. The field was not confused; it was working through a genuinely constrained space, one axis at a time.

Attempt 2: µ-law companding (WaveNet's answer)

The classical fix for the vocabulary axis is µ-law companding, a nonlinear amplitude warp borrowed from telephony. It exploits the fact that human loudness perception is roughly logarithmic: differences among quiet samples matter more than differences among loud ones. So you compress the amplitude scale logarithmically, then round to 8 bits.

The paper's summary: "µ-law transformation can quantize each timestep to 256 values and reconstruct high-quality raw audio. It is widely used in speech generative models, such as WaveNet, but the inference speed is still slow since the sequence length is not reduced."

That is the whole story in one sentence. Vocabulary: 65,536 → 256, a 256× win. Sequence length: 240,000 → 240,000, no win at all. WaveNet generates one 8-bit sample at a time, autoregressively, 24,000 times per second of audio. Even with every engineering trick, that is a generation loop with a quarter of a million serial steps per utterance.

Quick check. Would a bigger transformer make the 240,000-step problem tractable? — No, and the reason is worth being precise about. Model size does not change sequence length. The 240,000 serial generation steps and the quadratic attention over them are properties of the representation, not of the network. This is a case where no amount of the usual scaling lever touches the obstacle, which is exactly why the answer had to be a change of representation.

Attempt 3: self-supervised units (and the speaker they throw away)

The modern fix for the length axis comes from self-supervised speech models. vq-wav2vec, HuBERT, and w2v-BERT all run a convolutional front end that downsamples aggressively — typically to 50 frames per second — then discretize the resulting features, either with a learned codebook or by k-means over the continuous representations. Ten seconds becomes 500 tokens over a few hundred units. Both axes solved at once.

GSLM did precisely this and built a "textless" spoken language model on top. The paper credits it and then delivers the objection: "the speaker identity has been discarded and the reconstruction quality is low."

Why discarded? Because of what the pre-training objective rewards. HuBERT is trained to predict masked cluster assignments — a task about phonetic content. Two people saying the same word should land on the same unit; that is what makes the units useful for recognition. Speaker identity is, from that objective's point of view, a nuisance variable to be quotiented away, and the model obligingly quotients it away.

You cannot recover from downstream what the tokenizer deleted upstream. Chapter 9's table makes the loss quantitative: GSLM scores 0.126 speaker similarity where ground truth scores 0.754. The words survive; the person does not.

Before the table, name the criterion it is scored against, because a list of representations without a criterion is trivia. We need a representation that is short, discrete, speaker-preserving, and invertible — all four, simultaneously. Each row below fails or passes on exactly those four counts.

The requirement, stated exactly

Three attempts, three partial answers. Assemble them into a specification.

RepresentationVocabularySteps for 10 sKeeps the speaker?Comes with a decoder?
Raw 16-bit PCM65,536240,000yes (it is the audio)trivially
µ-law (WaveNet)256240,000yestrivially
HuBERT / vq-wav2vec units~100–1000~500nono — needs a trained vocoder
Mel spectrogramcontinuous~800 framesyesneeds a vocoder
EnCodec RVQ codes1024 per codebook750 frames × 8yesyes — off the shelf

The paper lists the same three advantages of an audio codec in prose, and it is worth reading them as a checklist that no other row satisfies: (1) it "contains abundant speaker information and acoustic information, which could maintain speaker identity in reconstruction compared to HuBERT codes"; (2) "there is an off-the-shelf codec decoder to convert discrete tokens into a waveform, without the additional efforts on vocoder training"; (3) "it could reduce the length of time steps for efficiency to address the problem in µ-law transformation."

Notice the deep reason a compression codec is the right tool. A codec's training objective is reconstruction of the waveform. It is graded on getting the audio back. It therefore cannot discard speaker identity, room reverberation, or emotional colouring — those are precisely the things reconstruction error would punish it for losing. Where HuBERT is rewarded for forgetting, EnCodec is punished for it. The paper reaches for a compressor not because compression is elegant, but because compression is a forgetting-proof objective.

The design principle, generalized. When you want a discrete substrate for a generative model, choose the tokenizer whose training objective forbids discarding the attribute you care about. Want the speaker? Train for reconstruction. Want only the words? Train for masked-unit prediction. AudioLM's insight — and later Moshi's — is that you may want both, so you carry two token streams. VALL-E takes the simpler road: it has text for content, so it only needs the acoustic stream.

The length win, priced out

How much does 320× downsampling actually buy? Do it in full, because the number is larger than intuition suggests.

Traw = 240,000   →   Tcodec = 240,000 / 320 = 750

attention entries: Traw2 = 5.76 × 1010  vs  Tcodec2 = 5.625 × 105

ratio = 5.76×1010 / 5.625×105 = 102,400×  (= 3202, as it must be)

A hundred thousand times less attention arithmetic. That is not an optimization; it is the difference between "impossible" and "twelve layers on sixteen V100s." And the sequential-decoding win is the linear factor: 240,000 serial generation steps become 750 — before Chapter 5's second trick cuts it further.

What changes when the loss becomes cross-entropy

Chapter 0 derived the over-smoothing pathology of squared error on one ambiguous frame. Now watch what the replacement objective gives you that regression structurally cannot: a knob.

A language model's output at each step is a vector of logits, turned into a distribution by a softmax. Insert a temperature T and you can dial the distribution's sharpness continuously:

pi = exp(zi / T) / Σk exp(zk / T)

Work it out by hand on four candidate tokens with logits z = [3.0, 2.0, 1.0, 0.0]. At T = 1 exponentiate each logit:

e3.0 = 20.0855  ·  e2.0 = 7.3891  ·  e1.0 = 2.7183  ·  e0.0 = 1.0000
sum = 20.0855 + 7.3891 + 2.7183 + 1.0000 = 31.1929
p = [20.0855/31.1929, 7.3891/31.1929, 2.7183/31.1929, 1.0000/31.1929]
p = [0.6439, 0.2369, 0.0871, 0.0321]

Now T = 0.5. Divide every logit by 0.5 first, giving [6, 4, 2, 0]:

e6 = 403.4288  ·  e4 = 54.5982  ·  e2 = 7.3891  ·  e0 = 1.0000
sum = 466.4161
p = [0.8650, 0.1170, 0.0158, 0.0021]

And T = 2, logits [1.5, 1.0, 0.5, 0]:

e1.5 = 4.4817  ·  e1.0 = 2.7183  ·  e0.5 = 1.6487  ·  e0 = 1.0000
sum = 9.8487
p = [0.4550, 0.2760, 0.1674, 0.1015]

The top token's probability slides 0.8650 → 0.6439 → 0.4550 as T goes 0.5 → 1 → 2, and the tail lifts correspondingly. As T → 0 the distribution collapses onto the argmax and the model becomes deterministic; as T grows it approaches uniform. One scalar, at inference time, with no retraining, moves the system continuously between "one canonical rendition" and "wildly varied delivery."

A mel-regression model has no such parameter, and could not be given one. Its output is a point estimate; there is no distribution to sharpen.

python — the temperature knob, three forms
import numpy as np
z = np.array([3.0, 2.0, 1.0, 0.0])

# 1) by hand, T = 1 — exactly the arithmetic above
e   = [20.0855, 7.3891, 2.7183, 1.0000]
s   = 31.1929
p1  = [v / s for v in e]              # [0.6439, 0.2369, 0.0871, 0.0321]

# 2) step by step, any T
def softmax_T(z, T):
    zt = z / T
    zt = zt - zt.max()                 # numerical stability; shifts cancel
    ex = np.exp(zt)
    return ex / ex.sum()

# 3) the one-liner you would actually ship
# torch.softmax(logits / T, dim=-1)  then  torch.multinomial(p, 1)

The paper uses this knob asymmetrically, and the asymmetry is a real design decision you should be able to justify: sampling for the AR model, greedy for the NAR model. It also reports a concrete failure — "we observe that beam search may lead the LM into an infinity loop" — which is why sampling rather than beam search. Chapter 6 explains why the split makes sense; Chapter 10 explains what it costs.

A note on what "diversity" is worth

It is tempting to file output diversity under "nice to have." Three places where it is load-bearing, so the temperature knob is not mistaken for decoration.

UseWhy determinism fails
Long-form narrationA regression model reads every sentence with the same contour. Over an hour, the sameness is what makes it sound synthetic — not the timbre.
Pseudo-data for ASRTraining a recognizer on a million identical deliveries teaches it one delivery. Chapter 9 makes this argument explicitly.
Re-rolling a bad takeIf the model is a function, an utterance it renders badly is rendered badly forever. Sampling lets you draw again — a practical mitigation for Chapter 10's failures.

See the difference: one text, two renditions

Regression vs sampling — the same sentence, twice

Both panels synthesize "I must do something about it" twice. The regression model is a function, so run 2 is pixel-identical to run 1. The codec language model draws tokens from a distribution, so the two runs differ in phrase durations and emphasis — the phenomenon the paper documents in its Figure 4. Slide the temperature to zero and watch the language model collapse into a function too.

Two things to notice while you play with it. First, at T = 0 the two runs of the language model become identical — the diversity is not magic, it is sampling, and turning sampling off turns diversity off. Second, at high T the renditions do not merely differ, they start to degrade: durations get erratic, emphasis lands in strange places. Diversity and reliability trade off against each other along one axis, and Chapter 10's robustness failures live at the far end of it.

What the reframe does NOT give you. It does not give you alignment guarantees. A regression TTS system with a duration predictor knows exactly how many frames each phoneme gets. An autoregressive codec LM decides that implicitly, token by token, with nothing forcing it to consume the phoneme sequence monotonically. That freedom is why prosody sounds natural — and, as the paper's Limitations section concedes, why "some words may be unclear, missed, or duplicated." You traded a guarantee for an expressiveness. Chapter 10 pays that bill in full.

What the reframe inherits for free

Calling something "a language model" is not a metaphor if the object really is a sequence of discrete symbols with a next-symbol objective. It means an entire toolbox transfers without adaptation, and the transfer is a large part of why this line of work moved so fast after 2023.

InheritedWhat it does hereChapter
Decoder-only transformersThe AR model is architecturally a small GPT4
KV cachingTurns the 750-step generation loop from O(T2) into O(T)4
Sampling and temperatureOutput diversity, and the fix for beam-search degeneracy1, 4
Prompting / in-context learningZero-shot voice cloning — the headline capability6
Weight tyingLogits as similarity in embedding space; a smoothness prior for free4
Scaling practiceWarmup, AdamW, linear decay — nothing speech-specific in the recipe8
Perplexity as a diagnosticAvailable in principle — though the paper does not use it3
Infilling and editingSpeech editing appears in Figure 1's application list3

Compare that list against what the mel-regression world had to build itself: duration predictors, monotonic attention mechanisms, speaker encoders, vocoders, and adaptation recipes — each a speech-specific research programme. Changing the representation did not just improve a metric; it moved the field onto infrastructure that thousands of people were already improving for other reasons.

Three questions any reframe must answer

Generalizing from this one case, "represent X as a sequence of discrete tokens and language-model it" is a move you will see attempted for images, video, actions, molecules, and time series. It succeeds when three questions have good answers, and Chapter 2 exists because two of them are hard here.

  1. Is the sequence short enough? Attention is quadratic and generation is serial. Raw audio fails this by a factor of 320; codec frames pass.
  2. Does the tokenizer keep what you need? HuBERT units fail this — they discard the speaker. EnCodec passes, because reconstruction forbids forgetting.
  3. Can you get back to the original medium? A tokenizer with no decoder means training a second model. EnCodec passes trivially: the decoder ships with it.

Every representation in Chapter 1's comparison table fails at least one. The reason 2022 was the year this became possible is that neural audio codecs were the first speech representation to pass all three at once.

Sampling has more than one knob

Temperature is the knob the paper names, but the decision "use sampling, not beam search" opens a small family of choices, and they behave differently on acoustic tokens than on text. Worth knowing which lever does what.

StrategyRuleBehaviour on codec tokens
Greedy / argmaxalways take the top tokenDeterministic, and prone to the same degeneracy that breaks beam search — sustained sounds sustain forever.
Beam searchkeep the k highest-likelihood sequencesThe paper's reported failure: "may lead the LM into an infinity loop." Maximizing sequence likelihood favours never stopping.
Temperature samplingsharpen or flatten, then drawWhat VALL-E uses. Low T → safe and flat; high T → expressive and unstable.
Top-krenormalize over the k most likely tokensTruncates the tail, which removes catastrophic tokens while keeping local variation. A natural robustness lever.
Nucleus (top-p)keep the smallest set with cumulative mass pAdapts the truncation to how confident the model is — wide in ambiguous silence, narrow mid-phoneme.

Why does the degeneracy hit harder here than in text? Because acoustic token sequences are far more locally predictable. In a sustained vowel, consecutive frames are nearly identical, so the model's top continuation is "more of the same" with very high confidence, over and over. Any decoding rule that follows local likelihood gets trapped. Text has the same failure mode — it produces repetition loops — but words change often enough that the trap is shallower.

Inline check. A colleague proposes fixing VALL-E's dropped words by lowering the temperature to 0.3. What breaks? — Diversity, first: the Figure 4 result disappears and the pseudo-data-for-ASR argument with it. And robustness may not even improve monotonically, because low-temperature decoding pushes back toward the greedy regime where the sustained-sound trap lives. The failure modes at both ends of the temperature axis are different, and "turn it down" is not a free move.

The over-smoothing story, one level deeper

Chapter 0 derived the pathology on a single ambiguous frame. It is worth seeing why the damage is worse than that one number suggests, because it explains the specific texture of regression-TTS artifacts.

Ambiguity in speech is not scattered randomly. It concentrates at boundaries — the onset of a vowel, the release of a stop, the transition between two words — because that is where small timing differences between takes produce large spectral differences. Steady-state regions (the middle of a long vowel) are highly reproducible and suffer almost no averaging.

RegionCross-take varianceEffect of averaging
Middle of a sustained vowellownegligible — the takes agree
Vowel onset / offsethighsmeared attack, softened transitions
Stop consonant release (/p/, /t/, /k/)very high — a few milliseconds of timing shifts everythingthe burst is averaged into mush
Word boundaries and pauseshighindistinct phrasing, "run-together" delivery

So the damage lands disproportionately on exactly the fast, low-energy, high-information events that carry intelligibility. That is why regression TTS is described as "mumbly" rather than "quiet" — the loud, slow parts are fine and the fast, informative parts are not. It is also why an energy-weighted metric would have understated the problem, which is the same measurement trap Chapter 2 flagged about codebook 1's 84%.

Why not discretize the mel spectrogram instead?

An obvious middle road: keep the mel spectrogram everyone understands, but quantize it into tokens so the objective can be classification. The paper cites work in this direction — VQTTS, Du et al., which uses self-supervised VQ acoustic features — so the idea was live.

Two things go wrong, and both are instructive.

The pattern is the same one from Chapter 0's history table. Every intermediate representation encodes a set of decisions about what is safe to discard, and those decisions were almost always made with a different task in mind. A compression codec is the one intermediate whose discard policy was set by the ear.

The trap in the phrase "speech is a language." It is a good slogan and a bad literal claim. Text tokens are discrete because language is discrete — words are the units. Acoustic tokens are discrete because a codec was told to make them so; the underlying signal is continuous, and a different codec would give a different, equally valid alphabet. So the vocabulary is a modelling choice, not a fact about speech, and everything downstream inherits that choice: its frame rate sets the latency floor, its depth sets the number of NAR passes, its reconstruction quality sets the ceiling.

A cost table for one second of speech

Abstract axes become concrete when you price a single second in every representation. Do the arithmetic once and the design space stops being a list of names.

RepresentationSteps per secondBits per stepBits per secondAttention entries for 10 s
Raw 16-bit PCM at 24 kHz24,00016384,0005.76 × 1010
µ-law 8-bit at 24 kHz24,0008192,0005.76 × 1010
HuBERT units at 50 Hz50≈9≈4502.5 × 105
EnCodec 8×1024 at 75 Hz75 frames (600 tokens)80 per frame6,0005.6 × 105

Read the last two rows side by side. HuBERT is cheaper than EnCodec on every axis — fewer steps, fewer bits, less attention. It is also unusable here, because those 450 bits per second are the wrong 450 bits: they encode what was said and deliberately not who said it. The extra 5,550 bits per second that EnCodec spends are exactly the speaker, the room, and the emotion. Chapter 6 shows that the model needs only 2,250 of those bits (three seconds of one codebook) to clone a voice.

This is the moment to notice that "compression" and "representation learning" pull in opposite directions and VALL-E wants the compression side. A good representation discards nuisance variables. A good codec discards nothing that a listener can hear. For generation, the listener's ear is the specification.

One caution about that table: cheapness is only a virtue conditional on sufficiency. HuBERT wins every column and loses the only comparison that matters. Efficiency arguments are always downstream of an adequacy argument, and reversing the order is how a design ends up fast and useless.

Three reframes that did not work, and one that did

Chronology is useful here because it shows the idea converging from several directions at once.

AttemptIdeaWhat it got rightWhat was missing
WaveNet (2016)Autoregressive over µ-law samples — genuinely a language model of audioThe objective. Classification, sampling, real diversity.240,000 steps per ten seconds. Unusable as a TTS backbone at scale.
VQ-VAE / Tjandra et al. (2019)Quantize unlabelled speech into discrete tokens, train a token-to-speech modelDiscreteness, and pre-training on unlabelled data.Under 1K hours of pre-training, and a VQ-VAE trained for reconstruction of spectra rather than waveforms.
GSLM (2021)Language model over HuBERT units, resynthesized with Tacotron 2 + WaveGlowThe full LM-over-tokens pipeline, textless.Speaker identity destroyed by the tokenizer (SPK 0.126), and a separately trained vocoder.
AudioLM (2022)Two token streams — semantic (w2v-BERT k-means) and acoustic (SoundStream RVQ) — with a hierarchical LMNearly everything: codec tokens, hierarchy, generation quality without a vocoder.No text input, so no content control. Speech-to-speech only.
VALL-E (2023)Codec tokens + phoneme conditioning + 60K hours— (Chapter 10 has the honest list)

Reading down the "what was missing" column is a good way to internalize what the paper actually added. Almost every ingredient existed. The assembly — a compression codec as the vocabulary, text as a prefix, and a hundred times more data than anyone had used — did not.

Check your understanding before moving on. Suppose you replaced EnCodec's 8 codebooks with 16 (the 12 kbps setting the paper mentions). Which of Chapter 1's two axes does that move, and in which direction? — It doubles the bits per frame from 80 to 160 and leaves the frame rate at 75 Hz, so the sequence length axis does not move at all. Reconstruction improves; the AR model's job is unchanged (it still predicts one codebook); the NAR model now needs fifteen calls instead of seven. Chapter 5's ledger goes from 757 sequential steps to 765 — barely worse. That the cost is nearly flat in the number of codebooks is a direct consequence of the AR/NAR split.

Why text conditioning matters (VALL-E vs AudioLM)

AudioLM got there first with the token substrate, so the paper is careful to draw the line. AudioLM is speech-to-speech: give it audio, it continues the audio. Its inputs are latent codes, not phonemes, so there is no channel through which you can specify what should be said. The paper's phrasing: "AudioLM is a speech-to-speech model, whereas VALL-E is a TTS model, so we can explicitly control the content in speech synthesis."

The consequence shows up in the robustness numbers. Because VALL-E conditions on pseudo-phonemes derived from a forced aligner, its generated audio is measurably more faithful to the intended words: the paper attributes its WER advantage over GSLM and AudioLM to being "trained with pseudo-phoneme instead of HuBERT/w2v-BERT codes, which enjoys better alignment quality with the input text."

So the architecture in one line: phonemes carry the content, acoustic tokens carry the voice, and the language model learns the joint distribution over both. Chapter 3 makes that sentence formal, and Chapter 6 shows the ablation that proves each half is doing the job assigned to it.

µ-law companding already turns audio into a small discrete vocabulary. Why was it not enough to make TTS a language modelling problem?

Chapter 2: EnCodec Tokens as the Vocabulary

Chapter 1 wrote the specification: a discrete alphabet, a short sequence, speaker identity preserved, and a decoder that already exists. VALL-E does not build such a thing. It picks one off the shelf — EnCodec, Défossez et al. 2022 — freezes it, and never trains it again.

This chapter is about what that frozen tokenizer actually does, because every design decision in the rest of the paper is downstream of its output shape. If you have already read the EnCodec Veanor or the neural audio codecs Gleam, treat this as the compressed re-derivation with VALL-E's numbers attached. If you have not, everything is built from zero here.

The shape of the tokenizer

EnCodec is a convolutional autoencoder with a quantizer wedged in the middle. Input: 24 kHz waveform. Output: the same 24 kHz waveform. In between, three things happen.

1 · Convolutional encoder
Strided convolutions downsample the waveform 320×. A 24,000 Hz signal becomes a stream of embedding vectors at 75 Hz. Each vector summarizes 320 consecutive samples ≈ 13.33 ms of audio.
↓ continuous vectors, 75 per second
2 · Residual vector quantizer (RVQ)
Each vector is replaced by a stack of 8 codebook indices, each in 0…1023. This is the discretization — the step that creates the vocabulary.
↓ integers
3 · Convolutional decoder
Sums the looked-up codebook vectors back into a continuous embedding and upsamples to a 24 kHz waveform. Already trained. Ships with the model. VALL-E never touches it.

Fix the conversion table now and refer back to it whenever a number appears. Every quantity in this paper is derived from these five rows.

QuantityValueWhere it comes from
Sample rate24,000 HzEnCodec's operating point in this paper
Downsampling factor320×the encoder's stride product
Frame rate75 Hz24,000 / 320 — one frame every 13.33 ms
Quantizers (codebooks)8the 6 kbps operating point the paper chose
Entries per codebook1,024= 10 bits of index per codebook per frame

From those five rows, everything: T = seconds × 75 frames, the code matrix is T × 8 integers, the bitrate is 75 × 8 × 10 = 6,000 bits per second, and the paper's own worked case follows — "given a 10-second waveform, the discrete representation is a matrix with 750 × 8 entries, where 750 = 24,000 × 10 / 320."

The compression ratio, for scale: raw 24 kHz 16-bit audio is 24,000 × 16 = 384,000 bits per second. At 6 kbps the codec is throwing away 384,000 / 6,000 = 64× the data and reconstructing something a listener accepts. That is the technology that had to mature before this paper could exist.

Why one codebook cannot work — the number that forces RVQ

Here is the question that motivates the whole residual construction, and it is worth being frustrated by it before seeing the answer. We need 80 bits of information per frame (that is what 6 kbps at 75 Hz means: 6,000 / 75 = 80). Why not just use one enormous codebook?

Because a codebook with 80 bits of index has 280 entries:

280 = 1,208,925,819,614,629,174,706,176 ≈ 1.21 × 1024 entries

At 128 float32 dimensions each, storing it needs 1.21×1024 × 128 × 4 bytes ≈ 6.2 × 1026 bytes
— roughly a trillion times the total data ever produced by humanity.

And quantizing one frame would require a nearest-neighbour search over 1024 candidates. This is not "expensive." It is arithmetically impossible, at any budget, forever.

Residual vector quantization is the escape. Instead of one 80-bit codebook, use eight 10-bit codebooks applied in sequence, where each one quantizes what the previous ones failed to capture. The cost becomes 8 × 1,024 = 8,192 comparisons and 8 × 1,024 × 128 × 4 ≈ 4.2 MB of storage. From 1024 to 8,192.

Why this works at all. A single codebook must place its entries to cover the whole distribution — every possible sound. Eight stacked codebooks are a coarse-to-fine decomposition: the first covers the gross structure of the space, the second covers the leftover errors of the first (a much smaller, more concentrated cloud), the third the leftovers of that. Each stage faces an easier problem than the last, on a distribution that is already centred and shrunken. You are buying exponential expressiveness — 10248 distinct reachable points — at linear cost, in exchange for restricting which 1024 points are reachable. The restriction turns out to be perceptually harmless.

Worked by hand: quantizing one frame

Nothing about RVQ becomes real until you do it with your fingers. So: three dimensions instead of 128, two codebooks instead of eight, four entries instead of 1,024. Every arithmetic step shown.

The encoder hands us one frame embedding:

v = [ 0.90, −0.40, 0.20 ]

Codebook 1 (four entries, learned during EnCodec's training — here just given):

IndexVector
1e1 = [ 1.00, 0.00, 0.00 ]
2e2 = [ 0.00, 1.00, 0.00 ]
3e3 = [ 0.60, −0.60, 0.00 ]
4e4 = [ −0.50, 0.20, 0.80 ]

Stage 1. Find the nearest entry by squared Euclidean distance. Subtract, square each component, add. All four, no shortcuts:

v − e1 = [−0.10, −0.40, 0.20] → 0.01 + 0.16 + 0.04 = 0.21
v − e2 = [ 0.90, −1.40, 0.20] → 0.81 + 1.96 + 0.04 = 2.81
v − e3 = [ 0.30,  0.20, 0.20] → 0.09 + 0.04 + 0.04 = 0.17  ← smallest
v − e4 = [ 1.40, −0.60, −0.60] → 1.96 + 0.36 + 0.36 = 2.68

The winner is index 3. That integer is the frame's first-codebook token — in the real system, an integer in 0…1023, and the only thing the AR model of Chapter 4 will ever predict.

Now the move that makes it residual. We do not stop; we compute what we got wrong:

r1 = v − e3 = [0.90 − 0.60, −0.40 − (−0.60), 0.20 − 0.00] = [ 0.30, 0.20, 0.20 ]
‖r12 = 0.09 + 0.04 + 0.04 = 0.17

(The residual norm equals the winning distance, as it must — they are the same quantity written twice.)

Codebook 2 is a different codebook, trained on the distribution of first-stage residuals. Note its entries are all small: residuals live near the origin.

IndexVector
1f1 = [ 0.25, 0.25, 0.10 ]
2f2 = [ −0.30, 0.10, 0.20 ]
3f3 = [ 0.10, −0.20, 0.30 ]
4f4 = [ 0.35, 0.05, −0.15 ]

Stage 2. Same procedure, but the input is r1, not v:

r1 − f1 = [ 0.05, −0.05, 0.10] → 0.0025 + 0.0025 + 0.0100 = 0.0150  ← smallest
r1 − f2 = [ 0.60,  0.10, 0.00] → 0.3600 + 0.0100 + 0.0000 = 0.3700
r1 − f3 = [ 0.20,  0.40, −0.10] → 0.0400 + 0.1600 + 0.0100 = 0.2100
r1 − f4 = [−0.05,  0.15, 0.35] → 0.0025 + 0.0225 + 0.1225 = 0.1475

Winner: index 1. The frame's token stack is now [3, 1] — two small integers standing in for three floats.

The reconstruction. The decoder does not need v. It looks up and sums:

v̂ = e3 + f1 = [0.60 + 0.25, −0.60 + 0.25, 0.00 + 0.10] = [ 0.85, −0.35, 0.10 ]

v − v̂ = [ 0.05, −0.05, 0.10 ]  →  error = 0.0025 + 0.0025 + 0.0100 = 0.0150

Reading the error ledger — and the hierarchy it reveals

The signal energy is ‖v‖2 = 0.81 + 0.16 + 0.04 = 1.01. Track the error as a fraction of it:

After stageReconstructionSquared errorFraction of signal energyEnergy removed by this stage
0 (nothing)[0, 0, 0]1.0100100.00%
1 (codebook 1)[0.60, −0.60, 0.00]0.170016.83%83.17 pp
2 (codebook 2)[0.85, −0.35, 0.10]0.01501.49%15.34 pp

Codebook 1 removed 83.17 percentage points of the error. Codebook 2 removed 15.34. The first quantizer did 84.4% of the total work (83.17 / 98.51). This is not an accident of my chosen numbers — it is structural. Every stage operates on the leftovers of the last, and leftovers are by construction smaller than what they are left over from.

The paper says exactly this in its Figure 2 caption: "Because RVQ is employed, the first quantizer plays the most important role in reconstruction, and the impact from others gradually decreases." And in the method section: "tokens from previous quantizers recover acoustic properties like speaker identity, while the consecutive quantizers learn fine acoustic details."

This is the hinge of the entire paper. Eight codebooks are not eight equals. Codebook 1 carries the coarse structure — who is speaking, what the prosody is doing, where the phonemes are. Codebooks 2–8 carry progressively finer residual detail. That asymmetry is the licence for an asymmetric model: spend expensive sequential autoregression on the one codebook that determines everything, and cheap parallel refinement on the seven that polish it. Chapters 4 and 5 are that sentence, elaborated.

From hand arithmetic to numpy to the one-liner

Same computation, three levels of abstraction. Level two reproduces the hand numbers exactly — run it and check.

python — RVQ, step by step (reproduces the arithmetic above)
import numpy as np

v  = np.array([0.90, -0.40, 0.20])
CB = [
    np.array([[1.00, 0.00, 0.00],      # codebook 1
              [0.00, 1.00, 0.00],
              [0.60, -0.60, 0.00],
              [-0.50, 0.20, 0.80]]),
    np.array([[0.25, 0.25, 0.10],      # codebook 2 (residual-trained)
              [-0.30, 0.10, 0.20],
              [0.10, -0.20, 0.30],
              [0.35, 0.05, -0.15]]),
]

def rvq_encode(v, CB):
    residual, codes, recon = v.copy(), [], np.zeros_like(v)
    for stage, C in enumerate(CB):
        d = ((C - residual) ** 2).sum(axis=1)   # distance to every entry
        k = int(d.argmin())                       # the winning index
        codes.append(k)
        recon    = recon + C[k]                    # decoder SUMS the entries
        residual = residual - C[k]                 # what stage k+1 must fix
        print(f"stage {stage+1}: idx={k}  err={(residual**2).sum():.4f}")
    return codes, recon

codes, recon = rvq_encode(v, CB)
# stage 1: idx=2  err=0.1700     (0-based idx 2 == the 3rd entry)
# stage 2: idx=0  err=0.0150
# codes = [2, 0]   recon = [0.85, -0.35, 0.10]
python — the library one-liner VALL-E actually calls
from encodec import EncodecModel
import torchaudio, torch

model = EncodecModel.encodec_model_24khz()
model.set_target_bandwidth(6.0)          # 6 kbps  ->  8 quantizers

wav, sr = torchaudio.load("enrolled_3s.wav")  # resample to 24 kHz first
with torch.no_grad():
    codes = model.encode(wav[None])[0][0]     # -> LongTensor [1, 8, T]

# codes[0].T is the paper's matrix C : shape (T, 8), values in 0..1023
# 3 s of audio  ->  T = 3 * 75 = 225 frames  ->  225 x 8 = 1800 integers
wav_back = model.decode([(codes[None], None)])   # and back to 24 kHz audio

Walk the residual yourself

The residual walk — watch the error collapse

Step through the quantizer stack one codebook at a time. The left panel shows the target vector and the running reconstruction in 2-D projection; the right panel is the error ledger. Drag the bandwidth control to change how many quantizers you are allowed — this is literally EnCodec's bitrate knob, and the shape of the curve is why VALL-E treats codebook 1 differently from the rest.

Two readings to take away from that curve. First, the diminishing-returns shape is exactly what justifies a variable bitrate: EnCodec lets you truncate the stack and still decode, just with more error. The paper notes the alternative operating point — "if we choose EnCodec at 12K bitrates, there are 16 quantizers… the 10-second waveform corresponds to a matrix with 750 × 16 entries."

Second, and more important for what follows: the curve's steepness at stage 1 means that getting codebook 1 wrong is unrecoverable. No amount of later refinement fixes a bad first token, because later codebooks only encode residuals relative to whatever the first one chose. That asymmetry in error sensitivity is why VALL-E is willing to pay for slow, careful, autoregressive generation of codebook 1 and not of the others.

One frame, in words

Say what a single row of C is, physically, because the abstraction can float free. Frame t of a 10-second utterance is 13.33 ms of sound — roughly the length of a stop-consonant burst, or a fiftieth of a syllable. It is described by eight integers between 0 and 1,023, and the codec's decoder turns those eight numbers, plus its neighbours, into 320 waveform samples.

Eight small integers for a sliver of a syllable, from which a listener can identify the speaker, the room, and the mood. That is the compression achievement the language model is standing on, and it is why "the tokenizer is not the contribution" understates how much the contribution depended on it.

Where the codebooks came from

Chapter 2's hand-worked example took the codebooks as given. They are not given — they were learned when EnCodec was trained, and knowing roughly how changes what you expect of them.

Each codebook is learned as an online clustering of the vectors it is asked to quantize. Entries are typically updated by an exponential moving average toward the mean of the inputs assigned to them — k-means, run continuously during training — while a commitment loss pushes the encoder's outputs to stay near whichever entry they selected, so the encoder and the codebook converge on each other rather than drifting apart.

Two consequences that matter for reading VALL-E:

None of this is trained or modified by VALL-E. It inherits whatever EnCodec learned, dead entries and all. That is the price of a frozen tokenizer, and the paper judges it worth paying to avoid training a codec.

Inline check. If codebook 1 removes 83% of the error, why not use one codebook and accept 17%? — Because squared error in embedding space is not perceptual error. One codebook is 0.75 kbps, which is below every intelligible speech codec ever deployed. The remaining 17% is where consonant detail lives, and Chapter 6's ablation puts a number on it: 19.6% word error rate even with a perfect first codebook.

The bandwidth ladder

EnCodec is trained so that any prefix of the quantizer stack is decodable. That is a design choice with a name — quantizer dropout during codec training — and it is what makes the bitrate a runtime knob rather than a build-time constant. The ladder, for 24 kHz audio at 75 Hz:

QuantizersBits per frameBitrateMatrix for 10 sNAR calls VALL-E would need
1100.75 kbps750 × 10
2201.5 kbps750 × 21
4403.0 kbps750 × 43
8806.0 kbps750 × 87
1616012.0 kbps750 × 1615

The paper picks the 8-quantizer rung and says the choice is not sacred: "It is fine to choose other bitrate settings. A larger bitrate corresponds to more quantizers and better reconstruction quality." Chapter 5's cost ledger explains why the choice is cheap — adding quantizers adds NAR calls, and NAR calls are the inexpensive kind of step.

Sanity-check the residual walk against the paper

Before leaving the simulation, confirm that what it shows matches the paper's Figure 2 claim rather than an artifact of the toy numbers. Two invariants should hold no matter what codebooks you use.

Those two properties together are the entire justification for treating codebook 1 differently — and they are structural, not empirical. Any residual quantizer, on any signal, produces this shape. Which means the AR/NAR split is not tuned to speech; it is tuned to residual quantization, and would transfer to any domain tokenized the same way.

A property VALL-E does not use: streamability

EnCodec is a convolutional model, and its causal variant is designed to run streaming — encode and decode incrementally, with bounded latency, because that is what a transmission codec is for. Frames can be produced and consumed as they arrive.

VALL-E inherits none of that benefit, and it is worth being clear about why, because the reason is architectural rather than a limitation of the codec. Chapter 7 traces the dependency: the NAR model conditions on the entire first-codebook layer, which does not exist until the AR model has emitted ⟨EOS⟩. A streamable tokenizer wrapped in a non-streamable language model is a non-streamable system.

Worth noticing as a pattern. Component properties do not compose upward automatically. Streamability, latency bounds, and incrementality are properties of the whole dependency graph, and one global conditioning edge destroys them. When Chapter 10's successors made speech interactive, the change that mattered was not a faster codec — it was removing the edges that required the whole utterance to exist first.

The ceiling nobody mentions

Here is a consequence of freezing the tokenizer that is easy to miss and important for reading Chapter 9's numbers honestly.

VALL-E's output is decoded from 8 codebooks at 6 kbps. Even if the language model were perfect — if it predicted exactly the token matrix that EnCodec would have produced from the true target waveform — the audio you hear is EnCodec's 6 kbps reconstruction of that waveform, not the waveform. Quantization error is not something the language model can fix; it is baked into the vocabulary.

quality(VALL-E output) ≤ quality(EnCodec 6 kbps reconstruction) < quality(original recording)

So every naturalness number in this paper is measured against a ceiling that the codec sets. The paper's ground-truth rows are real recordings, not codec round-trips — which means part of the remaining CMOS gap to ground truth is not the language model's fault at all. A cleaner ablation would report a "codec round-trip" row: pass the ground-truth audio through EnCodec and back, and score it. That row is absent, and it would have separated "the model made a mistake" from "6 kbps is 6 kbps."

Diagnostic habit worth keeping. In any system with a frozen tokenizer or a frozen decoder, always ask for the reconstruction-only baseline — the score you get when you feed the ground truth through the tokenizer and straight back out, with the learned model removed entirely. It is the true ceiling, and the difference between it and the full system is the only part your model is responsible for. Papers that omit it are, usually unintentionally, charging the model for the codec's errors.

Data-flow summary — the shapes you must carry forward

ObjectSymbolShape / typeMeaning
Waveformyfloat[24,000 × sec]the audio itself
Code matrixC = Encodec(y)int[T × 8], values 0…1023T = 75 × sec
One framect,:int[8]the 8-deep token stack for 13.33 ms
One codebook layerc:,jint[T]the j-th quantizer across all time — a sequence
3-second promptint[225 × 8] = 1,800 intsthe enrolled recording, tokenized
10-second targetCint[750 × 8] = 6,000 intswhat the model must produce

Those last two rows are the entire zero-shot TTS problem in twelve integers of description: given 1,800 integers of a stranger's voice and a phoneme sequence, produce 6,000 integers that a frozen decoder will turn into that stranger saying those words. Chapter 3 writes it as a probability.

Why does EnCodec use eight codebooks of 1,024 entries rather than one codebook of equivalent capacity?

Chapter 3: The Formulation — Conditional Codec Language Modelling

We now have an alphabet. This chapter writes down what we want the model to do with it, defines every symbol the rest of the paper uses, and — the part most summaries skip — asks why the eight codebooks get factorized the way they do rather than one of the three other obvious ways.

One promise about this chapter: everything in it is bookkeeping, and bookkeeping done carefully now makes Chapters 4 through 7 read as consequences rather than as new material. If a symbol here feels arbitrary, it is because its purpose arrives two chapters later — the drill at the end of this chapter is the place to confirm it stuck.

The objects

A dataset D = {xi, yi} of paired examples. For each pair:

SymbolWhat it isConcrete shape
yan audio sample — the waveformfloat array at 24 kHz
x = {x0, x1, …, xL}its phoneme transcriptionint[L+1], indices into a small phoneme inventory
C = Encodec(y)the acoustic code matrixint[T × 8], values 0…1023
ct,:the row vector: eight codes for frame tint[8] — one 13.33 ms slice, all depths
c:,jthe column vector: the code sequence from the j-th codebookint[T] — one depth, all time
the acoustic prompt matrix, from the enrolled recordingint[T′ × 8], T′ = 225 for 3 s
Decodec(C) ≈ ŷthe frozen decoder turning codes back into audiofloat array at 24 kHz
The notation trap that costs everyone ten minutes. The subscript before the comma is time; the subscript after the comma is codebook depth. So c:,1 is not "the first frame" — it is the entire first-codebook layer stretched across the whole utterance, a sequence of length T. And ct,: is not "the first codebook" — it is one instant, eight codes deep. The AR model of Chapter 4 predicts a column. The NAR model of Chapter 5 predicts seven more columns. Nothing in VALL-E ever predicts a row.

The objective, in one line

The paper's statement: "we regard zero-shot TTS as a conditional codec language modeling task. We train a neural language model to generate an acoustic code matrix C conditioned on a phoneme sequence x and an acoustic prompt matrix C̃T′×8 with the optimization objective of max p(C | x, C̃)."

maximize   p( C | x, C̃ )

Three symbols, and each carries a distinct job:

x — the phoneme sequence
WHAT is said. The content channel. Chapter 6's ablation removes it and word error rate explodes from 3.0 to 19.6.
↓ both condition the same model
C̃ — the acoustic prompt
WHO says it, and WHERE. Voice, prosody, room, emotion. Chapter 6's ablation removes it and speaker similarity collapses from 0.585 to 0.236.
C — the generated code matrix
T × 8 integers. Handed to the frozen decoder. That is the whole output of the system.

The paper's hope, stated plainly: "We expect the neural language model learns to extract the content and speaker information from the phoneme sequence and the acoustic prompt, respectively." Note the word expect — nothing in the architecture enforces the split. There is no disentanglement loss, no adversarial speaker classifier, no bottleneck. The division of labour is supposed to emerge because it is the easiest way to fit the data. Chapter 6 shows the ablation that checks whether it did.

One habit that pays off in the next three chapters: whenever an equation appears, immediately ask which of the two models it belongs to and which axis its product runs over. Every equation in this paper is identified by those two facts, and confusing them is the only real difficulty in the method section.

Unpacking the probability — what is actually being summed

"Maximize p(C | x, C̃)" is compact to the point of hiding the work. Expand it. C has T × 8 entries, each a categorical variable over 1,024 classes. The log-likelihood of one utterance is a sum of that many cross-entropy terms:

log p(C | x, C̃) = Σt=1T Σj=18 log p(ct,j | whatever we condition on)

For a 10-second utterance that is 750 × 8 = 6,000 categorical predictions, each over 1,024 options — 60,000 bits of decision if the model were maximally uncertain. Compare against the input: the same sentence is perhaps 150 characters of text, roughly 120 phonemes. The model is expanding roughly 120 discrete symbols into 6,000, an expansion factor of 50×, and everything in that gap — duration, pitch, timbre, breath, room — is what it must invent or copy from the prompt.

The phrase "whatever we condition on" is doing all the remaining work, and choosing it is the architecture. That is the next section.

A last word on the objective's modesty. It contains no term for naturalness, no perceptual loss, no adversarial discriminator, and no speaker-similarity objective. It is next-token likelihood, and every capability in this lesson is downstream of it. When you find yourself reaching for an auxiliary loss to encourage a behaviour, it is worth asking first whether a representation change would make the behaviour the likelihood's own idea.

What is frozen and what is trained

Composed systems get confusing fast unless you keep a ledger of which parts learn. For VALL-E it is short, and the shortness is the point.

ComponentStatusWhy
EnCodec encoderfrozenOff the shelf. It defines the vocabulary; changing it would change what the tokens mean.
EnCodec decoderfrozenAlso off the shelf. It is the vocoder, and it already works.
DNN-HMM alignerfrozen (trained separately on 960 h)Used once, offline, to produce pseudo-labels. Not part of the model.
AR model θARtrained800k steps, its own run
NAR model θNARtrained800k steps, a separate run

Three frozen components, two trained ones, and no joint fine-tuning anywhere. That has a consequence worth carrying into Chapter 9: gradients never flow from a perceptual objective back into the tokenizer, so the model is optimizing token likelihood, not audio quality. Those coincide only to the extent that EnCodec's tokens are perceptually well-organized — which is another way of stating the ceiling argument from Chapter 2.

The design space: four ways to factorize 6,000 tokens

You have a T × 8 grid to fill and an autoregressive machine that fills things one step at a time. There are four defensible choices, and the paper picks the fourth. Understanding why requires seeing the first three fail.

#SchemeSequential steps (T = 750)Why it is temptingWhy it loses
1Flatten everything. Read the grid row by row into one long sequence of 8T tokens and run a plain decoder-only LM over it.6,000Maximum simplicity: it is literally GPT on a longer sequence. Exact joint distribution, no independence assumptions.Eight times the sequential decoding, and eight times the context length for the same audio — attention cost goes up 64×. Generation of ten seconds needs six thousand serial forward passes.
2Eight heads, one step. At each time step, predict all eight codes at once from eight output heads.750Cheapest possible. One pass per frame.It assumes the eight codes of a frame are conditionally independent given the past — which is exactly false. Codebook 2 encodes the residual of codebook 1's choice; it is meaningless without knowing that choice. Sampling them independently produces incoherent stacks.
3Fully non-autoregressive. Predict the entire grid in parallel from x and C̃.1Fastest conceivable. The paper itself lists it as future work.You must know T before you start — so you need a duration predictor. The paper's objection: "it is hard to train a length predictor for different speakers since their speaking speed may be very diverse."
4Hierarchical AR + NAR (VALL-E). Autoregress codebook 1; then non-autoregressively fill codebooks 2–8, each conditioned on all shallower ones.757Respects the RVQ hierarchy: expensive modelling where it matters (Chapter 2's 84%), cheap modelling where it does not.Seven forward passes instead of one; and the NAR stages still assume within-codebook conditional independence across time (which is far more defensible — see below).

Scheme 2 is the instructive failure, so make its incoherence concrete. Return to Chapter 2's hand example. The frame's codes were [3, 1]: entry 3 of codebook 1, then entry 1 of codebook 2. But entry 1 of codebook 2 was chosen because the residual after e3 was [0.30, 0.20, 0.20]. Had the first stage picked e1 instead, the residual would have been [−0.10, −0.40, 0.20], and the best second-stage entry would have been a completely different one. The pair "3 then 1" is coherent; the pair "1 then 1" is nonsense — it reconstructs to [1.25, 0.25, 0.10] against a target of [0.90, −0.40, 0.20], worse than using no second codebook at all. Independent sampling produces exactly these mismatched pairs.

The asymmetry the whole design rests on. Conditioning across depth is mandatory — codebook j is defined relative to codebooks < j, so you cannot skip it. Conditioning across time within one codebook is optional — given the full first-codebook layer (which already fixes the phonetic and prosodic content of every frame) and the acoustic prompt, the residual detail at frame t is largely determined locally. VALL-E keeps the mandatory conditioning and drops the optional one. That single trade is what makes seven codebooks cost seven steps instead of 5,250.

The factorization below is the paper's Equation 3, and it is the sentence the next two chapters implement. Read it slowly; every symbol has already been defined above.

If you can reconstruct it from the four-scheme table alone, you have understood the design rather than memorized it.

The factorization, written out

Scheme 4 in symbols — this is the paper's Equation 3, and it is the whole model:

p(C | x, C̃; θ) = p(c:,1 | C̃:,1, x; θAR) · ∏j=28 p(c:,j | c:,<j, x, C̃; θNAR)

Read it left to right as a generation procedure, and notice four things the equation quietly tells you:

  1. There are two separate parameter sets, θAR and θNAR. Two models, trained separately, not one model in two modes.
  2. The AR term conditions on :,1 only — the first codebook layer of the prompt, 225 integers. It never sees the prompt's other seven layers.
  3. Every NAR term conditions on all of C̃ — all eight layers, 1,800 integers. The NAR model gets a richer view of the speaker than the AR model does. Chapter 5 explains why that asymmetry is necessary rather than sloppy.
  4. The product over j is ordered. Codebook 3 waits for codebook 2's actual sampled values. Seven sequential calls, not seven parallel ones. The paper: "the NAR decoder will be called seven times to generate codes in seven quantizers."

Where the phonemes come from — and why they are "pseudo"

x is described as "its corresponding phoneme transcription," which sounds like it was written by a linguist. It was not. LibriLight is 60,000 hours of unlabelled audiobook audio — the paper says so directly: "The original data is audio-only, so we employ a speech recognition model to generate the transcriptions."

The pipeline, exactly as specified in the experimental setup:

1 · Train a hybrid DNN-HMM ASR model
On 960 hours of labelled LibriSpeech, following the Kaldi recipe. This is deliberately old technology — a hybrid system, not an end-to-end one — because we need alignments, not just transcripts.
2 · Decode the 60K unlabelled hours
"Unlabeled speech data is decoded and transduced to the best phoneme-level alignment paths where the frameshift is 30 ms." Every 30 ms window gets a phoneme label.
3 · Collapse repeats
"We remove the consecutive repetitions in the force-aligned phoneme sequence." AA AA AA B B → AA B. What remains is a phoneme sequence, not a per-frame label track.
4 · At inference: G2P
Ordinary grapheme-to-phoneme conversion of the target text. The model sees the same kind of symbol sequence it trained on.

Do the arithmetic on step 3, because it reveals what the model has to learn. Ten seconds at a 30 ms frameshift is 10 / 0.03 = 333 alignment frames. English speech runs roughly 10–13 phonemes per second, so after collapsing repeats you are left with on the order of 100–130 phoneme symbols. (That rate is a standard estimate, not a figure the paper states.) Against 750 acoustic frames, that means:

750 acoustic frames / ≈120 phonemes ≈ 6 acoustic frames per phoneme, on average

Six frames per phoneme on average — but a stressed diphthong might take eighteen and a flap might take two. Nothing tells the model which. There is no duration predictor, no attention-monotonicity constraint, no alignment supervision at all at generation time. The autoregressive model decides, implicitly, how many acoustic frames each phoneme deserves, by deciding when to stop producing frames that sound like it.

This is where the robustness limitation is born. Because duration is implicit, nothing prevents the model from lingering on a phoneme (duplication) or skipping past one (deletion). The paper's Limitations section names the mechanism: "the phoneme-to-acoustic language part is an autoregressive model, in which disordered attention alignments exist and no constraints to solving the issue." You are reading the cause here, in Chapter 3; Chapter 10 shows the effect. Every architectural freedom is a guarantee you gave up.

One more consequence of pseudo-labelling worth naming, because it is a genuine strength rather than a cost. The transcriptions are wrong sometimes — the paper concedes its data "contain more noisy speech and inaccurate transcriptions" than LibriTTS. Under a regression objective, systematically wrong targets are poison. Under a language-model objective at this scale, they are noise that averages out: for any given phoneme context, the majority of the 60,000 hours agrees, and the errors are uncorrelated. Scale is what converts a label-quality problem into a signal-to-noise problem.

Read the objective as a job posting. "Maximize p(C | x, C̃)" is asking for a system that, handed a script and a three-second voice sample, outputs the 6,000 integers that a frozen decoder turns into that voice reading that script. No component of that description mentions speakers, adaptation, embeddings, or cloning. The capability the paper is famous for is not in the objective — it is what the objective turns out to imply.

The generative story, told in words

Before more symbols, say Equation 3 out loud as a procedure. If you can narrate this without looking, you have the model.

1
Take the text. Convert it to phonemes. Put the enrolled clip's phonemes in front of it. That whole thing is x.
2
Tokenize the enrolled clip with EnCodec. That is C̃, a 225 × 8 matrix of integers.
3
Start the acoustic sequence with C̃'s top row only. Autoregressively continue it, one token at a time, until the model says stop. Now you have c:,1 and you know T.
4
Seven times: sum the embeddings of everything filled in so far, add the summed embeddings of all eight prompt rows, tell the network which stage it is on, and read out an entire codebook layer at once.
5
Hand the finished T × 8 matrix to EnCodec's decoder. Audio comes out.

Every subsequent chapter is one of those five boxes, expanded. If a later derivation feels disconnected, come back and locate it here first.

If step 3 of that story felt like a sleight of hand — "start the sequence with someone else's audio and just keep going" — good. That is the trick, and Chapter 4 shows why the model has no way to object to it.

A notation drill

Subscript confusion causes more misreadings of this paper than any conceptual difficulty. Answer these before continuing; the answers are in the right column, so cover it.

Question (10 s utterance, 3 s prompt)Answer
How many integers in C?750 × 8 = 6,000
What shape is c:,1?int[750] — a sequence over time, not a frame
What shape is c300,:?int[8] — one 13.33 ms instant, all depths
How many integers does the AR model see from the prompt?225 — only c̃:,1
How many does the NAR model see from the prompt?1,800 — all of C̃
How many times is the NAR model called?7 — once per codebook 2 through 8
How many tokens does one NAR call produce?750 — an entire layer
Which model decides T?The AR model, by sampling ⟨EOS⟩
How many parameter sets are there?Two: θAR and θNAR, trained separately

If any of those was uncomfortable, the interactive matrix below is the fastest fix — switch between the highlight modes until each row of that table is obvious by inspection.

The objective is a compression bound — and that is useful

Cross-entropy has units. A negative log-likelihood in bits is exactly the number of bits an optimal arithmetic coder would need to transmit the data given the model. That gives a way to read the training loss that is more informative than "it went down."

The uninformed baseline first. If the model knew nothing, every token would be uniform over 1,024 options:

log2(1024) = 10 bits per token
× 6,000 tokens for a 10-second utterance = 60,000 bits = 7.5 kilobytes
which is exactly the EnCodec bitstream: 6 kbps × 10 s = 60,000 bits. Consistent, as it must be.

Now suppose the trained model reaches an average of 4 bits per token — a plausible figure for a well-fit codec LM, though the paper reports no perplexity. Then the same utterance costs 24,000 bits, and the model has effectively compressed the EnCodec stream by 2.5×. Two readings follow, both worth carrying:

Joint, conditional, and what is being modelled

One clarification that prevents a common confusion later. p(C | x, C̃) is a conditional distribution. Nothing here models p(x) — the model has no opinion about which sentences are likely, and could not generate text if you asked it to. The phoneme sequence is always given.

That has a practical consequence worth stating: VALL-E cannot detect that a phoneme sequence is implausible. Feed it a string of phonemes that no English word produces and it will dutifully synthesize them, because "is this sayable?" is not a question the objective ever asks. Compare a text LM, which would assign low probability to nonsense and could refuse to continue it.

It also clarifies what the ⟨EOS⟩ token is doing. It does not mean "the sentence is over" in any semantic sense — the model has no access to sentence semantics. It means "the acoustic realization of the phoneme sequence I was given appears to be complete." Those coincide when alignment is healthy and come apart exactly when it is not, which is the failure mode of Chapter 10.

The phoneme side, in more detail

x gets less attention than C in most readings of this paper, which is a mistake — Chapter 6's ablation shows it is worth 16.6 WER points. Three practical facts about it.

The inventory is small. A Kaldi-style English phone set is a few dozen base phones, typically expanded with stress markers and context to a few hundred symbols. Against a 1,024-entry acoustic vocabulary, the phoneme embedding table is a rounding error in the parameter count — and yet it carries all the content.

Training and inference use different producers. At training, x comes from forced alignment of the audio (the aligner heard the speech). At inference, x comes from grapheme-to-phoneme conversion of text (nothing was heard). These two processes can disagree systematically — an aligner labels what was actually said, including reductions and elisions, while G2P produces the canonical pronunciation. The model trains on the former and is asked to perform on the latter.

Repetition removal changes what the sequence means. Before dedup, the aligner's output is a per-frame label track where duration is explicit — a long vowel is simply many repeated frames. After dedup, duration information is gone; the sequence carries identity and order only.

aligned:   AA AA AA AA F F T T T ER ER  (duration is in the repetitions)
dedup:      AA F T ER   (duration is gone)

This is a deliberate and consequential choice. Keeping the repetitions would have handed the model a duration signal for free — and would have made x nearly as long as C, roughly tripling sequence length while forcing the model to copy durations rather than infer them from the speaker's style. Removing them buys short sequences and prosodic freedom, and it is the third place in this lesson where the same trade appears: expressiveness bought with a guarantee. Chapter 10 is where the bill arrives.

How much training signal is in one utterance?

Compare the supervision density against the era's TTS practice, because this is a quiet reason the scale bet works.

SystemPer 10-second utteranceLoss terms
Mel-regression TTS80 mel bins × ≈800 frames64,000 real-valued regression targets — but heavily redundant and smooth
VALL-E AR model750 first-codebook tokens750 categorical predictions over 1,024 classes
VALL-E NAR model750 tokens for one randomly chosen stage per step750 categorical predictions, stage sampled from [2, 8]

Note the NAR training detail hiding in that last row: only one stage is trained per example. The model does not compute all seven residual layers during a training step — it samples i uniformly and predicts only codebook i. So over 800,000 steps each stage receives roughly 114,000 steps of gradient, and the sharing of the trunk across stages is what makes that sufficient. This is exactly the trade AdaLN buys, quantified: seven separate models would each see one-seventh of the data; one AdaLN-conditioned model sees all of it and specializes through the modulation parameters.

What this objective cannot express

Be precise about the shape of the probability model, because three natural requests are outside it.

RequestExpressible?Why
"Say this in this voice"yesexactly p(C | x, C̃)
"Say this at 1.2× speed"noThere is no rate variable. Speed is inherited from the prompt or sampled; nothing conditions on it. You would need a prompt at the desired rate.
"Say this angrily" (by instruction)noEmotion enters only through C̃. It transfers (Chapter 9), but it is not addressable — there is no emotion token in x.
"Edit the third word of this existing recording"partiallyFigure 1 lists speech editing as an application, and prefix/suffix conditioning makes infilling natural — but the equations as written generate a whole C left to right, not an infill.

Every "no" in that table is a missing conditioning variable, not a missing capability of the architecture. Adding a control means adding a channel to the conditioning set and finding data that varies along it — which is precisely what the instruction-tuned speech models of Chapter 10 did.

Explore the matrix

Anatomy of C — rows, columns, prompts, and who predicts what

The grid is one utterance: time runs right, codebook depth runs down. Switch the highlight to see what each piece of notation actually selects, and which of the two models is responsible for producing it. The shaded left region is the acoustic prompt C̃ — given, never predicted.

A row ct,: is one 13.33 ms instant, eight codebooks deep. VALL-E never predicts a row — it predicts columns.

A training batch, with shapes

python — what one training example looks like (pseudo-code, shapes are real)
# --- offline, once over the corpus ---
wav      = load_24khz(utt)                 # crop to a random 10-20 s window
C        = encodec.encode(wav)             # int64 [T, 8],  T = 75 * seconds
phn      = asr_align(wav)                  # 30 ms frames -> phoneme ids
x        = drop_consecutive_repeats(phn)   # int64 [L]

# --- AR example: no prompt is extracted at all ---
ar_input  = cat([emb_phn(x), EOS, emb_a1(C[:, 0]), EOS])   # [L+1+T+1, 1024]
ar_target = C[:, 0]                                       # [T]  — shifted by one
# every prefix of C[:,0] is implicitly a prompt for its own suffix

# --- NAR example: a prompt IS extracted, and a stage is sampled ---
i        = np.random.randint(2, 9)                     # which codebook to predict
prompt   = random_3s_segment(C)                          # int64 [225, 8]
e_prompt = sum(emb_a[j](prompt[:, j]) for j in range(8))    # [225, 1024]
e_curr   = sum(emb_a[j](C[:, j])      for j in range(i-1))  # [T, 1024]
nar_in   = cat([emb_phn(x), e_prompt, e_curr])           # [L+225+T, 1024]
nar_tgt  = C[:, i-1]                                       # [T]  — all positions at once

Two details in that sketch are easy to skim past and are the subject of the next two chapters. The AR example has no explicit prompt — the paper: "In the AR model, we do not explicitly extract an audio clip as the prompt in training. The training process is pure causal language model training." The NAR example samples a stage index i uniformly and a random 3-second segment from the same utterance as its prompt. Different training regimes, deliberately.

Why can VALL-E not simply predict all eight codes of a frame in parallel from eight output heads at each time step?

Chapter 4: The AR Decoder — One Column, Left to Right

Chapter 2 measured it: the first quantizer carried 84% of the reconstruction. Chapter 3 formalized it: c:,1 gets its own model with its own parameters θAR. This chapter builds that model, traces a tensor through it, and answers the question that decides everything downstream — how does a system with no duration predictor know when to stop?

The equation

p(c:,1 | x, C̃:,1; θAR) = ∏t=0T p(ct,1 | c<t,1, c̃:,1, x; θAR)

This is Equation 1 of the paper and it is, deliberately, the least surprising equation in the field. It is GPT. The product runs over time; each factor conditions on everything to its left plus two fixed conditioning blocks. If you can write a decoder-only transformer, you can write this.

The interesting content is in what the symbols are attached to. Take them one at a time.

TermWhat it isLengthPredicted or given?
xphoneme sequence — at inference, the enrolled transcript then the target text, concatenatedL ≈ 150 for 3 s + 10 sgiven
:,1first-codebook layer of the enrolled 3 s225given (the acoustic prefix)
c<t,1everything the model has already generated0 … T−1predicted, then fed back
ct,1the next first-codebook token1 integer in 0…1023predicted

The four components

The paper: "It comprises a phoneme embedding Wx, an acoustic embedding Wa, a transformer decoder, and a prediction layer."

Wx — phoneme embedding
Lookup table, |phonemes| × 1024. Turns each phoneme id into a 1024-dim vector. Inventory is small — a few dozen to a couple hundred entries depending on the aligner's phone set.
Wa — acoustic embedding
Lookup table, 1024 × 1024 — one row per codebook-1 entry. One table: the AR model only ever touches codebook 1, so it needs only one.
Transformer decoder
12 layers · 16 heads · dmodel = 1024 · dff = 4096 · dropout 0.1. Causal self-attention only — no encoder, no cross-attention.
Prediction layer
1024 → 1024 logits. Weights shared with Wa: "We share the parameters of the output projection layer with the parameters of the acoustic embedding Wa."

Pause on that last box, because weight tying is one of those choices that looks like a parameter-saving hack and is actually a representational commitment. Untied, the model has two independent 1024 × 1024 matrices: one mapping token id → vector on the way in, another mapping vector → token score on the way out. Tied, there is one matrix, used in both directions. The logit for token k becomes the dot product of the hidden state with token k's own embedding.

The consequence: "predict token k" and "make the hidden state point along token k's embedding direction" become the same instruction. Codebook entries that sound alike will have been given similar embeddings (because they occur in similar contexts), so they get similar logits automatically — a smoothness prior you would otherwise have to hope for. And it saves 1024 × 1024 = 1,048,576 parameters, which is the least interesting benefit.

Building the input sequence

The paper: "the model input is the concatenation of x and c:,1, and two special <EOS> tokens are appended after each of them."

Read carefully: two special end-of-sequence tokens, one appended after the phoneme block and one after the acoustic block. They are distinct special tokens — the phoneme-EOS says "the text is finished, start speaking"; the acoustic-EOS says "the utterance is finished, stop." Laid out:

[ x0 x1 … xL ]   ⟨EOSphn⟩   [ c0,1 c1,1 … cT,1 ]   ⟨EOSac
↓Wx                              ↓Wa
one continuous sequence of 1024-dim vectors into one causal transformer

And a detail that is easy to skim and matters: "We compute sinuous position embedding separately for prompt and input tokens." Sinusoidal positions are computed independently for the phoneme block and the acoustic block. The acoustic block's position counter restarts at zero rather than continuing from L+1.

Why? Because L varies wildly — a short sentence and a long one produce very different phoneme counts — and you do not want the acoustic tokens' positional signal to be shifted by an amount that depends on how much text preceded them. Restarting makes "acoustic frame 40" mean the same thing regardless of whether the text was five words or fifty. Positional information within each modality is preserved; spurious coupling across modalities is removed.

Note what is NOT here. No encoder. No cross-attention. No attention-alignment loss, no monotonic-attention mechanism, no duration model, no length regulator. Every one of those was standard equipment in 2022 TTS, and every one of them is absent. The phoneme sequence is not "encoded and attended to" — it is simply the first part of the same flat sequence, and ordinary causal self-attention reaches back to it like it reaches back to anything else. Text conditioning is implemented as prefix.

Where the phoneme block sits

One consequence of putting text at the front of a causally-masked sequence: the phoneme block cannot see the audio. Phoneme x50 attends to x≤50 and nothing else, ever. Only the acoustic positions get a two-way view of the pair.

That is strictly less than an encoder-decoder would give — a bidirectional text encoder lets every phoneme see the whole sentence. The paper accepts the loss, and it is probably small: what matters is that each acoustic token can see all of the text, which it can, since the text is entirely to its left.

Positions, concretely

"Sinusoidal position embeddings computed separately for prompt and input tokens" deserves a picture, because the alternative is the natural thing to do and it is subtly wrong.

TokenAbsolute index in the sequencePosition value the model receives
x0 (first phoneme)00
x155 (last phoneme)155155
⟨EOSphn156156
0,1 (first prompt frame)1570 — the counter restarts
224,1 (last prompt frame)381224
c0,1 (first generated frame)382225 — continuous with the prompt

Two properties fall out. Acoustic position 40 means "40 frames into the audio" no matter how long the text was — the model is never asked to learn that the same acoustic moment appears at wildly different absolute indices depending on sentence length. And the prompt and the generated audio share one continuous acoustic counter, which is what makes them a single sequence rather than two: the model has no positional cue that would let it distinguish the seam.

The mask, and what each token may see

"For the causal transformer model, each token ct,1 can attend to (x, c≤t,1)." That is the left panel of the paper's Figure 3. Three regions of the attention matrix, with different behaviour:

Query positionMay attend toEffect
a phoneme xix≤ithe text block is causally masked within itself too — it is one flat sequence, not an encoder
an acoustic token ct,1all of x, plus c≤t,1full access to the text, causal access to the audio so far
the prompt tokens c̃:,1 (inference only)all of x, plus themselves causallythey are indistinguishable from generated tokens — that is the whole point

Trace it yourself in the simulation below, then come back for the training story, which is where the design gets genuinely clever.

The AR mask — and a generation rollout

Left: the attention mask over a toy sequence (phonemes, then the acoustic prefix, then generated tokens). Filled = allowed, empty = blocked. Click any query row to highlight exactly what that position sees. Right: press step to roll generation forward one token at a time — note that the prompt tokens are already there, and the model cannot tell them apart from its own output.

Click a row on the left to inspect its receptive field.

Training: the prompt that is never extracted

Here is the passage that most repays a slow read: "In the AR model, we do not explicitly extract an audio clip as the prompt in training. The training process is pure casual language model training. In this way, any prefix sequence c<t,1 is treated as a prompt for the latter part of the sequence c≥t,1."

There is no prompt-construction code in AR training. No sampling of a 3-second window, no special separator, no marking of what is prompt and what is target. The model is trained on complete 10–20 second utterances with a plain next-token loss, and that is all.

The in-context learning falls out of the arithmetic. A 750-token sequence contains 750 prefix/suffix splits, and the causal loss trains all of them simultaneously: predicting token 200 given tokens 1–199 is exactly the task "continue this voice, you have 199 frames of it." Predicting token 700 given 1–699 is the same task with a longer prompt. Every training example is, silently, hundreds of voice-continuation examples at every prompt length from one frame to T−1.

The deepest idea in the paper, and it is three lines of nothing. Zero-shot voice cloning was not trained for. It was not designed for. It is a re-description of the ordinary language-modelling objective applied to a representation that happens to carry voice. Once you tokenize speech with a codec that preserves the speaker, "predict the next token" and "continue in this speaker's voice" are the same sentence. The capability could not have been prevented without adding machinery to destroy it. Compare this to speaker encoders, which needed a separate model, a separate objective, and a separate dataset to achieve less.

Inference then just uses the machinery honestly. The paper: "During inference, given an enrolled recording, we should concatenate the phoneme sequence of the enrolled recording and the phoneme sequence for synthesis together. Meanwhile, the acoustic token sequence of the enrolled recording is used as the prefix in AR decoding."

So at inference the sequence is:

[ phonemes of the enrolled clip  |  phonemes of the target text ] ⟨EOS⟩ [ c̃:,1 — 225 given tokens ] → generate …

Both phoneme blocks are concatenated into one x. Both correspond to speech: the first part to audio the model is given, the second to audio it must produce. The model has spent 800,000 training steps learning that phonemes and acoustic tokens line up in order, so it continues the pattern.

How it knows when to stop — the implicit duration model

Everything in Chapter 3 said there is no duration predictor. So what ends the utterance?

⟨EOSac⟩. It is one more entry in the output distribution, and every training example ended with it. At each step the model assigns some probability to stopping, and when that token is sampled, generation halts. T is not a parameter of the system; it is a random variable the model draws.

This is a genuinely elegant answer to the problem the paper raises against fully-NAR designs: "the rate of the generated speech should be consistent with the enrolled recording, and it is hard to train a length predictor for different speakers since their speaking speed may be very diverse. In this case, the AR model is a more natural choice with its flexibility for acoustic sequence length prediction."

And notice it solves a harder problem than a length predictor would. A duration predictor outputs a number up front. The AR model makes the decision continuously, in context: having seen 225 frames of a fast talker, it is already in a fast-talking regime, so it emits fewer frames per phoneme and reaches ⟨EOS⟩ sooner. Speaking rate is inherited from the prompt through exactly the same mechanism as timbre. One machine, two behaviours, zero extra code.

And it is also where robustness dies. If the model can decide to spend more frames on a phoneme, it can decide to spend frames on a phoneme it already finished (duplication), or move on from one it never started (deletion). Nothing in the architecture forbids either. Chapter 10 shows the failures; the mechanism is right here, in the freedom that produced the natural prosody. You cannot keep one without the other in this design.

Decoding: sampling, and the infinite loop

"For the AR model, we use sampling-based decoding conditioned on the prompts since we observe that beam search may lead the LM into an infinity loop. Furthermore, the sampling-based method could significantly increase the diversity of the output."

Two claims, and the first is a bug report. Beam search maximizes sequence likelihood. In an acoustic token stream, the highest-likelihood continuation of a stretch of near-silence is more near-silence; of a sustained vowel, more sustained vowel. There is always a locally-more-probable way to keep going than to emit ⟨EOS⟩, so the search never terminates. This is the same degeneracy that makes beam search produce repetitive text, but worse, because acoustic token sequences are far more locally predictable than words.

Sampling breaks the loop by construction: even a 3% probability of leaving the vowel becomes near-certain over enough steps. The paper's second sentence then reframes the necessity as a feature — the same stochasticity produces the diversity documented in Figure 4, which Chapter 9 examines.

KV caching, precisely

The naive reading of "run the model again with the new token appended" is that each step costs a full forward pass over the whole sequence — which would make the AR phase quadratic in T and put ten seconds of audio out of reach. It does not, and the reason is worth stating because it is what makes the 750-step loop affordable.

In a causal transformer, position t's keys and values never change when position t+1 arrives — causality guarantees that nothing later can influence anything earlier. So they are computed once and cached. Each new step computes a query for the single new position and attends against the cache.

Without cacheWith cache
Work at step tfull pass over t positionsone position's worth, plus attention against t cached keys
Total for T stepsO(T2) position-passesO(T) position-passes
Memorynone extra2 × layers × positions × d — 53 MiB here

This is standard text-LM infrastructure, and inheriting it for free is one of the unglamorous benefits of Chapter 4's decoder-only choice. An encoder-decoder TTS model with cross-attention needs its own equivalent machinery; a decoder-only codec LM runs on whatever the text-LM ecosystem already built.

One practical note for anyone implementing it: the acoustic prefix is 225 tokens that will never change, so the cache for them can be computed in a single batched pass before the loop starts. Only the generated tokens need step-by-step treatment. The 225 given tokens cost one pass, not 225.

Data flow with real numbers

One inference, end to end. Enrolled clip 3 s; target sentence ten seconds long.

StageTensorShapeNote
enrolled phonemesxpromptint[36]≈12 phonemes/s × 3 s
target phonemesxtargetint[120]from G2P on the input text
concatenated + EOSxint[157]36 + 120 + 1
phoneme embeddingsWx[x]float[157, 1024]plus its own sinusoidal positions
enrolled audio → codesint[225, 8]the AR model uses column 1 only: int[225]
acoustic prefix embeddingsWa[c̃:,1]float[225, 1024]positions restart at 0 here
step-t transformer inputhfloat[157 + 225 + t, 1024]grows by one vector per step
step-t logitsWaThlastfloat[1024 + 1]1024 codes + ⟨EOS⟩; softmax, sample
final outputc:,1int[750]after 750 sampled steps — T decided by the model

At the last step the sequence holds 157 + 225 + 750 = 1,132 positions. Two costs follow. The attention matrix at that point is 1,1322 ≈ 1.28 million entries per head per layer — trivial. The KV cache is the real memory:

12 layers × 2 (K and V) × 1,132 positions × 1,024 dims × 2 bytes (fp16)
= 12 × 2 × 1,132 × 1,024 × 2 = 55,640,064 bytes ≈ 53 MiB

Fifty-three megabytes per concurrent stream. Compare that to the 240,000-step raw-waveform world of Chapter 1, where the same cache would have been 240,000/1,132 ≈ 212 times larger — about 11 GB, for one sentence, on one stream.

The tied projection, worked with numbers

Weight tying is abstract until you compute a logit with it. Toy dimensions — a 3-dimensional hidden state and a 4-entry codebook — but the operation is identical at 1024 and 1024.

The transformer's last position produces a hidden state, and the acoustic embedding table is:

h = [ 0.60, −0.20, 0.50 ]

Wa:   row 1 = [ 0.50, 0.10, 0.40 ]  ·  row 2 = [ −0.30, 0.60, 0.10 ]
        row 3 = [ 0.20, −0.50, 0.70 ]  ·  row 4 = [ 0.70, 0.00, −0.20 ]

Because the output layer is Wa, the logit for token k is just h · (row k). Four dot products, every term shown:

z1 = (0.60)(0.50) + (−0.20)(0.10) + (0.50)(0.40) = 0.30 − 0.02 + 0.20 = 0.48
z2 = (0.60)(−0.30) + (−0.20)(0.60) + (0.50)(0.10) = −0.18 − 0.12 + 0.05 = −0.25
z3 = (0.60)(0.20) + (−0.20)(−0.50) + (0.50)(0.70) = 0.12 + 0.10 + 0.35 = 0.57
z4 = (0.60)(0.70) + (−0.20)(0.00) + (0.50)(−0.20) = 0.42 + 0.00 − 0.10 = 0.32

Softmax at temperature 1:

e0.48 = 1.6161  ·  e−0.25 = 0.7788  ·  e0.57 = 1.7683  ·  e0.32 = 1.3771
sum = 5.5403
p = [ 0.2917, 0.1406, 0.3192, 0.2486 ]

Two things to take from this. First, the tied form means "the model wants to say token 3" and "the hidden state points along token 3's embedding" are literally the same statement — the logit is a similarity score in embedding space, so tokens whose embeddings are close get close logits, which is the smoothness prior described above.

Second, look at the distribution: the winner has only 31.9% probability and three tokens sit between 24% and 32%. If you always took the argmax you would get one fixed rendition. Sampling from this shape is where the diversity of Chapter 9's Figure 4 comes from — and it is also, honestly, where a wrong token can enter and start the drift of Chapter 10.

What the AR model is actually learning

"Predict the next codebook-1 token" sounds like one task. Decompose it and it is at least five, all learned from the same loss, none of them supervised separately.

Sub-taskWhat it requiresWhere it shows up
Text–audio alignmentKnowing which phoneme in x the current frame corresponds to, with no alignment supervision at inferenceFailure → dropped and duplicated words (Chapter 10)
DurationHow many frames this phoneme gets, given the speaker's rate and the prosodic contextChapter 9's diversity figure: two takes with different phrase durations
Prosody continuationContinuing the pitch contour and stress pattern established by the promptThe 0.585 → 0.236 collapse when the prefix is removed (Chapter 6)
Speaker continuationKeeping timbre and voice quality stable over 750 framesSpeaker similarity; degrades over long utterances
StoppingCalibrating p(⟨EOS⟩) so the utterance ends when the text is exhaustedThe reason beam search loops forever

They are not independent. Bad alignment produces bad duration; bad duration destabilizes prosody; unstable prosody makes stopping miscalibrated. That coupling is why the AR model's failures tend to be catastrophic-at-the-utterance-level rather than uniformly distributed — once the model loses its place, everything downstream is conditioned on the mistake.

A one-line summary of the AR model

If you had to compress this chapter into a sentence for someone who knows transformers: it is a 150 M-parameter GPT whose vocabulary is EnCodec's first codebook, whose prompt is a phoneme sequence followed by 225 acoustic tokens of a stranger's voice, and whose stop token is the only duration model in the system.

Every clause in that sentence is load-bearing, and each one is a chapter reference: the vocabulary is Chapter 2, the phoneme prompt is Chapter 3, the acoustic prefix is Chapter 6, and the stop token is the paragraph above.

Exposure bias, named

The classic autoregressive pathology applies here in full, and the paper does not name it, so name it. During training the model always sees ground-truth previous tokens (teacher forcing). During inference it sees its own samples. The moment it emits a slightly-off token, it is conditioning on a prefix from a distribution it never trained on, and errors compound.

Two features of this setting make it worse than in text. Sequences are longer — 750 steps for one sentence, against maybe 30 word tokens. And there is no discrete anchor to recover to: in text, a wrong word still leaves you inside a grammatical sentence that the model has seen many of. In acoustic tokens there is no grammar to snap back to, only a continuous trajectory that can drift arbitrarily far.

Connect the dots forward. Exposure bias × 750 steps × sampling temperature = the "unclear, missed, or duplicated" words of the Limitations section. Every one of those failures is a compounding-error story, and every architectural fix the paper proposes for the future (non-autoregressive models, modified attention) is an attempt to shorten or constrain the chain. Chapter 10's simulation lets you watch the chain break.

Why decoder-only rather than encoder-decoder?

TTS had used encoder-decoder architectures for years — encode the phonemes, cross-attend from the decoder. VALL-E does not. The comparison is worth making explicit because the choice is not obviously right.

Encoder-decoder (Tacotron, FastSpeech)Decoder-only (VALL-E)
Text handlingBidirectional encoder; decoder cross-attendsText is a causally-masked prefix of the same sequence
AlignmentExplicit cross-attention map, often constrained to be monotonicImplicit, unconstrained, inside self-attention
PromptingAwkward — audio conditioning must enter through a separate channelNatural — the prompt is just earlier tokens
Inherited toolingSpeech-specificEverything from text LMs: KV caching, sampling, scaling recipes, infilling
CostText encoded onceText re-attended at every step (mitigated by KV caching)

The decisive column is prompting. In an encoder-decoder design there is no position where "here is three seconds of the target voice" is a natural input — you would bolt on a speaker encoder, which is exactly the design Chapter 0 is trying to escape. Flattening everything into one sequence makes audio conditioning free, and pays for it by giving up the monotonic-alignment guarantee. That is the same trade, seen from a third angle.

Counting the parameters

The paper gives the hyperparameters but not a parameter count, so derive it. Per transformer layer, with d = 1024 and dff = 4096:

attention: WQ, WK, WV, WO = 4 × (1024 × 1024) = 4,194,304
feed-forward: (1024 × 4096) + (4096 × 1024) = 4,194,304 + 4,194,304 = 8,388,608
per layer = 4,194,304 + 8,388,608 = 12,582,912

12 layers × 12,582,912 = 150,994,944 ≈ 151 M
+ acoustic embedding (tied with the output layer): 1024 × 1024 = 1,048,576
+ phoneme embedding: small (a few hundred × 1024)
AR model ≈ 152 M parameters

(Layer-norm and bias terms add a few hundred thousand more; heads split dmodel, so 16 heads × 64 dims = 1024 and the attention count is unaffected by head count.) A hundred and fifty million parameters — in January 2023, when GPT-3 was 175 billion, this is a small model. The paper's bet was never on model scale. It was on data scale, and Chapter 8 is about that.

During AR training, no 3-second prompt is ever extracted. Why does the model still learn to use one at inference?
Why does VALL-E's AR model use sampling instead of beam search?

Chapter 5: The NAR Decoder — Seven Layers in Seven Steps

The AR model produced c:,1: 750 integers, generated one at a time, carrying 84% of the reconstruction. Seven codebook layers remain. If we handed them to the same machinery, the bill would be:

7 codebooks × 750 frames = 5,250 additional sequential steps

Seven times the cost of the part that mattered, spent on the part that does not. This chapter is the refusal to pay it — and it is a more interesting refusal than "just do it in parallel," because doing it in parallel naively is exactly the incoherent scheme Chapter 3 ruled out.

The equation

p(C:,2:8 | x, C̃; θNAR) = ∏j=28 p(c:,j | C:,<j, x, C̃; θNAR)

Compare it against Equation 1 from Chapter 4 and notice precisely one thing has moved: the product index. The AR equation's product ran over t — sequential in time. This one runs over j — sequential in depth. Within a given j, every one of the 750 positions is produced in a single forward pass, simultaneously.

The independence assumption being made, stated honestly: given the phoneme sequence, the full acoustic prompt, and every shallower codebook layer, the tokens of layer j at different times are treated as conditionally independent. That is false in the strict sense — adjacent frames' residuals are correlated. It is defensible because the conditioning set is enormous: layer 1 already fixed the phonetic identity, pitch, and energy of every frame, so what remains for layer j at frame t is largely a local refinement determined by frame t's own shallower codes.

What the NAR model is NOT allowed to skip. It drops conditioning across time. It never drops conditioning across depth — layer 5 is generated only after layers 1–4 have real, sampled values, and it sees all of them. That is why there are seven calls and not one. The paper is explicit: "In practice, the NAR decoder will be called seven times to generate codes in seven quantizers."

Eight embedding tables, one trunk

"The NAR model has a similar architecture to the AR model, except that it contains eight separate acoustic embedding layers." Same 12 layers, 16 heads, d = 1024, dff = 4096. Different embedding front end.

Why eight tables? Because token 517 in codebook 3 and token 517 in codebook 6 are unrelated objects. Codebook 3's entries live in the space of residuals-after-two-stages; codebook 6's live in the much smaller space of residuals-after-five-stages. Sharing one table would force the model to represent both with the same vector — a type error. Eight tables cost 8 × 1024 × 1024 ≈ 8.4 M parameters, which is 5% of the model, and buys type safety.

How the shallower layers enter: Equations 4 and 5

The paper writes the input construction as two steps. First, look up each code in its own table (⊙ denotes index selection):

ct,j = Waj ⊙ ct,j

Then — and this is the load-bearing step — add them up:

ct = Σj=1i−1ct,j

One vector per frame, of dimension 1024, regardless of how many codebooks have been filled in so far. When predicting codebook 2 the sum has one term; when predicting codebook 8 it has seven. Same shape either way.

Why summing, not concatenating — and why it is the right operation

The obvious alternative is concatenation: stack the i−1 embeddings into a vector of size 1024(i−1). Two things break immediately.

Mechanically: the input dimension would change with the stage, from 1024 (predicting codebook 2) to 7168 (predicting codebook 8). One shared transformer cannot accept seven different input widths, so you would need seven input projections — or seven models.

Conceptually — and this is the better reason — summation is exactly what the codec's own decoder does. Return to Chapter 2's hand-worked frame: the reconstruction was v̂ = e3 + f1. Not concat(e3, f1). RVQ reconstructs by adding codebook vectors, because each stage encodes an additive residual. Summing the embeddings gives the transformer a representation with the same algebra as the thing it is modelling: "the audio so far, to depth i−1," as a single point in a vector space, exactly as EnCodec would compute it.

A design heuristic worth stealing. When your model consumes a structured object, prefer the aggregation operation that the object's own semantics already use. RVQ codes add, so add them. Set-valued features have no order, so pool them. Sequences have order, so attend over them. Choosing an aggregation that fights the data's algebra means spending capacity teaching the network to undo your choice.

The prompt: all eight layers, and why that asymmetry is necessary

For the enrolled recording, the paper sums over all eight codebooks:

t = Σj=18t,j

Contrast with Chapter 4, where the AR model received only c̃:,1. Why the difference? It is not an oversight; it is forced.

The AR model's job is to produce codebook-1 tokens. Its input and output live in the same space, and a decoder-only LM is a sequence continuer: whatever you put in the prefix must be the same kind of thing as what comes out. Feeding it a full 8-deep summary would put objects in the prefix that it can never emit — a type mismatch that buys nothing, since the AR model's output has no depth to condition.

The NAR model's job is to fill in depth. It is not continuing the prompt; it is referring to it. And it is fully known — all 1,800 integers of a 3-second enrolment were computed by EnCodec before inference began. Throwing seven-eighths of a known conditioning signal away would be free information destroyed. So the NAR model takes all of it, and Chapter 6's ablation shows it converts that extra information into a speaker-similarity jump from 0.541 to 0.732.

The full input is a three-segment concatenation, (ex, e, ec:,<i), with positional embeddings again computed separately for the prompts and the acoustic sequence:

SegmentContentShapeWhere it comes from
exphoneme embeddingsfloat[L, 1024]the text — content conditioning
eprompt, summed over all 8 codebooksfloat[225, 1024]the enrolled voice — speaker conditioning
ec:,<igenerated audio, summed over codebooks 1…i−1float[750, 1024]what has been built so far — depth conditioning
totalone bidirectional sequencefloat[L+975, 1024]≈1,132 positions for our running example

And the mask, unlike Chapter 4's: "Unlike AR, the NAR model allows each token to attend to all the input tokens in the self-attention layer." Fully bidirectional. Frame 12 sees frame 700. There is no causality to preserve because nothing is being generated in time order.

AdaLN: one trunk, seven behaviours

A problem the equations hide. Seven different prediction tasks — "predict codebook 2" through "predict codebook 8" — share one set of transformer weights. But they are genuinely different tasks: codebook 2 sees a large first-stage residual and must make a coarse correction; codebook 8 sees a tiny residual and must make a delicate one. How does one trunk know which job it is doing?

The paper: "The current stage i is injected into the network with Adaptive Layer Normalization operator, i.e. AdaLN(h, i) = ai LayerNorm(h) + bi, where h is the intermediate activations, ai and bi are obtained from a linear projection of the stage embedding."

Unpack it. Ordinary LayerNorm standardizes activations and then applies a learned per-dimension scale γ and shift β — the same γ, β for every input. AdaLN replaces those constants with functions of the stage:

LayerNorm:   h′ = γ · (h − μ)/σ + β    (γ, β fixed after training)
AdaLN:         h′ = ai · LayerNorm(h) + bi    (ai, bi = Linear(stage_embed[i]))

The stage index becomes a small embedding; a linear layer turns it into a scale vector and a shift vector for every normalization site in the network. The trunk's computation is modulated — the same weights, re-tuned per stage. This is FiLM-style conditioning, and it is the same operator that conditions diffusion transformers on the noise timestep, for the same reason: one network, a family of related tasks indexed by a scalar.

Count the cost: a stage embedding of 8 × 1024 plus a projection to 2 × 1024 per normalization site — on the order of a million parameters total, against the alternatives:

Way to tell the trunk which stage it is onExtra parametersProblem
Seven separate NAR models≈ 7 × 160 M = 1.1 BNo sharing — each model sees one-seventh of the training signal
A "stage token" prepended to the sequence≈ 8 × 1024Weak: one token among 1,132 must steer the whole computation through attention alone
AdaLN≈ 1 M— every layer is re-tuned directly, and all seven tasks share all the weights

The weight tying is also stated with an index shift worth decoding: "the weights of the j-th prediction layer are the same as the (j+1)-th acoustic embedding layer." There are eight embedding tables but only seven prediction layers, because codebook 1 is never predicted here. Prediction layer j predicts codebook j+1, and shares weights with embedding table j+1 — that is, tokens are scored against their own table, exactly as in Chapter 4. The off-by-one is bookkeeping, not a subtlety.

The two models, side by side

Everything that differs between them, in one table, because the differences are all consequences of one decision — which axis each model is sequential along.

AR modelNAR model
Predictsc:,1c:,2 … c:,8
Sequential alongtimedepth
Attention maskcausalbidirectional
Embedding tables18
Prompt depth received1 codebook8 codebooks
Stage conditioningnone neededAdaLN on i
Decodingsamplinggreedy
Passes per utteranceT (= 750)7
Decides T?yes, via ⟨EOS⟩no — inherits it

The parameter budget of the NAR model

Chapter 4 counted 152 M for the AR model. Redo it for the NAR model, since the differences are exactly the design choices of this chapter.

ComponentParametersNote
Transformer trunk (12 layers)150,994,944identical shape to the AR model
Eight acoustic embedding tables8 × 1024 × 1024 = 8,388,608one per codebook — the type-safety cost
Seven prediction layers0tied to embedding tables 2–8 — free
Stage embedding + AdaLN projections≈ 1 M8 stages → scale and shift per normalization site
Phoneme embeddingsmalla few hundred entries × 1024
Total≈ 160 Mvs ≈152 M for the AR model

Two lines in that table are the chapter in miniature. The seven prediction layers cost nothing because of tying — predicting codebook j scores against codebook j's own table. And AdaLN costs about a million parameters where seven separate models would have cost 1.1 billion. Both are cases of the same instinct: find the structure already present in the problem and let it carry the weight instead of adding parameters.

One NAR training step, in detail

"In each training step, we randomly sample a training stage i ∈ [2, 8]." Seven tasks, one uniformly sampled per example. Walk through what that means concretely.

python — one NAR training step (shapes are the real ones)
i        = np.random.randint(2, 9)              # uniform over the 7 stages
prompt   = random_3s_segment(C)                # int[225, 8] — SAME utterance

e_x      = emb_phn(x)                          # [L, 1024]
e_prompt = sum(emb_a[j](prompt[:, j]) for j in range(8))     # [225, 1024] — all 8
e_curr   = sum(emb_a[j](C[:, j])      for j in range(i-1))   # [T, 1024] — GROUND TRUTH

h        = trunk(cat([e_x, e_prompt, e_curr]), adaln_stage=i)  # bidirectional
logits   = h[-T:] @ emb_a[i].weight.T          # tied — [T, 1024]
loss     = cross_entropy(logits, C[:, i-1])     # ALL T positions at once

Three observations that are easy to miss.

What lives in which codebook?

The paper states the hierarchy qualitatively — "tokens from previous quantizers recover acoustic properties like speaker identity, while the consecutive quantizers learn fine acoustic details" — without assigning specific content to specific layers. The honest position is that the split is a gradient, not a partition, but the evidence in this paper does constrain it:

LayerWhat the paper's evidence impliesWhich result says so
1Phonetic identity, prosody, rate, speaker trajectory — 84% of the reconstruction energy and effectively all of the voiceChapter 2's residual walk; the AR ablation (SPK 0.585 → 0.236)
2–4Enough spectral detail that intelligibility depends on it — getting these wrong garbles words even with a perfect layer 1NAR-no-prompt WER of 19.6 with ground-truth layer-1 input
5–8Fine texture: high-frequency detail, breathiness, the last few percent of reconstruction errorThe diminishing-returns shape of the residual curve

Which explains a result that otherwise reads as a contradiction. Chapter 2 said layer 1 carries 84% of the reconstruction; Chapter 6 will show that a NAR model with no prompts produces 19.6% WER given a perfect layer 1. Both are true, because they measure different things: 84% is squared error in the codec's embedding space, and intelligibility is a perceptual property that depends heavily on the remaining 16%. Consonants are low-energy and high-information. Energy-weighted metrics systematically understate them.

The independence assumption, stress-tested

Chapter 3 argued that dropping time-conditioning within a layer is defensible. Interrogate that claim by asking what would break if it were badly false.

If within-layer time dependence mattered a lot…Predicted symptomObserved?
Adjacent frames' residuals would be inconsistentFrame-rate buzz or roughness — a 75 Hz artifactNot reported; the paper's samples are judged natural (SMOS 4.38)
Long-range residual structure would be lostTimbre drifting over an utteranceSpeaker similarity is high, so not badly
The model would need time-conditioning to hit good WERNAR WER floor well above the AR model'sNAR-2-prompts reaches 2.8 WER — better than the full pipeline's 5.9

That last row is the strongest evidence the assumption holds. Given a ground-truth first codebook, the parallel NAR stack reconstructs speech at 2.8% WER — better than the complete system, whose 5.9 is dominated by AR errors. If parallel residual generation were the weak link, the ceiling would show up here. It does not. The bottleneck is upstream, in the sequential part, which is exactly where the paper's Limitations section says it is.

Decoding: greedy, and why that is fine here

"For the NAR model, we use greedy decoding to choose the token with the highest probability." No sampling, no temperature.

Justify it from the division of labour. Sampling exists to inject diversity — different phrasings, different rhythms. All of that was already decided by the AR model when it chose codebook 1 and, implicitly, T. The NAR model's job is fidelity: given those decisions, add the residual detail that reconstructs cleanly. There is no diversity left to express, and sampling would only add reconstruction error. Greedy is the right call, and it also removes 5,250 random draws from the inference path.

Why not train seven NAR models and be done?

It is worth asking directly, since it is the simplest design and the paper rejects it implicitly by choosing AdaLN. Three reasons, in increasing order of importance.

ObjectionSeverity
Seven times the parameters (≈1.1 B instead of 160 M) and seven times the storageannoying but affordable
Seven separate training runs and seven sets of hyperparameters to babysitreal engineering cost
Each model sees only its own stage's data — one-seventh of the gradient signal, with no transfer between stagesdecisive

The third row is the argument. The seven tasks are highly related: "predict the residual after k stages" for k = 1 through 7 are variations on one skill. A shared trunk lets evidence from stage 2 improve stage 7. Seven isolated models throw that away, and each is trained on a seventh of the examples. AdaLN is how you get specialization without paying for isolation — roughly a million parameters to make one network behave as seven.

What bidirectional attention buys

The mask change from Chapter 4 is not a technicality. Dropping causality lets every position see the entire utterance, and there are concrete things the NAR model can only do with that view.

CapabilityWhy it needs bidirectional attention
Coarticulation from the rightHow a consonant is realized depends on the vowel that follows it. A causal model at frame t has not generated frame t+1 yet; the NAR model has the whole layer.
Utterance-level consistencyTimbre and channel character should be uniform across the utterance. Every frame can attend to every other and to the whole prompt, so drift has no room to accumulate.
Global normalization of detailThe residual "budget" is a property of the whole signal. Seeing all of it at once makes the refinement consistent rather than locally greedy.

And the thing it gives up: the NAR model cannot decide length, cannot stop early, and cannot be run before the sequence exists. Those are exactly the jobs assigned to the AR model. The two masks are complementary, and each model is given the mask that suits the decision it owns.

The diffusion analogy, and where it breaks

If AdaLN-with-a-stage-index feels familiar, it is: diffusion transformers condition on the denoising timestep with the same operator, for structurally the same reason. Both are "one network, a family of related tasks indexed by a scalar." The analogy is worth pushing because it clarifies both sides — and worth stopping at the point where it fails.

Diffusion timestep tNAR stage i
What the index meanshow much noise remainshow much residual remains
Direction of travelcoarse → fine as t decreasescoarse → fine as i increases
Conditioning operatorAdaLN / FiLM on the timestep embeddingAdaLN on the stage embedding — the same operator
Number of stepstens to hundreds, and tunableexactly 7, fixed by the codec
Output typecontinuous, refined by subtractiondiscrete, chosen by argmax over a codebook
Can you trade steps for quality?yes — fewer steps, worse samplesyes, but as bitrate: stop at 4 codebooks and you have 3 kbps audio

The analogy is genuinely useful for intuition — "the NAR stack is a seven-step, discrete, coarse-to-fine refiner" is an accurate sentence. It breaks on the last two rows. A diffusion model's step count is a hyperparameter you may choose at inference; VALL-E's is a property of the frozen tokenizer. And a diffusion step subtracts a continuous estimate, whereas a NAR step commits to one of 1,024 discrete entries, which cannot be partially undone by later stages.

Inline check. Could you run the seven NAR stages in a different order — say 8, 7, 6, …, 2? — No, and the reason is the last row of that table. Codebook 8's entries were fitted to the distribution of residuals after seven stages of subtraction. Presenting the model with codebook 1 alone and asking for codebook 8 puts it far outside the conditioning distribution it trained on. Diffusion's ordering is a schedule; RVQ's ordering is a definition.

The inference-cost ledger, derived in full

Now price the design. T = 750 (ten seconds), J = 8 codebooks.

Sequential steps. A "step" is one forward pass that must finish before the next can start — the quantity that determines latency.

Scheme 1 — flatten and autoregress everything:
J × T = 8 × 750 = 6,000 sequential steps

Scheme 4 — VALL-E:
AR over codebook 1: T = 750 steps
NAR over codebooks 2…8: (J − 1) = 7 steps
total = 750 + 7 = 757 sequential steps

speedup = 6,000 / 757 = 7.93×

Isolate the part the NAR model is responsible for, because that is where the paper's O(T) → O(1) claim lives:

residual codebooks, autoregressive: 7 × 750 = 5,250 steps
residual codebooks, NAR: 7 steps
ratio = 5,250 / 7 = 750×  — which is exactly T, as O(T) → O(1) predicts

The paper's sentence, now fully cashed out: "for the consecutive stages, as the number of output slots follows the sequence length of the first stage, NAR can reduce the time complexity from O(T) to O(1)." The clause before the comma is the enabling condition — the NAR model knows how many slots to fill only because the AR model already decided T. The two halves of the design are not independent optimizations; the second is licensed by the first.

The honest counter-accounting: arithmetic is not latency

A parallel pass is not free. It processes all 1,132 positions, where an AR step with a KV cache processes one. Count floating-point operations, using the rule of thumb that a forward pass costs about 2 × parameters FLOPs per token, with 152 M (AR) and 160 M (NAR) parameters:

AR over codebooks 2–8 (hypothetical): 5,250 tokens × 2 × 152×1061.60 × 1012 FLOPs
NAR, 7 passes: 7 × 1,132 tokens × 2 × 160×1062.54 × 1012 FLOPs

NAR does 1.6× more arithmetic — in 750× fewer serial steps.

That is the trade, and it is the right one on any parallel hardware: GPUs are throughput machines starved for work, and an AR step that touches one token leaves the device almost entirely idle. Spending 60% more FLOPs to eliminate 5,243 round trips is not a compromise; it is what the hardware wants.

A rough wall-clock picture, with an illustrative 20 ms per AR step and 60 ms per NAR pass (these latency figures are not from the paper — they are plausible numbers for a 150 M model, used only to show the shape):

SchemeSequential stepsIllustrative wall clockReal-time factor for 10 s of audio
Flatten and autoregress6,000≈ 120 s12× slower than real time
VALL-E (AR + NAR)757≈ 15.4 s≈ 1.5× slower than real time
Fully NAR (future work)1–8≈ 0.5 s20× faster than real time — but needs a length predictor
Say the uncomfortable part. Even after the 7.9× win, VALL-E as described is not a real-time system: 750 serial transformer steps to produce ten seconds of speech is roughly 1.5× slower than real time on the numbers above, and it cannot start until the whole text is known. This is why the paper's own future-work list includes "using full NAR models to speed up model inference," and why the streaming, full-duplex descendants of Chapter 10 — which must answer in 200 ms — had to change the codec's frame rate, not just the decoder. Latency is the axis VALL-E deliberately did not optimize.
The NAR stack — embedding sums, AdaLN, and the cost ledger

Step through the seven NAR calls. Watch the input representation grow in depth (more codebooks summed into the same 1024-dim vector) while its shape never changes, and watch the AdaLN scale-and-shift retune the shared trunk for each stage. The ledger on the right compares sequential steps against the three alternatives from Chapter 3.

Stage i = 2: the input sums exactly one codebook layer. Predicting codebook 8 sums seven — same 1024 dimensions either way.

The NAR model reduces the residual codebooks from 5,250 sequential steps to 7. What makes that legal — what does it depend on?

Chapter 6: Three Seconds — Prompting as Voice Cloning

Chapters 4 and 5 built two decoders that both accept an acoustic prompt. This chapter asks the question that makes VALL-E interesting rather than merely efficient: why does 225 frames of a stranger reproduce that stranger?

The paper's framing is deliberately borrowed from text. "In-context learning is a surprising ability of the text-based language model, which is able to predict labels for unseen inputs without additional parameter updates. For TTS, if the model can synthesize high-quality speech for unseen speakers without fine-tuning, the model is believed to have in-context learning capability."

And the honest assessment of what came before: "the in-context learning capability of existing TTS systems is not strong, because they either require additional fine-tuning or degrade dramatically for unseen speakers." Both failure modes were catalogued in Chapter 0. This chapter shows the mechanism that avoids both, and then the ablations that prove the mechanism is what is actually doing the work.

A framing worth holding through this chapter: prompting is not how you use the model, it is what the model does. Everything below is an unpacking of that sentence, with numbers.

The recipe, exactly

Inference construction, spelled out for both models. Nothing here is learned at inference time; it is all sequence assembly.

ModelPhoneme conditioningAcoustic conditioningDecoding
ARtranscript of the enrolled clip, concatenated with the target text — one sequence x:,1 as a literal prefix of the generated sequence — 225 tokenssampling
NARthe same xe = sum over all 8 codebooks — a separate 225-position segmentgreedy

The structural difference is worth naming precisely. In the AR model the prompt is a prefix: it occupies the same positions, in the same stream, as the tokens being generated. The model literally cannot tell where the enrolment stops and its own output begins — the paper: "the concatenation of c̃:,1 and c:,1 is a whole sequence, and we do not distinguish them or insert a specific token in training." In the NAR model the prompt is a separate conditioning segment with its own positional embeddings, which the model attends to but does not continue.

Prefix versus reference. Continue-this versus consult-this. Both are in-context learning; only the first is the thing that makes GPT-3 analogies apt.

Notice how much of this chapter is about a structural property rather than a trained one. The prefix mechanism is not learned separately, not tuned, and not present in the code as a distinguishable feature. It is a consequence of sequence layout, which is why it costs nothing and why it cannot be removed without changing what the model is.

The information budget of a voice

Count the bits. Three seconds at 75 Hz is 225 frames; eight codebooks of 10 bits each:

full prompt C̃: 225 × 8 × 10 bits = 18,000 bits = 2.25 kilobytes
what the AR model sees (c̃:,1 only): 225 × 10 = 2,250 bits = 281 bytes

Two hundred eighty-one bytes. That is the entire acoustic evidence the autoregressive model — the one that determines prosody, rate, timbre trajectory, and 84% of the reconstruction — receives about who is speaking. It is less than this paragraph.

Compare with what a speaker-encoder system passes around: a 256-dimensional float embedding is 256 × 32 = 8,192 bits, more than three times as much. Yet Chapter 9's numbers show VALL-E beating YourTTS decisively on speaker similarity. More bits, worse result — because the encoder's bits are a compressed identity claim produced by a network trained to discard everything but identity, while VALL-E's bits are raw acoustic evidence that a model trained on 60,000 hours can interpret however it needs to.

The general lesson about representations. A bottleneck trained for task A carries exactly the information task A rewards. If your downstream task B needs more than that, no amount of downstream capacity recovers it. VALL-E's prompt is not a summary of the speaker; it is a sample of the speaker, in the same format the model generates. That is why room reverberation and emotional state come along for free — nobody decided they should be included, because nobody decided anything was included.

The two settings below exist because "clone a voice" and "finish a sentence" are different tasks that share machinery, and the paper reports both rather than folding them together. Which number you quote depends on which task you mean.

Two inference settings

The paper distinguishes two ways the prompt can relate to the target, and reports both in every table — so knowing which is which matters when reading Chapter 9.

VALL-EVALL-E-continual
Enrolled clipa different utterance by the same speaker, cropped to 3 sthe first 3 seconds of the target utterance itself
Phoneme prompttranscript of that different utterance, prepended to the target textthe whole transcription of the target utterance
Tasksay something new in this voicefinish the sentence you started
Semantic relationnone — the prompt is unrelated contentcontinuous — the prompt flows into the output
LibriSpeech WER5.93.8
LibriSpeech SPK0.5800.508

The paper's explanation for the WER gap: "the word error rate can be further reduced in VALL-E-continual setting, because the acoustic tokens for the first 3 seconds are extracted from the ground truth." The first three seconds of the evaluated audio are not synthesized at all — they are real. Fewer generated frames, fewer chances to drop a word.

The speaker-similarity direction flips, which is initially puzzling and has a clean explanation. Similarity is measured between the prompt and the synthesized speech. In the plain VALL-E setting, prompt and target come from two different recordings of the same person, and the metric compares like with like across a natural within-speaker gap. In the continual setting the prompt is the head of the very same recording, so the comparison is against a much narrower reference — and any drift over the remaining seven seconds is measured against that single, specific instance. Different denominators, not a contradiction.

The ablations — a clean double dissociation

This is the most quietly rigorous part of the paper, and it is the part that turns "we expect the model learns to extract content and speaker information respectively" from a hope into a finding.

Experiment 1: what does the NAR model need? Three NAR models trained with different conditioning, all evaluated with ground-truth first-codebook tokens as input, so the AR model's quality cannot confound the result.

NAR conditioningWER ↓SPK ↑Reading
no prompt at all19.60.518Given perfect codebook-1 tokens it still garbles the words. The residual layers are not passengers.
+ phoneme prompt3.00.541WER falls by 85%. SPK barely moves.
+ phoneme and acoustic prompt2.80.732WER barely moves. SPK jumps 35%.

Read down the two numeric columns separately and the dissociation is stark. Adding phonemes: WER 19.6 → 3.0 (a 16.6-point improvement), SPK 0.518 → 0.541 (0.023). Adding the acoustic prompt on top: WER 3.0 → 2.8 (0.2), SPK 0.541 → 0.732 (0.191). Each conditioning signal moves its own metric by an order of magnitude more than it moves the other one.

The paper's summary: "It shows the phoneme prompt mainly contributes to the content of the generation. In the NAR-2 prompts, the model can learn speaker information from the acoustic token prompt and thus improve the speaker evaluation quality."

The first row also deserves its own moment. WER 19.6 with ground-truth codebook-1 tokens means: even with the coarse structure handed to you for free, filling the residual layers wrongly makes speech unintelligible. Chapter 2's "84% of reconstruction energy" was about squared error, not intelligibility. The remaining 16% is where consonant detail lives.

Experiment 2: what does the AR model need? Now hold the NAR model fixed at its best configuration and remove the AR model's acoustic prefix.

AR conditioningWER ↓SPK ↑
VALL-E (full)5.90.585
w/o acoustic prompt5.90.236

Look at that WER column. Identical. 5.9 and 5.9. Removing the speaker evidence from the autoregressive model changed intelligibility by exactly nothing, while speaker similarity collapsed by 60%, from 0.585 to 0.236 — below even the "no prompt" NAR ablation.

This is a textbook double dissociation, of the kind cognitive scientists spend careers hunting for: intervention A moves metric 1 and not metric 2; intervention B moves metric 2 and not metric 1. It licenses the causal claim the architecture assumed — the phoneme channel carries content, the acoustic channel carries identity, and they are genuinely separable in the trained model even though nothing forced them apart.

The number that reorganizes your mental model. The NAR model in this experiment still had its full eight-codebook prompt. It could see the speaker perfectly. And yet, with the AR prefix removed, speaker similarity fell to 0.236. The paper draws the conclusion: "Even if the NAR model could see the prompt, the prompt for the AR model also contributes a lot to speaker similarity." Identity is not a static timbre filter you apply at the end — it lives in the trajectory of the first codebook: the rhythm, the pitch contour, the way this particular person moves between phonemes. The NAR model can polish a voice; it cannot install one. And the AR model gets those 281 bytes to do it with.
The conditioning lab — every ablation the paper ran

Flip the four conditioning switches and read the paper's measured WER and speaker similarity. The two ablation families are reported under different protocols (the NAR rows use ground-truth codebook-1 input), so the panel labels which table each configuration comes from — do not compare a NAR row against an AR row directly.

NAR trained with no prompts at all: even with ground-truth codebook-1 input, WER is 19.6.

A useful reframing before the details: prompting here is not a user-interface convenience layered on top of a model. It is the model's native mode of operation, and text-conditioned synthesis without a prompt is the special case — the one Chapter 6's ablation shows scoring 0.236.

Where "three seconds" came from

The number is not derived from anything in VALL-E. It is inherited, and knowing from where explains why the paper reports it as the headline rather than the ten-second result that scores better.

The speaker-encoding literature established three seconds as the enrolment budget: the paper notes that in Jia et al. and Arik et al., "the experiments show that the model is able to generate high-quality outputs with 3 seconds enrolled recordings for in-domain speakers." Adopting the same budget makes the comparison against that line of work like-for-like rather than a matter of who was allowed more audio.

Which means the framing of Chapter 9's VCTK table is deliberate: three seconds is the hard setting, chosen for comparability, and the paper reports 5 s and 10 s alongside it to show the trend rather than to pick a flattering operating point. If you are building on this, three seconds is a floor, not a target — 0.382 versus 0.484 is a large difference for seven more seconds of audio you very likely have.

Inline check. If longer prompts are strictly better, why not use sixty seconds? — Two costs, both from Chapter 4. The prompt occupies positions in the AR context, so a 4,500-frame prefix plus 750 generated frames is a 5,250-position sequence, with a KV cache several times larger and attention cost growing quadratically. And the returns are diminishing: the phonetic inventory is covered within ten to twenty seconds, and beyond that you are re-observing statistics you already estimated. The paper does not test past ten seconds, so where the curve flattens is an open question — one of several in Chapter 10's list.
The sentence to remember from this chapter. VALL-E does not have a speaker representation. It has a speaker sample, in the model's own output format, sitting where the model's own output would sit. Every advantage (fidelity, environment, emotion) and every disadvantage (no revocation, sensitivity to enrolment quality) follows from that single structural fact.

What exactly gets copied from the prompt?

"It clones the voice" is too coarse. The prompt is a sample of a recording, and a recording is a convolution of several independent things. Sort them, because the paper's qualitative findings are claims about specific rows here.

AttributeCopied?Evidence
Timbre / vocal tract identityyesSPK 0.580 vs YourTTS 0.337 (Chapter 9)
Speaking rate and rhythmyesThe AR model inherits rate from the prefix — Chapter 4's implicit duration argument
Pitch range and contour styleyesImplied by the 0.585 → 0.236 ablation: identity lives in the layer-1 trajectory
Room acoustics / reverberationyesExplicitly reported: reverberant prompt → reverberant output
Emotional stateyesEmoV-DB prompts preserve emotion zero-shot
Recording channel (mic, codec artifacts)presumablySame mechanism as room acoustics; not separately measured
ContentnoThat is x's job — and the double dissociation proves the channels are separate
AccentpartiallyThe VCTK gap says accents outside the training distribution transfer poorly

The pattern: everything the codec preserves and the corpus varies over is copied; everything else is not. Accent is the instructive exception — EnCodec preserves it perfectly (it is just audio) but LibriLight barely varies over it, so the language model has not learned to model it as a dimension it can continue. Preservation by the tokenizer is necessary; variation in the corpus is also necessary.

The prefix and the reference, side by side

The AR model's prompt and the NAR model's prompt are both "the acoustic prompt," and treating them as the same object is the most common misreading of this architecture. Lay them out.

AR — prefixNAR — reference
Depth usedcodebook 1 onlyall 8, summed
Bits2,25018,000
Position in the sequenceoccupies the generated stream's own positionsa separate segment with its own positional embeddings
Is it continued?yes — generation literally extends itno — it is attended to, never extended
Constructed at training time?no — every prefix is implicitly a promptyes — a random 3 s window is drawn
Removing it costsSPK 0.585 → 0.236SPK 0.732 → 0.541

Read the last row against the row above it. The NAR model's prompt is explicitly constructed and contributes 0.191 of speaker similarity. The AR model's prompt is never constructed at all — it is an accident of causal training — and contributes 0.349. The unengineered mechanism is doing nearly twice the work of the engineered one.

Why in-context learning is available here and was not before

Make the argument structurally, because it generalizes past speech.

In-context learning requires that the conditioning information and the thing being generated share a type. A text LM can learn from examples in its prompt because examples are text and output is text — the same next-token machinery reads both. There is no separate "example encoder."

A mel-regression TTS system generates spectrogram frames from phonemes. Its input type is phoneme ids; its output type is real-valued frames. An enrolment recording is neither — it is audio. There is no slot in the sequence where audio is the natural next thing, so audio must be converted into a third type (a speaker embedding) by a third module, trained with a third objective. Every one of those steps loses information and adds a distribution the system can fall outside of.

VALL-E collapses the types. Enrolment audio, generated audio, and the model's output vocabulary are all codec tokens. The prompt is not converted into anything; it is prepended. That is the whole mechanism.

Prior systems: audio → encoder → embedding → conditioning module → frames
VALL-E:   audio → tokens → ⟨prepend⟩ → tokens

Two learned modules removed; two type conversions removed; two failure modes removed.

A Bayesian reading of the prompt

Another angle that some readers find clarifying. Think of the 60,000-hour model as having learned a prior over "ways speech can be" — a distribution p(C | x) marginalized over all seven thousand speakers, all rooms, all moods. Sampling from that prior gives you generic speech in an averaged voice.

The acoustic prompt is evidence. Conditioning on C̃ slices that prior down to the region compatible with the observation: this vocal tract, this room, this rate. The model is not learning a speaker; it is performing inference in a space it already knows, using 281 bytes of observation.

Two predictions fall out of this reading, and both match the data:

Practical prompt hygiene

The paper evaluates on clean, single-speaker, correctly-transcribed enrolment clips. Real deployments do not have that luxury. The following predictions follow from the mechanism; the paper does not test them, and they are labelled as reasoning rather than results.

Prompt defectPredicted effectMechanism
Two speakers overlapping in the clipBlended or unstable identityThe tokens encode both; nothing separates them, and the model continues whatever mixture it is given
Heavy background musicMusic continues into the outputSame mechanism that copies reverberation — the model cannot distinguish "environment" from "signal"
Clip cut mid-wordThe generated speech may begin mid-articulationThe AR model continues the acoustic trajectory it is handed, and a truncated phoneme is a trajectory in flight
Wrong transcript for the enrolmentLoss of phoneme/frame registration at the generation boundaryThe model has learned that x and the acoustic sequence advance together
Prompt at a very different sample rateSystematic pitch/timbre errorEnCodec is a 24 kHz model; resampling errors become token errors

The general shape: because the prompt is raw evidence rather than a filtered summary, the system is exactly as robust as the enrolment audio is clean. A speaker encoder's bottleneck was a liability for fidelity and an asset for robustness. VALL-E gives up the asset along with the liability.

How long should the prompt be?

Three seconds is a convention inherited from the speaker-encoding literature, not an optimum. The VCTK evaluation varies it, and the trend on the full 108-speaker set is clean:

Prompt lengthYourTTS* (saw 97 of these speakers)VALL-E (saw none)Ground truth ceiling
3 s0.3570.3820.546
5 s0.3770.4230.591
10 s0.3940.4840.620

From 3 s to 10 s, VALL-E gains 0.102 while the baseline gains 0.037 — VALL-E extracts nearly three times as much value from the extra evidence. The paper: "By comparing different lengths of the prompt, we can see our model is able to generate more similar speech when the prompt becomes longer, which is consistent with our intuition."

Why should it be? Three mechanisms, all of which are just "more evidence":

One honest wrinkle the paper reports without comment: on the 11-speaker fully-unseen subset, VALL-E scores 0.389 at 3 s and 0.380 at 5 s — a slight decrease — before rising to 0.414 at 10 s. With eleven speakers, that non-monotonicity is comfortably inside sampling noise; it is a reminder that the 11-speaker column is a small-sample column and should be read as a direction, not a measurement.

The claim, stated as strongly as the evidence allows

Putting the chapter's results into one careful sentence: a 150 M-parameter model, given 281 bytes of a stranger's first-codebook tokens and a correct phonemization of what they said, produces speech that human raters find nearly as similar to that stranger as a second real recording of them — on read English audiobook speech, and with no weights changed.

Every qualifier in there is doing work, and dropping any of them turns a defensible claim into an overclaim. "On read English audiobook speech" is Chapter 9's VCTK gap. "A correct phonemization" is the enrolment-transcript requirement. "Nearly as similar" is 4.38 against 4.5 with overlapping intervals. Being able to state the claim with its qualifiers intact is the difference between understanding the result and repeating a headline.

Prompt or fine-tune? A decision table

The paper's contribution is that prompting became viable, not that fine-tuning became useless. If you were choosing between them for a real product, the trade is legible.

ConsiderationPrompting (VALL-E)Fine-tuning (prior art)
Time to a new voicemilliseconds — tokenize and prependminutes to hours of training
Storage per voice1,800 integers (2.25 KB)a checkpoint or an adapter delta
Quality ceilingbounded by what 3–10 s of evidence supportshigher, given enough clean target audio
Behaviour on out-of-distribution voicesdegrades smoothly (VCTK accents)can adapt into the gap, if you have data
Servingone model, all voices, batchable togetherone model per voice — a serving nightmare at scale
Revocationnone — the "voice" is the audio someone holdsdelete the checkpoint

The last row is the one Chapter 10 returns to. Prompting removed the artifact that could be deleted, and with it the natural control point. Everything that made the capability easy also made it uncontainable.

The "continual" setting, read skeptically

VALL-E-continual scores the best WER in the paper (3.8), and it is worth being clear about why that number should not be quoted as the system's robustness.

In that setting the first three seconds of the evaluated utterance are ground-truth audio — not generated. So:

a 10-second evaluation utterance → 3 s real + 7 s synthesized
30% of the audio being scored was never produced by the model
and the model begins from a perfectly-aligned, in-distribution prefix

Both effects push WER down, and neither reflects the setting a user cares about, which is "read me this new sentence in this voice." The paper is transparent about the mechanism — "because the acoustic tokens for the first 3 seconds are extracted from the ground truth" — and reports both settings side by side. Read 5.9 as the system's number and 3.8 as an upper bound on what better alignment could buy.

Reproducing the ablations

The two ablation tables use different protocols, and mixing them is the most common way to misquote this paper. Keep them separate:

Table 4 (NAR ablations)Table 5 (AR ablation)
Input to the NAR modelground-truth codebook-1 tokensthe AR model's generated tokens
What is variedwhich prompts the NAR model was trained withwhether the AR model gets an acoustic prefix at inference
NAR configurationthree separately trained modelsfixed at NAR-2-prompts
Best WER shown2.85.9
Why the numbers differTable 4 removes the AR model from the loop entirely. Its 2.8 is what the residual stack can do given a perfect coarse layer; Table 5's 5.9 includes the AR model's errors. Comparing 2.8 to 5.9 measures the AR model's contribution to WER — roughly 3.1 points — which is a genuinely useful derived quantity the paper never states.

That derived number is the sharpest statement of where VALL-E's robustness problem lives: of the 3.7-point gap between VALL-E and ground truth, about 3.1 points are attributable to the autoregressive stage. Chapter 10's failure modes are not a side issue; they are essentially the entire quality gap.

The requirement everyone forgets

Read the AR recipe once more: "we should concatenate the phoneme sequence of the enrolled recording and the phoneme sequence for synthesis together."

VALL-E needs the transcript of the enrolled clip, not just the audio. Three seconds of a stranger is not sufficient input; you need three seconds plus a correct phonemization of what they said. In the paper's evaluations this is free — LibriSpeech and VCTK ship transcripts — but in the wild it means running ASR on the enrolment and inheriting its errors.

Why is it needed at all? Because the acoustic prefix and the phoneme sequence must stay in registration. The model learned that phonemes and acoustic frames advance together through the sequence. If you gave it 225 acoustic frames of speech whose phonemes were absent from x, the alignment it has learned to expect would be broken at exactly the moment it starts generating — the model would be somewhere in the middle of the audio while being at the start of the text.

(That last paragraph is a mechanistic prediction, not a reported experiment — the paper does not ablate transcript quality. It is the reasoning the design implies, and it is worth flagging as an untested corner rather than a result.)

The full inference checklist, so nothing is hand-waved. To clone a voice you need: (1) 3–10 s of audio at 24 kHz; (2) its transcript, phonemized; (3) the target text, phonemized; (4) EnCodec at 6 kbps to tokenize (1); (5) the AR model to generate c:,1 by sampling; (6) the NAR model, called seven times, greedily; (7) EnCodec's decoder to produce the waveform. Zero gradient steps. Zero stored per-speaker state. The "model" for a given voice is 1,800 integers you can put in a JSON file.
Removing the AR model's acoustic prefix left WER unchanged (5.9 → 5.9) but dropped speaker similarity from 0.585 to 0.236 — even though the NAR model still had its full 8-codebook prompt. What does this show?

Chapter 7: Showcase — Filling the Token Grid

Every piece is on the table. The alphabet (Chapter 2), the objective (Chapter 3), the sequential decoder (Chapter 4), the parallel one (Chapter 5), the prompt (Chapter 6). This chapter runs them, in one picture, with the controls in your hands.

The picture is the paper's Figure 3 turned into a machine you can operate. The object being built is the acoustic code matrix C: time across, codebook depth down. Watching it fill is watching VALL-E synthesize speech.

Everything, on one page

Before operating the machine, one consolidated statement of what it is doing, with the chapter each piece came from.

PieceWhat it isFrom
The alphabetEnCodec RVQ tokens: 75 Hz, 8 codebooks, 1,024 entries, 6 kbpsCh 2
The objectivemax p(C | x, C̃), factorized AR over time then NAR over depthCh 3
The content channelx — phonemes, worth 16.6 WER pointsCh 3, 6
The identity channelC̃ — 225 frames, worth 0.349 speaker similarity through the AR prefix aloneCh 6
The expensive decoderAR, causal, sampled, 750 passes, decides TCh 4
The cheap decoderNAR, bidirectional, greedy, 7 passes, AdaLN-conditionedCh 5
The output750 × 8 integers → frozen decoder → 240,000 samplesCh 2, 7

One instruction for using the panel well: run it once without touching the controls, then decide what you expect each control to do, then use it. Simulations teach when they confirm or refute a prediction; they decorate when you just watch them.

The generation script

Three phases, in strict order. Nothing in phase 2 can begin before phase 1 finishes, for the reason Chapter 5 derived: the NAR model needs to know how many slots exist.

Phase 0 — the prompt, given
EnCodec tokenizes the enrolment. All eight layers, all T′ frames, filled before anything is generated. The AR model will read only the top layer of it; the NAR model reads all eight.
↓ T sequential steps
Phase 1 — AR fills layer 1, left to right
One token per forward pass, sampled. Each new token is appended and the model runs again. Ends when ⟨EOS⟩ is sampled — that is when T is decided.
↓ 7 parallel passes
Phase 2 — NAR fills layers 2–8, top to bottom
One entire layer per forward pass, greedily, all T positions at once. Layer j conditions on the summed embeddings of layers 1…j−1 — so the order is fixed even though the timing within a layer is not.
Decode
The full T × 8 matrix goes to EnCodec's frozen decoder, which sums the eight codebook vectors per frame and upsamples 320× to a 24 kHz waveform.
THE SHOWCASE — watch C fill, AR then NAR

Shaded columns on the left are the acoustic prompt C̃ — given, never predicted. Press play and watch the top layer crawl left to right one token at a time (that is the AR model, one forward pass per cell), then the seven layers below snap into existence a whole layer at a time (that is the NAR model). The step counter is the real currency: it counts forward passes that must happen in sequence.

Idle. Press play. The counter tracks sequential forward passes: 750 for the AR phase, 7 for the NAR phase.

What the animation deliberately distorts

A simulation that is honest about its lies teaches better than one that is not. Three ways this panel differs from the real thing, each chosen to make a specific point legible.

The panel showsRealityWhy the distortion
26–46 columns975–1,500 framesIndividual cells would be sub-pixel. The ratios — prompt fraction, AR versus NAR cost — are exact.
The NAR phase taking visible time7 passes against 750At true relative speed the NAR phase would be a single frame of animation. The latency bar at the bottom shows the honest proportion.
Every cell equally brightLayer 1 dominates perceptuallyUniform rendering makes the grid readable; Chapter 2's error curve is the correction to apply mentally.

The counters, by contrast, are not distorted: "sequential passes 383 / 757" and "tokens placed 2,250 / 6,000" are the real numbers for a ten-second utterance, scaled from the animation's position. Trust the counters over the pixels.

The panel is the paper's Figure 3 with a clock attached. Figure 3 shows which tokens attend to which; this shows the same structure unfolding in time, which is the part a static diagram cannot convey.

Five things to look for

  1. The seam is invisible. When the AR phase starts, the first generated cell sits immediately beside the last prompt cell in the same layer, with nothing marking the boundary. That is not a rendering shortcut — it is the paper's design: "we do not distinguish them or insert a specific token in training." The model is doing one thing (continue this sequence), and prompting is not a special case of it.
  2. The top layer costs everything. Count how long phase 1 takes versus phase 2. Ratio 750 : 7. All the latency, all the sampling, all the risk of dropped words — concentrated in one of eight layers, the one that Chapter 2 measured at 84% of the reconstruction.
  3. Depth is ordered, time is not. Inside phase 2, layer 5 waits for layer 4 — you will never see them fill together. But within layer 5, frame 3 and frame 700 arrive in the same instant. That is exactly the independence structure of Equation 2.
  4. Temperature only touches the top layer. Drag it and watch: the AR row's token values scatter, the seven NAR layers do not change their behaviour at all. Greedy decoding below, sampling above — Chapter 5's argument, visible.
  5. The prompt fraction moves. At 3 s the given region is 225 of 975 columns (23%); at 10 s it is 750 of 1,500 (50%). More of the AR model's context is speaker evidence and less is its own output — the third mechanism from Chapter 6's prompt-length discussion, drawn to scale.

Compute the prompt fractions yourself so the slider means something. Target utterance ten seconds = 750 frames in every case:

3 s prompt: 225 / (225 + 750) = 225 / 975 = 23.1% of the AR sequence is given
5 s prompt: 375 / (375 + 750) = 375 / 1125 = 33.3%
10 s prompt: 750 / (750 + 750) = 750 / 1500 = 50.0%

And the total token accounting for the standard case — 3-second prompt, ten-second output:

QuantityCountWhere it comes from
Prompt tokens given225 × 8 = 1,800EnCodec on the enrolment
Tokens the AR model generates750one per sequential step
Tokens the NAR model generates750 × 7 = 5,250seven parallel passes
Total generated6,000= T × 8, the whole matrix
Sequential forward passes757750 + 7 — Chapter 5's ledger
Tokens per sequential pass6,000 / 757 = 7.93the effective parallelism of the design
The one-number summary of VALL-E's architecture. 7.93 tokens produced per sequential forward pass. A flat autoregressive model over the same matrix produces exactly 1.00. That factor of 7.93 is the entire return on the AR/NAR split, and it is bounded above by the number of codebooks — which is why the sequel work in Chapter 10 attacks the problem from the other side, by making the codec's frame rate lower rather than by adding more parallel layers.

Before running it: predict what you expect the latency bar at the bottom of the panel to look like when generation finishes. If your prediction is "roughly half AR and half NAR," the panel is about to correct you, and the correction is the single most important number in this chapter.

Ten seconds, narrated

A walkthrough in words, with counters, so the animation has a script to follow. Target text: "Your appointment is confirmed for Thursday." Enrolment: three seconds of a stranger.

MomentWhat existsSequential passes used
t = 0, before anythingx (157 phonemes + EOS), C̃ (225 × 8 integers). No generated audio.0
After pass 1One new integer in layer 1. It sounds like nothing; a single 13.33 ms frame at 0.75 kbps.1
After pass 75One second of coarse structure. The model has committed to a speaking rate.75
After pass 450Six seconds. The word "confirmed" has been placed — or, if alignment slipped, has not.450
Pass 750⟨EOS⟩ sampled. T is now known: 750. Only now can anything else begin.750
Pass 751All 750 tokens of codebook 2, at once.751
Passes 752–757Codebooks 3 through 8, one pass each.757
Decode750 × 8 integers → 240,000 samples → 10.000 s of audio. First audible sample available now, not earlier.757

The row worth staring at is pass 750. Every one of the seven cheap passes is blocked behind all 750 expensive ones, and the first sample of audio is blocked behind all 757. That single dependency is the difference between a batch synthesizer and a conversational one.

What changes for a short utterance?

Not the structure, only the ratio — and the ratio is why short-form synthesis is a much better fit for this design.

UtteranceTAR passesNAR passesTotalTokens per pass
2 seconds15015071577.64
10 seconds75075077577.93
30 seconds2,2502,25072,2577.98

Efficiency creeps upward with length — the fixed seven passes amortize — but latency grows linearly and so does the exposure-bias chain of Chapter 4. Short utterances are cheaper and more reliable, which is consistent with the paper's own observation that VCTK's shorter sentences produced better naturalness scores than LibriSpeech's longer ones.

The grid is a clock — reading columns as time

Because the frame rate is fixed, the horizontal axis has a hard physical interpretation. Every column is exactly 1/75 s = 13.33 ms of audio, and 320 waveform samples. So:

Grid quantityPhysical meaningArithmetic
1 column13.33 ms1 / 75 s; 320 samples at 24 kHz
1 phoneme≈6 columns750 frames / ≈120 phonemes (Chapter 3)
1 syllable≈15–20 columns≈200–270 ms of speech
The 3-second prompt225 columns3 × 75
A 200 ms conversational turn gap15 columnsthe latency budget a duplex system must beat

That last row is the one to remember. Human conversational turn-taking runs on gaps of roughly 200 ms. VALL-E's AR phase alone needs 750 sequential forward passes before the first sample of audio can be decoded. Fifteen columns of latency budget against 750 columns of serial work is not a tuning problem; it is a structural one, and it is why Chapter 10's successors changed the frame rate rather than the decoder.

Why this grid cannot be streamed

An obvious optimization suggests itself: why wait for the whole utterance? Emit audio for the first frames as soon as they are ready.

Follow the dependencies and watch it fail. To decode frame 1 into audio you need all eight of its codes. Codes 2–8 come from the NAR model. The NAR model runs on the entire layer at once and is conditioned on the full first-codebook layer, which does not exist until the AR model has emitted ⟨EOS⟩. So frame 1's audio is not available until frame 750's coarse token has been generated.

AR phase — 750 steps
Nothing decodable exists yet. Layer 1 alone would decode at 0.75 kbps — technically audio, perceptually unusable.
↓ only now is T known
NAR phase — 7 passes
Each pass conditions on all T positions. There is no partial layer.
First audible sample
After all 757 passes. Time-to-first-audio ≈ total generation time.

You could chunk it — generate a few seconds, run the NAR stack on that block, emit, continue — and later systems do exactly this. But it is a modification, not a property of the design, and it costs you the global conditioning that makes the NAR stage cheap. The honest statement is that VALL-E as published is a batch synthesizer: text in, complete utterance out.

The same grid at other operating points

Everything in this chapter is parameterized by three numbers — frame rate, codebook count, and utterance length. Vary them and the ledger moves in instructive ways.

ConfigurationFrames for 10 sCodebooksSequential passesTokens per pass
VALL-E as published750 (75 Hz)87577.93
EnCodec at 12 kbps7501676515.7
Flat AR baseline75086,0001.00
A 12.5 Hz codec (Mimi-style)12581327.58
A 12.5 Hz codec, fully NAR12588125

Read the fourth row carefully, because it is the whole strategic point. Dropping the frame rate 6× cuts sequential passes 5.7× — a bigger win than the entire AR/NAR split delivered — without changing the decoder at all. Adding codebooks is nearly free; adding frames is brutally expensive. Any future work on latency in this family attacks the frame rate first.

The generalizable lesson about autoregressive design. When a model generates a structured object, ask which axis it is autoregressive along, and make that axis as short as possible. VALL-E's answer is time, so time is the axis to compress — and every other axis (depth, channels, codebooks) should be handled in parallel. Systems that get this backwards, autoregressing along the cheap axis and parallelizing the expensive one, pay for it in latency they can never recover.

The inference loop, as code

Everything in the animation, written out. The shapes are the ones from Chapters 4 and 5; run your eye down the two loops and notice that one has 750 iterations and the other has 7.

python — VALL-E inference, end to end (pseudo-code with real shapes)
# ---------- inputs ----------
enrolled_wav   = load_24k("stranger_3s.wav")       # 72,000 samples
enrolled_text  = "and so the evening passed"          # its transcript — REQUIRED
target_text    = "your appointment is confirmed"

# ---------- tokenize ----------
C_tilde = encodec.encode(enrolled_wav)               # int[225, 8]
x = g2p(enrolled_text) + g2p(target_text) + [EOS]   # int[L]  — ONE sequence

# ---------- phase 1: AR, 750 sequential steps ----------
c1 = list(C_tilde[:, 0])                            # the acoustic PREFIX, 225 tokens
while True:
    h      = ar_model(emb_phn(x), emb_a(c1))          # causal; KV-cached in practice
    logits = h[-1] @ W_a.T                              # tied weights -> [1025]
    tok    = sample(softmax(logits / T))                 # NOT beam search (infinite loops)
    if tok == EOS_AC: break                            # the model decides the length
    c1.append(tok)
c1 = np.array(c1[225:])                              # drop the prefix -> int[T], T ~= 750

# ---------- phase 2: NAR, 7 parallel passes ----------
C = np.zeros((len(c1), 8), dtype=int); C[:, 0] = c1
e_prompt = sum(emb_a[j](C_tilde[:, j]) for j in range(8))    # ALL eight layers
for i in range(2, 9):                                  # seven calls, ordered
    e_curr = sum(emb_a[j](C[:, j]) for j in range(i - 1))  # SUM, not concat
    h      = nar_model(emb_phn(x), e_prompt, e_curr, stage=i)  # AdaLN(h, i)
    C[:, i - 1] = (h @ W_a[i].T).argmax(-1)          # GREEDY, all T at once

# ---------- decode ----------
wav = encodec.decode(C)                               # T*320 samples at 24 kHz
# 750 frames -> 240,000 samples -> exactly 10.0 seconds

Two lines in there are the entire paper. c1 = list(C_tilde[:, 0]) — voice cloning, implemented as list initialization. And C[:, i-1] = (...).argmax(-1) — an entire codebook layer assigned in one statement, which is what O(T) → O(1) looks like when you write it down.

From grid to waveform — the last step, in detail

The animation ends with a filled matrix, and it is easy to treat "hand it to the decoder" as a black box. Open it, because it is the same arithmetic as Chapter 2's hand example, run 750 times.

1 · Look up
For frame t, take its eight integers and index eight codebooks: W1[ct,1], W2[ct,2], …, W8[ct,8]. Eight vectors.
2 · Sum
Add them. One continuous embedding per frame — exactly the v̂ = e3 + f1 step from Chapter 2, with eight terms instead of two. Result: float[750, d].
3 · Upsample 320×
Transposed convolutions invert the encoder's strides. 750 frames → 750 × 320 = 240,000 samples.
4 · Audio
240,000 samples at 24 kHz = exactly 10.000 seconds. Play it.

Two things follow from step 2 that are worth holding. The decoder sums — which is why Chapter 5's NAR model also sums its input embeddings rather than concatenating them, matching the algebra of the object. And the decoder has no idea which codes were generated and which came from the prompt; it sees one matrix. The seam is invisible to the decoder for the same reason it is invisible to the AR model.

Inline check. Suppose the AR model samples ⟨EOS⟩ at frame 400 instead of 750 — it stopped early. What happens next? — Nothing corrects it. T becomes 400, the NAR model dutifully fills seven layers of 400 frames, and the decoder produces 5.3 seconds of audio that ends mid-sentence. There is no check that the phoneme sequence was consumed, because there is no representation of "how much of x is left." That is the deletion failure mode of Chapter 10, in its most extreme form.

Three reading exercises for the grid

Run these deliberately. Each one is a claim from an earlier chapter, made checkable.

Do thisWatch forWhich claim it verifies
Set prompt to 10 s and press play. Compare the shaded region to the 3 s setting.The given region grows from 23% to 50% of the AR sequence, and the number of sequential passes does not change — only the fraction of context that is evidence.Chapter 6's third prompt-length mechanism: longer prefixes keep speaker evidence a larger share of the context.
Press step repeatedly during phase 1, then during phase 2.Phase 1: one cell per press. Phase 2: 750 cells per press. The step button costs the same either way; the payload does not.Chapter 5's O(T) → O(1): a NAR pass is one step regardless of T.
Drag temperature from 0 to 1.5 while paused mid-generation.Only the top row's cell values shift. Layers 2–8 are unaffected.Sampling above, greedy below — the asymmetric decoding of Chapters 4 and 5.

The latency bar at the bottom of the panel is the summary of all three: the AR phase occupies 750 / 757 = 99.1% of the sequential budget while producing 750 / 6,000 = 12.5% of the tokens. That inversion — almost all the time spent on one-eighth of the output — is the shape of the entire design, and it is what the next generation of systems set out to fix.

Break it: four experiments the grid invites

The simulation is a teaching device, but each control corresponds to a real degradation you could measure. Predict the outcome before you drag.

ExperimentWhat the design predictsGrounded in
Temperature → 0Deterministic output. Same text plus same prompt gives a byte-identical waveform every time. The Figure 4 diversity disappears, and the paper's pseudo-data-generation argument goes with it.Chapter 1's softmax derivation
Temperature → highErratic durations, misplaced emphasis, and eventually dropped or duplicated words — the AR failure mode, amplified.Chapter 10's limitations
Truncate to 4 codebooksAudible but degraded: Chapter 2's error curve says four stages leave a few percent of the residual energy. Bitrate falls from 6.0 to 3.0 kbps. The voice survives — that lives in layer 1.Chapter 2's residual walk
Shuffle the NAR order (predict layer 7 before layer 2)Incoherent. Layer 7 encodes the residual left by layers 1–6; computing it from layer 1 alone means conditioning on a distribution the model never saw. This is not a small degradation, it is a type error.Chapter 3's independence analysis

Only the first two are things the paper reports on. The third and fourth are predictions the architecture makes; a reader with a GPU could check them in an afternoon, which is a good sign that the model has been explained rather than described.

What the grid does not show, and cannot. Every cell here is an integer, and integers are equally legible. In the real system the eight layers are wildly unequal in perceptual consequence: an error in layer 1 changes which phoneme you hear; an error in layer 8 changes a fraction of a decibel of high-frequency detail. The grid renders a hierarchy as a rectangle. Keep Chapter 2's error curve mentally overlaid on it — the top row is not one-eighth of the picture, it is most of it.
In the grid, the seven lower layers fill one whole layer at a time rather than all seven at once. Why not all seven simultaneously?
For a 3-second prompt and a 10-second output, how many acoustic tokens does VALL-E produce, and how many sequential forward passes does that take?

Chapter 8: The Scale Bet — 60,000 Hours

Chapter 4 counted the parameters: about 152 million. In January 2023 that is a small model — GPT-3 was 175 billion, a thousand times larger, and it was two and a half years old. Twelve layers with d = 1024 was an unremarkable configuration in 2019.

So VALL-E is not a bet on model scale. The bet is entirely on the other axis, and the paper states it as a contribution: "We build a generalized TTS system in the speaker dimension by leveraging a huge amount of semi-supervised data, suggesting that simple scaling up semi-supervised data has been underestimated for TTS."

This chapter prices that bet — how much data, where it came from, what it cost to train on, and, at the end, exactly what it did and did not buy.

Inline check before the numbers. If you had 60,000 hours of audio and a mel-regression TTS system, what would you do with it? — Filter it. You would keep the cleanest few hundred hours and throw the rest away, because noisy targets degrade a regression model. That instinct is correct for that objective, and it is exactly the instinct this chapter is arguing had become obsolete.

Two axes, and which one everyone reached for

A model has two obvious scaling axes and a fixed budget. The field's instinct in 2022 was to spend on parameters, because that is what had worked for text. VALL-E spends on data. The comparison is worth making explicit before the numbers.

Scale the modelScale the data
What it costscompute, memory, serving latencyacquisition, storage, and a tolerance for noise
What it buyscapacity to fit what you already havecoverage of what you do not
When it helpswhen the model is underfittingwhen the model has never seen the case
Zero-shot speaker generalizationdoes not help — you cannot memorize a voice you have not hearddirectly helps — the task "adapt to an unseen voice" only exists if voices vary

Frame it as diagnosis. Pre-VALL-E TTS was not failing because 30 M-parameter acoustic models lacked capacity to fit 600 hours — they fit it well and sounded good on the speakers they knew. It was failing on speakers it had never encountered, which is a coverage failure. Coverage failures are cured by data and not by parameters, and reading the diagnosis correctly is why a 150 M-parameter model beat a decade of architectural work.

Keep one distinction sharp through this chapter: hours is a measure of audio, frames is a measure of model timesteps, and tokens is a measure of integers. All three appear below, they differ by factors of 270,000 and 8, and mixing them is the fastest way to get an epoch count wrong by an order of magnitude.

This chapter is the one where the paper's contribution actually lives, which is worth saying plainly given how little of it is architecture.

The corpus

PropertyLibriLightWhat it means for the model
Total audio60,000 hours≈ 6.8 years of continuous speech
Distinct speakers≈ 7,000≈ 8.6 hours per speaker on average
Labelsnoneaudio only — transcripts must be generated (Chapter 3)
Domainaudiobooks (LibriVox readings)read speech, mostly literary prose, mostly clean-ish but uncontrolled
LanguageEnglishthe model is monolingual; VALL-E X later extends this
Average utterance60 secondsfar longer than a TTS training clip — hence the random cropping below

Set that against the prior art. LibriTTS — the standard multi-speaker TTS corpus of the era — is a filtered, cleaned, segmented derivative of LibriSpeech, and the paper's summary row says existing systems trained on "≤ 600 hours." The ratio:

60,000 / 600 = 100× more audio, from ≈7,000 speakers instead of hundreds

And the paper is candid about what the extra 59,400 hours are like: "our data contain more noisy speech and inaccurate transcriptions but provide diverse speakers and prosodies. We believe the proposed approach is robust to the noise and generalize well by leveraging large data."

That sentence is the whole thesis restated as a wager. Chapter 0 showed why noisy data poisons a regression objective. The claim here is that a language-model objective converts the same noise from poison into coverage — because a token sequence extracted from a reverberant recording is a perfectly valid token sequence, and the model that learns it gains the ability to produce reverberant speech when prompted with reverberant speech. Chapter 9's acoustic-environment finding is that wager paying off.

Where the 60,000 hours came from

LibriLight is not a TTS corpus and was never meant to be one. It was assembled as an ASR benchmark — a testbed for limited-supervision and unsupervised speech recognition — from LibriVox, the volunteer public-domain audiobook project. Volunteers read out-of-copyright books at home, with whatever microphone they own, in whatever room they have.

Three consequences follow directly from that provenance, and every one of them shows up later in this lesson:

A corpus built for one purpose, repurposed for another, carrying its origins into every result — strengths and gaps alike. Worth asking of any dataset before trusting what a model trained on it can do.

Everything below is standard, and that is the observation. Read the configuration looking for the clever part; there isn't one.

The training configuration, in full

SettingValueWhy it is what it is
Architecture (both models)12 layers, 16 heads, d = 1024, dff = 4096, dropout 0.1head dimension 1024/16 = 64, the standard choice
Hardware16 × NVIDIA Tesla V100 32 GBtwo nodes of eight — a modest cluster even for 2022
Batch6,000 acoustic tokens per GPU96,000 per optimizer step across the cluster
Steps800,000per model; the AR and NAR models are trained separately
OptimizerAdamWdecoupled weight decay — the transformer default
Schedulewarm up 32,000 steps to a peak of 5 × 10−4, then linear decaywarmup is 4% of training
Input croppingrandom window between 10 s and 20 sLibriLight utterances average 60 s — too long to train on whole
NAR acoustic prompta random 3-second segment from the same utterancethe only place a prompt is explicitly constructed at training time

Two of those rows encode design decisions worth dwelling on.

Random 10–20 s crops. The window length varies from example to example, so the model never learns "utterances are N frames long." It sees short ones and long ones, and the ⟨EOS⟩ decision has to be driven by content and prosody rather than by a memorized position. Given that ⟨EOS⟩ is the duration model (Chapter 4), randomizing the crop is the closest thing to explicit duration training in the entire system.

NAR prompt from the same utterance. A three-second window is drawn from the same recording as the target. Same speaker, same microphone, same room, same session. This teaches the NAR model "copy the acoustic character of the reference," which is precisely the job it will do at inference. It also means the model was never trained on the harder case where the prompt comes from a different session — and yet that is exactly what the plain VALL-E evaluation setting does. A small train/test mismatch that the results suggest it survives.

How much data did it actually see? A derivation with an ambiguity

The paper does not report an epoch count, but everything needed to compute one is given. Start with the corpus size in the model's own units.

60,000 hours × 3,600 s/hour = 2.16 × 108 seconds
× 75 frames/second = 1.62 × 1010 frames (16.2 billion)
× 8 codebooks = 1.296 × 1011 tokens (129.6 billion)

Now the training budget:

16 GPUs × 6,000 per GPU × 800,000 steps = 7.68 × 1010 units consumed

Units of what? "6k acoustic tokens per GPU" is ambiguous — a token could mean one integer (so a frame contributes eight) or one frame. The two readings give very different answers, so resolve it with a sanity check rather than a guess.

Crops average about 15 seconds, which is 15 × 75 = 1,125 frames.

ReadingUtterances per GPU per stepVerdictImplied epochs
A: 6,000 = individual integers (all 8 codebooks)6,000 / (1,125 × 8) = 0.67Impossible — you cannot batch two-thirds of an utterance0.59
B: 6,000 = frames (i.e. codebook-1 positions)6,000 / 1,125 = 5.3Sensible — a small but normal batch4.74

Reading B it is. So:

frames consumed / frames available = 7.68 × 1010 / 1.62 × 1010 = 4.74 epochs

Under five passes over 60,000 hours of audio. Put that beside the text-model numbers the paper's introduction cites — GPT-3 saw roughly 300 billion text tokens — and VALL-E's 76.8 billion next-token predictions land within a factor of four of a frontier language model of the era. Measured in training signal rather than parameters, this is not a small run.

What it cost

The paper reports no wall-clock time, so estimate it with the standard rule that transformer training costs about 6 × parameters × tokens FLOPs (two for the forward pass, four for the backward):

6 × 152 × 106 params × 7.68 × 1010 tokens = 7.0 × 1019 FLOPs

16 V100s × 125 TFLOP/s (fp16 peak) = 2.0 × 1015 FLOP/s
at a realistic 30% utilization = 6.0 × 1014 FLOP/s

7.0 × 1019 / 6.0 × 1014 = 1.17 × 105 s ≈ 32 hours ≈ 1.4 days per model

(That is a derived estimate, not a paper figure. Real runs with data loading, checkpointing, and imperfect overlap typically land at two to four times the idealized number, so call it a week for both models on sixteen V100s.) Either way the headline is the same: the expensive resource was the 60,000 hours, not the GPUs. A modern research group could reproduce this compute budget on a handful of contemporary accelerators; what they could not trivially reproduce is the corpus and the willingness to trust it.

Read the bet as a claim about where the bottleneck was. Every prior TTS paper spent its innovation budget on architecture: better attention, better duration models, better speaker encoders, better vocoders. VALL-E spent almost nothing there — a vanilla decoder-only transformer at a 2019 size — and spent everything on removing the constraint that kept the data small. The result outperforms the architectural work by a wide margin. That is the shape of a bottleneck being correctly identified: the winning move is not a better solution to the stated problem, it is a change that makes the stated problem stop mattering.
The scale ledger — hours in, tokens and compute out

Slide the corpus size and watch the derived quantities move: frames, acoustic tokens, epochs at VALL-E's fixed 76.8-billion-frame training budget, and the estimated compute. The markers show where the pre-VALL-E ceiling sat and where LibriLight sits. The right panel puts the token count next to text-corpus scales from the paper's own introduction.

A caveat on the epoch estimate before spending it: it assumes every hour of LibriLight is used and that the random 10–20 second crops sample the corpus uniformly. Neither is stated. Treat 4.74 as an order-of-magnitude statement — "a handful of passes, not hundreds and not a fraction" — rather than a precise figure.

Noise as coverage — a concrete example

"Noisy data helps" is counterintuitive enough to deserve a worked case rather than an assertion.

Suppose 5% of LibriLight recordings have noticeable room reverberation. Under the two objectives:

Regression TTSCodec language model
What the target looks likea mel spectrogram with reverb smeared across ita token sequence that decodes to reverberant audio
What the model learnsthe conditional mean — 5% of a reverb tail, applied to everythingthat this kind of prefix is followed by this kind of continuation
Effect on clean synthesisdegraded — a faint smear everywherenone — prompt with clean audio, get clean audio
New capabilitynonereverberant prompt → reverberant output

The mechanism is that a conditional distribution can represent a mixture, and a point estimate cannot. Under regression, "5% of the data is reverberant" becomes "everything is 5% reverberant." Under a language model, it becomes "there is a reverberant mode, reachable by conditioning" — and the acoustic prompt is exactly the conditioning that reaches it. Chapter 9's acoustic-environment finding is this table, observed.

Which yields a clean rule: noise hurts point estimators and informs distribution estimators. The same corpus is poison to one and a feature to the other. That is a much stronger statement than "the model is robust to noise," and it is the actual reason the scale bet worked.

Why the 60-second average utterance forces cropping

A detail that sounds like housekeeping and is not. LibriLight's average utterance is 60 seconds — a chapter-length chunk of an audiobook. At 75 Hz that is 4,500 frames, and:

4,500 positions → attention matrix of 4,5002 = 2.0 × 107 entries per head per layer
versus a 15-second crop: 1,1252 = 1.27 × 10616× cheaper

So cropping to 10–20 seconds is partly an economics decision. But it also shapes what the model learns, in two ways that matter at inference:

What "semi-supervised" means here, exactly

The paper describes its data as "semi-supervised," which in speech usually means something specific and is worth unpacking against the alternatives.

RegimeWhat you haveExample
Supervisedaudio with human transcriptsLibriSpeech 960h, LibriTTS
Self-supervisedaudio only; the objective is constructed from the audio itselfwav2vec 2.0, HuBERT masked-unit prediction
Semi-supervised (VALL-E)audio only, plus a model trained on a small labelled set to generate pseudo-labels960 h of real labels bootstraps 60,000 h of machine labels
Weakly supervisedaudio with noisy, human-produced labels of uncertain qualityWhisper's 680,000 h of internet audio-transcript pairs

The distinction between the last two rows is more than terminology. Whisper's labels are human-written and therefore wrong in human ways — paraphrases, missing disfluencies, translated rather than transcribed. VALL-E's labels are machine-written and wrong in model ways — systematic confusions between similar phones, boundary errors at 30 ms resolution. Different error distributions demand different tolerances, and VALL-E's is arguably the easier one because its aligner is trained on the very domain it will label.

The same bet, pointed the other way

It is illuminating to put VALL-E next to Whisper, published two months earlier. The two papers make structurally identical arguments in opposite directions.

Whisper (recognition)VALL-E (synthesis)
The stuck fieldASR needed in-domain fine-tuning to be robustTTS needed studio data and per-speaker adaptation
The constraint being removedlabel cleanlinessaudio cleanliness
The move680,000 h of noisy web audio-transcript pairs60,000 h of unlabelled audio with pseudo-labels
The architecturea plain encoder-decoder transformera plain decoder-only transformer (×2)
The claimzero-shot robustness approaching human on out-of-distribution audiozero-shot speaker generalization from a 3-second prompt
The shared thesisThe field's bottleneck was a data-quality requirement imposed by its own training setup, not by the task.

Reading them together is the best argument that neither result is a fluke of speech. Both are instances of a general move: find the place where your pipeline demands clean data, ask what that demand is protecting, and check whether a different objective makes the protection unnecessary. Where it does, two orders of magnitude of data are usually waiting.

Hours or speakers — which axis is doing the work?

"60,000 hours" and "7,000 speakers" are quoted together, but they are different resources and it matters which one the capability depends on. Divide:

60,000 hours / 7,000 speakers ≈ 8.6 hours per speaker

Now run the thought experiment the paper does not. Imagine two corpora, both 60,000 hours.

Corpus A: 7,000 speakers × 8.6 hCorpus B: 10 speakers × 6,000 h
Acoustic modelling qualitygoodgood — possibly better per speaker
Prosody diversityhighlow
Zero-shot cloningworkscannot work
Reason"continue an unfamiliar voice" occurs 7,000 times, always with a different answerThe model can memorize ten voices. A prefix from an eleventh has no learned response — the task never existed in training

So the capability is a function of speaker count, and audio volume is what makes each speaker learnable. This is the direct analogue of few-shot prompting in text needing task diversity, not merely token volume: you cannot learn "adapt from the prefix" from a training distribution where the prefix never varies in the relevant way.

It also predicts the shape of the returns. Going from 10 to 1,000 speakers should be transformative; from 7,000 to 70,000 should be incremental, except along axes the first 7,000 did not cover — accents, languages, speaking styles. Which is exactly what the paper's own limitation section asks for.

The pseudo-label error budget

The phoneme sequences are machine-generated by a hybrid DNN-HMM system trained on 960 hours. That system is not perfect, so the model is learning from a corrupted content channel. How bad is it?

The paper reports no alignment accuracy, so reason about the structure of the errors instead:

Note also the choice of a hybrid DNN-HMM rather than a modern end-to-end recognizer. It looks dated until you remember what is needed: not a transcript but a frame-level alignment, at a 30 ms frameshift. HMM-based forced alignment produces exactly that. CTC and attention-based systems produce transcripts and only approximate alignments. The old technology was the right tool for the job.

Batch, memory, and why 800,000 steps

Work out what one GPU is holding, since the constraint shows in the hyperparameters. Under reading B, 6,000 frames per GPU at an average crop of 1,125 frames is about five utterances per batch. Each AR sequence is roughly L + T ≈ 120 + 1,125 ≈ 1,245 positions.

activations ≈ 5 sequences × 1,245 positions × 1,024 dims × 12 layers × (a few tensors per layer)
≈ 7.6 × 107 values per stored tensor set, × 2 bytes ≈ 150 MB per tensor set
— comfortably inside 32 GB once the usual multiple of stored intermediates is accounted for

The batch is small by language-model standards (96,000 frames globally, against millions of tokens for text pre-training), which is consistent with a 5 × 10−4 peak learning rate — small batches want smaller steps. And 800,000 steps at that batch is how they reached ~4.7 epochs: with a bigger batch and fewer steps the same data would have been consumed, but small-batch training is the safer choice when your labels are noisy, because more, noisier updates average out label error better than fewer, sharper ones.

Warmup is 32,000 steps — exactly 4% of training — then linear decay to zero. Nothing exotic. The point of listing these is that nothing in the recipe is exotic: this is a standard transformer training configuration from 2020, applied to a novel data source. Again, the innovation is not here.

What a replication would cost today

Useful for calibrating whether this is a frontier-lab result or a lab-scale one.

ResourcePaper (2022–23)Modern equivalent
Compute16 × V100 32 GB, daysA few contemporary accelerators for a comparable time — the FLOP count is small by current standards
Data60,000 h LibriLightFreely available — LibriLight is a public benchmark corpus
TokenizerEnCodec 24 kHz, 6 kbpsOpen-source and pre-trained; no work required
AlignerKaldi hybrid on LibriSpeech 960hStandard recipe, or an off-the-shelf forced aligner
Hardest partNothing in that list is a barrier. Which is exactly why open reproductions appeared within months, and why the release decision discussed in Chapter 10 could not contain the capability.

What the scale bought

Three capabilities, none of which was designed in, all of which the paper attributes to data volume and diversity.

And what it did not buy. The paper's own Data coverage limitation: "Even if we use 60K hours of data for training, it still cannot cover everyone's voice, especially accent speakers. The worse result on VCTK than LibriSpeech also implies insufficient coverage of accent speakers. Moreover, the diversity of speaking styles is not enough, as LibriLight is an audiobook dataset, in which most utterances are in reading style." Scale bought coverage along the axes the corpus varies on — speaker identity, recording condition, read-aloud prosody — and bought nothing along the axes it does not: regional accents, conversational speech, interruptions, overlapping talkers, non-English. Chapter 9's VCTK-versus-LibriSpeech gap is that limitation showing up as a number.

One more thing scale did not fix, and this is the important one: robustness. The dropped and duplicated words of Chapter 10 are not a data-coverage failure. They are a consequence of unconstrained autoregressive alignment, and more data does not remove them — the paper's own future-work sentence proposes architectural fixes ("applying non-autoregressive models or modifying the attention mechanism"), not more hours. Knowing which failures scale cures and which it does not is the difference between a research plan and a hope.

VALL-E is a 12-layer, 150M-parameter model — small even for 2023. Where was the bet placed, and why does that matter?

Chapter 9: Results — What the Numbers Actually Say

Eight chapters of machinery. Now the evidence. This chapter reports every number the paper publishes, and then does the thing summaries skip: normalizes them against the ground-truth ceiling, so that "better than the baseline" becomes "closed 58% of the gap to a real human recording."

What would have counted as failure

Before the numbers, decide what would have falsified the paper's claims. Doing this first is the difference between reading results and being persuaded by them.

ClaimWhat would have refuted itDid it happen?
Zero-shot cloning worksSpeaker similarity near the GSLM level (0.126), or near the baseline's 0.337No — 0.580
The discrete objective is not paid for in qualityWER worse than YourTTS's 7.7, or naturalness clearly below baselineNo — 5.9 and CMOS +0.12
Noisy data is tolerableAudible noise or reverberation on clean prompts — the corpus leaking into every outputNot reported as an issue; environment tracks the prompt instead
Both conditioning channels matterAn ablation where removing one changes nothing, or where both move the same metricNo — a clean double dissociation
It generalizes beyond the training domainCollapse on a different corpusPartially yes — VCTK is markedly weaker, and the paper says so

Four claims survive their falsification tests and one is partially refuted, by the paper's own evidence, and named as a limitation. That is the profile of an honest empirical paper, and it is worth registering before reading the numbers that follow.

How everything was measured

Read the instruments before the readings, because two of the four are subjective and one is not strictly comparable across systems.

MetricInstrumentRangeWhat to distrust
SPK — speaker similarityWavLM-TDNN, the SOTA speaker-verification model; top of the VoxSRC 2021 and 2022 leaderboards, with equal error rates of 0.383 / 0.480 / 0.986 on Vox1-O / Vox1-E / Vox1-H[−1, 1], higher betterIt is a verification model — it scores "same person?", which is not identical to "sounds like the same person to a listener."
WER — word error rateASR on the generated audio: HuBERT-Large fine-tuned on LibriSpeech 960h, CTC-based, no language-model fusion%, lower betterNo LM fusion is the right choice (an LM would paper over dropped words) but it makes absolute WERs higher than a product system would report.
SMOS — similarity opinion score6 native speakers, crowdsourced1–5 in 0.5 stepsSix raters. Confidence intervals of ±0.09–0.10 are reported and should be respected.
CMOS — comparative opinion score12 native speakers, side-by-side against VALL-E−3 to +3 in steps of 1Comparative, so VALL-E is pinned at 0.00 by construction. The sign convention: negative means worse than VALL-E.

The LibriSpeech protocol: samples from test-clean between 4 and 10 seconds long, giving a 2.2-hour subset, with no speaker overlap against LibriLight. For each synthesis, "VALL-E randomly choose another utterance of the same speaker and crop a 3-seconds speech segment as the enrolled speech." Each experiment was run three times and averaged. The baseline is YourTTS, the SOTA zero-shot TTS system, from its released checkpoint.

Why two datasets and not one

The choice of LibriSpeech and VCTK is not padding, and understanding why makes the two results readable as a pair rather than a repetition.

LibriSpeech test-cleanVCTK
Relationship to training datasame domain (LibriVox audiobooks), disjoint speakersdifferent domain — different accents, different recording setup, different content
What it testsspeaker generalizationspeaker and domain generalization
Baseline's advantagenone — YourTTS did not train on itlarge — YourTTS trained on 97 of the 108 speakers
Sentence lengthlonger (4–10 s samples used)shorter
What the results tell youthe capability, near its best casethe capability's edge

Reporting only LibriSpeech would have been the flattering choice and would have supported every headline claim. Including VCTK is what makes the data-coverage limitation visible — and the paper does draw that conclusion from it, in its own limitations section, rather than leaving it for a critic.

LibriSpeech, objective

ModelTypeWER ↓SPK ↑
Ground truthreal recordings2.20.754
GSLMspeech-to-speech12.40.126
AudioLM*speech-to-speech6.0not evaluable
YourTTSTTS baseline7.70.337
VALL-ETTS5.90.580
VALL-E-continualTTS3.80.508

Two asterisks on that table before reading it. AudioLM's WER of 6.0 is the number reported in its own paper, obtained with a Conformer Transducer ASR model, not the HuBERT-CTC model used for every other row — so it is indicative, not a like-for-like comparison. And AudioLM's speaker score is blank because "AudioLM* is not open-source, we cannot evaluate its speaker score with our tool."

Now the readings, with the gap-to-ceiling arithmetic done explicitly.

Word error rate. 7.7 → 5.9 = 1.8 points absolute, 23.4% relative reduction.
Remaining gap to ground truth: 5.9 − 2.2 = 3.7 points.

Speaker similarity. 0.337 → 0.580 = +0.243, a 72% relative gain.
Fraction of the baseline-to-ceiling gap closed:
(0.580 − 0.337) / (0.754 − 0.337) = 0.243 / 0.417 = 58.3%

GSLM's row is the argument of Chapter 1 made numerical. Speaker similarity 0.126 — barely above chance on a [−1, 1] scale — because HuBERT codes were trained to discard exactly the attribute being measured. And WER 12.4, the worst in the table, which the paper attributes to VALL-E being "trained with pseudo-phoneme instead of HuBERT/w2v-BERT codes, which enjoys better alignment quality with the input text." Text conditioning is worth roughly 6.5 WER points against a system that has to infer content from audio latents alone.

Objective metrics done; now the human studies, which are the ones the abstract's headline numbers come from.

LibriSpeech, human

Forty test cases — one randomly sampled utterance per speaker in test-clean.

SystemSMOS (similarity) ↑CMOS vs VALL-E (naturalness)
YourTTS3.45 ± 0.09−0.12
VALL-E4.38 ± 0.100.00 (reference)
Ground truth4.5 ± 0.10+0.17

The SMOS result is the strongest number in the paper, and normalizing makes it obvious:

(4.38 − 3.45) / (4.5 − 3.45) = 0.93 / 1.05 = 88.6% of the gap to real recordings, closed
VALL-E's confidence interval (±0.10) overlaps ground truth's lower bound (4.40).

Human raters, listening to a synthesized voice they have never heard, judged it nearly as similar to the target speaker as an actual recording of that speaker — from three seconds of enrolment, with no fine-tuning. On naturalness the picture is honest rather than triumphant: ground truth is still preferred by +0.17 CMOS, so listeners can tell.

LibriSpeech is the in-domain test. VCTK is the out-of-domain one, and the difference between the two is where this chapter's most useful finding lives.

Read the two datasets as a pair; either alone gives a misleading picture of the capability.

VCTK — the harder test, and the deliberately unfair one

VCTK has 108 speakers, none seen by VALL-E. YourTTS, however, trained on VCTK and saw 97 of them. So the paper reports two splits: all 108 speakers (where the baseline has a large advantage) and the 11 speakers YourTTS also never saw (the fair comparison).

SplitSystem3 s prompt5 s prompt10 s prompt
108 full speakersYourTTS* (saw 97)0.3570.3770.394
VALL-E (saw 0)0.3820.4230.484
Ground truth0.5460.5910.620
11 unseen speakersYourTTS0.3310.3370.344
VALL-E0.3890.3800.414
Ground truth0.5280.5560.586

The paper's reading: "VALL-E outperforms the baseline even if the baseline has seen 97 speakers in training… When we compare with the baseline in a fair setting (11 speakers), the performance gap becomes larger, especially when only 3s prompts are available."

Now normalize, and the story becomes considerably more interesting than "we win."

Gap-to-ceiling closed, 108 speakers:
3 s: (0.382 − 0.357) / (0.546 − 0.357) = 0.025 / 0.189 = 13.2%
10 s: (0.484 − 0.394) / (0.620 − 0.394) = 0.090 / 0.226 = 39.8%

Compare LibriSpeech: 58.3% closed — with only a 3-second prompt.

On LibriSpeech, a three-second prompt closes 58% of the gap. On VCTK, three seconds closes 13% and it takes ten seconds to reach 40%. Something about VCTK is materially harder, and the paper names it: "In terms of speaker similarity, VCTK is more challenging as it contains speakers with various accents while the training data and LibriSpeech test data do not contain various accent speakers."

That is Chapter 8's data-coverage limitation appearing as a measurement. LibriLight is LibriVox: predominantly American-accented volunteer readers. VCTK is a British corpus spanning Scottish, Irish, Northern English, and other accents. Sixty thousand hours of one accent distribution does not teach you another one, and no amount of clever prompting recovers coverage the corpus never had.

SystemSMOS ↑CMOS vs VALL-E
YourTTS* (saw 49 of these 60)3.70 ± 0.09−0.23
VALL-E (saw none)3.81 ± 0.090.00
Ground truth4.29 ± 0.09−0.04

The headline here is the last cell. Ground truth scores −0.04 against VALL-E — listeners rated real human recordings very slightly less natural than the synthesis, a difference well inside noise. The paper's phrasing is appropriately restrained: "demonstrating no statistically significant difference from human recordings on this dataset."

And it immediately supplies the deflationary explanation rather than leaving the claim to inflate: "Compared to the evaluation results on LibriSpeech, VALL-E shows a better CMOS score in the comparison with ground truth, which is mainly because the average sentence length is shorter and some of the ground truth utterances also have noisy environments in VCTK." Shorter sentences give the autoregressive model fewer opportunities to drift, and some of VCTK's real recordings are themselves imperfect. This is the paper grading its own best result down, which is the behaviour you want to see.

Note also the SMOS normalization: (3.81 − 3.70) / (4.29 − 3.70) = 0.11 / 0.59 = 18.6% of the gap closed, against 88.6% on LibriSpeech. Naturalness matched human recordings on VCTK; similarity did not come close. Cloning an accent you have never heard is a different problem from producing a natural-sounding voice.

Results explorer — every table, normalized

Switch between the paper's evaluations. Bars show the raw scores; the marker on each bar is the ground-truth ceiling for that condition, and the readout gives the fraction of the baseline-to-ceiling gap that VALL-E closes. That last number is the one that makes LibriSpeech and VCTK comparable.

LibriSpeech word error rate. VALL-E 5.9 against YourTTS 7.7, with ground truth at 2.2.

Two conventions before the human-evaluation tables, because both are counterintuitive. CMOS is reported relative to VALL-E, so VALL-E's own row is always exactly 0.00 and a negative number means the other system was judged worse. SMOS is absolute on a 1–5 scale, so higher is better and the numbers are comparable across rows.

How to read a CMOS number without over-reading it

CMOS causes more misreadings than any other number in speech papers, so slow down on it. The scale runs from −3 ("the new system is much worse than baseline") to +3 ("much better"), in intervals of 1. A rater cannot express 0.12. They pick an integer, and 0.12 is the average of many integers.

So a CMOS of +0.12 means something like: most raters said "about the same" (0), and a modest surplus said "slightly better" (+1) rather than "slightly worse" (−1). With 12 raters, that is a real but subtle preference. Concretely, if every rater scored 0 or ±1, an average of +0.12 is consistent with roughly one net rater in eight preferring VALL-E.

Reported CMOSHonest verbalization
+0.12 (LibriSpeech, vs YourTTS)A slight, consistent preference for VALL-E
+0.23 (VCTK, vs YourTTS)A clearer but still sub-"slightly better" preference
+0.17 (LibriSpeech, ground truth over VALL-E)Listeners can still tell real recordings apart, slightly
−0.04 (VCTK, ground truth vs VALL-E)Indistinguishable. Not "better than human" — noise around zero

The paper gets this right — it says "no statistically significant difference," not "surpasses human recordings" — and it volunteers the reason VCTK flatters the model. That restraint is worth noticing precisely because the number would have made a much louder headline if stated carelessly.

SMOS deserves a matching caution. Six raters, on a 1–5 scale in 0.5 steps, with reported intervals of ±0.09–0.10. VALL-E's 4.38 ± 0.10 and ground truth's 4.5 ± 0.10 have overlapping intervals: the honest statement is "close to indistinguishable," not "equal."

WER is a robustness proxy, and a lossy one

The paper uses word error rate as its robustness measure. It is the right family of metric and the wrong resolution, for three reasons worth understanding before treating 5.9 as a quality score.

The measurement that is missing. For a system whose named failure mode is "words may be unclear, missed, or duplicated," the natural metric is a per-utterance failure rate: what fraction of syntheses contain at least one dropped or duplicated word? That number determines whether the system is deployable, and it is not in the paper. Aggregate WER of 5.9 is compatible with "every utterance is slightly rough" and with "one utterance in fifteen is broken," and those two worlds have completely different product implications.

The comparison that is not fair, and the one that is

Two asymmetries run in opposite directions and largely cancel, but you should track them separately rather than trusting the cancellation.

AsymmetryDirectionWhere it bites
YourTTS trained on 97 of VCTK's 108 speakers; VALL-E on nonefavours the baselineThe 108-speaker VCTK table. The paper handles it by also reporting the 11-speaker fair split.
VALL-E trained on 60,000 h; YourTTS on VCTK + LibriTTS + TTS-Portuguesefavours VALL-EEverywhere. This is not a controlled comparison of architectures — it is a comparison of systems, and the data difference is the paper's whole thesis.
AudioLM's WER from a different ASR modelunknownTable 2's AudioLM row. The paper flags it.
GSLM and AudioLM are speech-to-speech, not TTSfavours VALL-EThey solve a harder content-control problem with a weaker content channel.

None of this is misconduct — every asymmetry is disclosed in the paper's own text. But "VALL-E beats YourTTS" is a claim about two complete systems, and the interesting question, "would the VALL-E architecture beat the YourTTS architecture on equal data?", is not answered anywhere. Given that the paper's thesis is the data is the contribution, that unanswered question is arguably the point rather than an oversight.

The number to quote if you only quote one. Not 5.9, and not 0.580. Quote 88.6% — the fraction of the human-judged similarity gap between the previous best system and a real recording that VALL-E closed, from three seconds of a stranger, with no fine-tuning. It is the number that survives normalization, it comes from human raters rather than a proxy model, and it is the one the paper's abstract is really about.

Three qualitative findings that no metric captures

Diversity. Because generation is sampling, the same input produces different outputs. The paper synthesizes each utterance twice with different random seeds and plots the waveforms (Figure 4). On the LibriSpeech sample "After early nightfall, the yellow lamp would light up here and there the squalid quarter of the brothels," the two takes "have different lengths and phrase durations, where the first has a faster speech rate." On the VCTK sample "I must do something about it," the accents differ: "The second output emphasizes the word 'must' with a larger amplitude whereas the first output does not."

The paper then makes an argument that is easy to miss and genuinely useful: this makes VALL-E a good pseudo-data generator for speech recognition. ASR training benefits from varied speakers and acoustic conditions, which a one-to-one regression TTS cannot supply. "Considering the diversity feature of VALL-E, it is an ideal candidate to generate pseudo-data for speech recognition." Chapter 1's temperature knob, cashed out as a data-augmentation pipeline.

Acoustic environment maintenance. "When the acoustic prompt has reverberation, VALL-E could synthesize speech with reverberation as well, whereas the baseline outputs clean speech." No reverberation parameter exists anywhere in the system. The room came in through the prompt's tokens and left through the decoder, because nothing in the pipeline was ever instructed to remove it.

Emotion maintenance. Prompts drawn from EmoV-DB, a database of five emotions: "VALL-E is able to keep the same emotion of the prompt in speech synthesis, even if the model is not fine-tuned on an emotional TTS dataset." Compare the classical approach the paper cites — train on a labelled emotional TTS corpus with an emotion label per utterance. VALL-E has no emotion labels, no emotion embedding, and no emotional fine-tuning, and transfers emotion zero-shot.

The pattern across all three. Reverberation, emotion, and speaking rate were never modelled. They are not features; they are things the tokenizer failed to discard and the language model therefore learned to continue. This is the same mechanism that produced voice cloning in Chapter 4, applied to three more attributes. Any property preserved by EnCodec and present in 60,000 hours of audio is, automatically, a property VALL-E can transfer from a prompt. That is an unusually generous kind of generality — and Chapter 10 shows it is also exactly why the system is dangerous.

One structural observation about the results section as a whole: every headline claim is supported by both an objective metric and a human study, and where the two disagree the paper reports both rather than choosing. That is worth noting because it is rarer than it should be, and it is why the normalized comparisons in this chapter are possible at all.

Reading the diversity figure carefully

Figure 4 is two waveform plots per sentence, one per random seed, and it is easy to under-read as "the outputs differ, how nice." The paper points at two specific differences, and each is a distinct capability.

SampleWhat differs between the two seedsWhat that demonstrates
LibriSpeech: "After early nightfall, the yellow lamp would light up here and there the squalid quarter of the brothels.""the two samples have different lengths and phrase durations, where the first has a faster speech rate"Duration is sampled, not predicted. There is no duration model to be deterministic. Chapter 4's implicit-length argument, observed.
VCTK: "I must do something about it.""the accents of the two samples are different. The second output emphasizes the word 'must' with a larger amplitude"Prosodic emphasis placement varies. The model is sampling an interpretation of the sentence, not just jittering acoustics.

The second row is the more interesting claim. Different emphasis is a different reading of the sentence — "I must do something" versus "I must do something" — which is a semantic-adjacent choice that a regression model, outputting the conditional mean, must average away into flatness. Chapter 0's over-smoothing derivation predicted exactly this, and here it is on the other side.

Pseudo-data for ASR — is the argument any good?

The paper claims VALL-E "is an ideal candidate to generate pseudo-data for speech recognition." Take it seriously for a moment, because it is a nontrivial argument with a real weakness.

The case for: ASR training benefits from variation in speaker, rate, environment, and prosody. VALL-E supplies all four — unlimited speakers via prompting, sampled rate and prosody, and environment inherited from prompts. A regression TTS system supplies none of them; synthesizing a million utterances gives you a million near-identical deliveries of different sentences.

The case against, which the paper does not raise: the pseudo-data is generated by a model trained on machine-generated labels from an ASR system. There is a loop — ASR labels the audio, the TTS model learns from those labels, and the TTS output is then used to train ASR. Any systematic error in the original aligner is at risk of being reinforced rather than corrected, because it now appears in the audio itself rather than only in the labels.

The honest position. The diversity argument is sound and the closed-loop concern is real, and neither is measured. No ASR-trained-on-VALL-E-data experiment appears in the paper — the claim is a suggestion, not a result. Filing it under "plausible and untested" is the correct treatment, and it belongs on Chapter 10's open-questions list.

What does 0.580 actually mean?

Speaker-similarity scores are the least intuitive numbers in the paper because the scale has no natural anchors. Build some.

WavLM-TDNN outputs a cosine similarity in [−1, 1] between speaker embeddings. Two things fix the scale for this evaluation:

AnchorScoreWhat it is
Ground truth (LibriSpeech)0.754Two different real recordings of the same person. This is the practical ceiling — even a human speaking twice does not score 1.0.
GSLM0.126Effectively a different speaker. The tokenizer erased identity.
YourTTS0.337Some identity captured through a speaker embedding.
VALL-E0.580Between the baseline and the ceiling, closer to the ceiling.

The ceiling being 0.754 rather than 1.0 is the crucial anchor and the reason raw scores mislead. A naive reading of "0.580 out of 1.0" says 58% of the way there. The correct reading uses 0.754 as the top and 0.337 as the incumbent, which is why every comparison in this chapter is normalized. Absolute cosine similarities are meaningless without the same-speaker ceiling reported alongside them — and the paper does report it, which is good practice.

One methodological detail supports the numbers: "Each experiment runs three times and the average score is reported." Three runs average out sampling variance, which matters because VALL-E's output is stochastic by design. It does not control for the choice of enrolment clip, which is randomly drawn per sample and is plausibly a larger source of variance — a three-second window containing a rich phoneme inventory is worth more than three seconds of one drawn-out vowel.

Restating the results for a colleague

If you had sixty seconds to convey what was measured, this is the shape of it — and being able to produce this summary from memory is a decent test of the chapter.

Last framing note before the summary table. This chapter has separated three things that headlines usually merge: what was measured, what it means once normalized against a ceiling, and how strongly the evidence supports the claim attached to it. The table below keeps them separate.

The honest scoreboard

ClaimEvidenceStrength
Beats SOTA zero-shot TTS on speaker similaritySPK 0.580 vs 0.337; SMOS +0.93; wins on VCTK even against a baseline that trained on 97 of the speakersStrong — large margins, two datasets, objective and subjective agree
Beats SOTA on naturalnessCMOS +0.12 (LibriSpeech), +0.23 (VCTK)Moderate — real but small; CMOS steps are 1.0, so a 0.12 average is a subtle preference
Matches human recordingsSMOS 4.38 vs 4.5 with overlapping intervals; CMOS −0.04 vs ground truth on VCTKQualified — true on VCTK, and the paper itself explains why VCTK flatters it
Preserves emotion and environmentdemo-page samples, EmoV-DB promptsAnecdotal — no metric, no ablation, no numbers. Believable and unquantified
More robust than speech-to-speech LMsWER 5.9 vs GSLM 12.4, AudioLM 6.0Suggestive — AudioLM's number comes from a different ASR model

Notice the row that is missing: there is no robustness metric beyond aggregate WER, and no measurement at all of how often words are dropped or duplicated. Chapter 10 opens with the failure mode the paper concedes in prose but never counts.

VALL-E closes 58.3% of the baseline-to-ground-truth speaker-similarity gap on LibriSpeech but only 13.2% on VCTK with a 3-second prompt. What explains the difference?

Chapter 10: Limits, Safety, and What Came Next

The paper's final section is titled "Conclusion, Limitations, and Future Work," and it is unusually direct. Three technical limitations, one paragraph on broader impacts. This chapter takes all four seriously — the failure modes first, because they follow mechanically from decisions we have already derived, then the safety question, which is the reason this paper is remembered outside the speech community.

The limitations, ranked by how much they mattered

The paper lists three. With hindsight they did not age equally, and ranking them is a useful exercise before the details.

RankLimitationHow it aged
1Latency (unlisted — see below)Became the defining problem of the next generation. Everything after 2024 is about making speech models interactive.
2Synthesis robustnessDirectly attacked by successors and largely improved — but it required architectural change, exactly as the paper predicted.
3Data coverageImproved by scaling and by multilingual corpora. The paper's own prescription worked.
4Model structure (two models)Least consequential. Successors did unify, but for elegance and latency rather than because two models were failing.

The interesting entry is the one that is not on the paper's list. Papers are good at naming the limitations that show up in their own metrics and less good at naming the ones their evaluation protocol never measures. Latency was never measured here, so it was never listed — and it turned out to be the axis the field moved along.

Limitation 1: synthesis robustness

The paper: "We observe that some words may be unclear, missed, or duplicated in speech synthesis. It is mainly because the phoneme-to-acoustic language part is an autoregressive model, in which disordered attention alignments exist and no constraints to solving the issue."

Nothing in that sentence should surprise you, because Chapters 3 and 4 built the cause.

Chapter 3
No duration model. Phonemes and acoustic frames are two blocks of one flat sequence, with nothing enforcing a correspondence between them.
Chapter 4
Ordinary causal self-attention. Every acoustic token may attend to every phoneme, in any pattern. Nothing enforces monotonic, left-to-right consumption of the text.
Chapter 10
If attention re-anchors on a phoneme it already produced → duplication. If it jumps forward past one → deletion. If it spreads across two → slurring. No mechanism prevents any of these.

The classical TTS pipelines had defences. FastSpeech has an explicit duration predictor and a length regulator: each phoneme is told how many frames it gets, and the decoder cannot disobey. Tacotron 2 has location-sensitive attention that is biased toward advancing monotonically. Both trade expressiveness for a guarantee. VALL-E has neither, and the paper's future-work sentence proposes importing them back: "which was addressed by applying non-autoregressive models or modifying the attention mechanism in modeling. In the future, we would like to leverage these techniques to solve the issue."

Note what the paper does not do: it never counts the failures. There is no deletion rate, no duplication rate, no per-utterance failure analysis — only aggregate WER, which folds all three error types plus ASR error into one number. A WER of 5.9 against ground truth's 2.2 tells you 3.7 points of something went wrong; it does not tell you whether that is one catastrophic utterance in twenty or a light dusting of slurred consonants everywhere. For a system being proposed for production use, that is a real gap in the evaluation.

The alignment lab — where dropped and duplicated words come from

The grid is the implicit alignment between phonemes (down) and generated acoustic frames (across). At zero disorder the attention path is a clean monotonic staircase and every word is spoken once. Raise the disorder — which is what high sampling temperature and long utterances do in practice — and watch the path stall (a word is repeated), jump (a word is skipped), or smear (a word slurs). The transcript and error count update live.

Monotonic alignment: every phoneme consumed exactly once, in order. WER 0%.

One structural detail the lab makes visible: the failures are not uniformly distributed. They cluster where the path is already unstable — long utterances, unusual phoneme sequences, and high temperature. That is why VALL-E-continual scores 3.8 WER against plain VALL-E's 5.9: three of its seconds are ground-truth audio, so the model has fewer frames in which to lose its place, and it starts from a state that is by construction correctly aligned.

Why the failures cluster

One more property of the robustness limitation, visible in the lab above and easy to miss: errors are not sprinkled uniformly. They arrive in bursts, and the reason is compounding.

Once the AR model's implicit alignment slips — say it has produced the acoustics for "confirmed" but its internal sense of position still points at "is" — every subsequent token is generated from a state that encodes the error. The model is not confused about one frame; it is confused about where it is in the sentence, and that confusion persists until something re-anchors it.

ConsequenceWhy it follows
Failures are utterance-level, not frame-levelAn alignment slip contaminates everything after it
Longer utterances fail more oftenMore steps, more chances to slip, and more room to compound after slipping
Aggregate WER understates the user experienceOne broken utterance in fifteen reads as "5.9% WER" and as "unusable" to a listener
The continual setting helps disproportionatelyIt starts from a correctly-aligned real prefix and generates 30% less audio

This is why Chapter 9 argued that a per-utterance failure rate is the metric this system actually needed. Bursty, compounding errors and a smooth aggregate average are a bad match, and the aggregate is the only thing published.

Limitation 2: data coverage

"Even if we use 60K hours of data for training, it still cannot cover everyone's voice, especially accent speakers. The worse result on VCTK than LibriSpeech also implies insufficient coverage of accent speakers. Moreover, the diversity of speaking styles is not enough, as LibriLight is an audiobook dataset, in which most utterances are in reading style."

Chapter 9 quantified it: 58.3% of the similarity gap closed on LibriSpeech, 13.2% on VCTK at the same prompt length. The paper's response is more of the same medicine — "we will further scale up the training data" — and then a genuinely bold prediction: "We believe the zero-shot TTS task could be almost solved through our approach with model and data scale-up."

Worth pausing on how that prediction aged. On the narrow reading — read-aloud English TTS with high speaker similarity — it was broadly right; successors reported human-parity results within eighteen months. On the broad reading — speech is solved — it was not, because the frontier moved to problems scale does not touch: latency, interruption handling, and simultaneous listening-and-speaking. The last section of this chapter is about that.

Limitation 3: model structure

"Now, we use two models to predict codes of different quantizers. A promising direction is to predict them with a large universal model. Another interesting direction is using full NAR models to speed up model inference in the framework."

Two separate wishes. Unifying the models is an elegance argument: two transformers with separate parameters, separate training runs, and separate embedding conventions is a lot of machinery for one distribution. Going fully non-autoregressive is the latency argument — Chapter 5's ledger showed VALL-E at roughly 1.5× slower than real time, with 99.1% of the latency in the AR phase.

And Chapter 5 also showed why the second wish is hard: fully-NAR requires knowing T in advance, which requires a duration predictor, which the paper rejected because "it is hard to train a length predictor for different speakers." You cannot remove the AR model without re-solving the problem it was introduced to solve. Later systems escape by changing the frame rate rather than the decoder — if the codec runs at 12.5 Hz instead of 75 Hz, ten seconds is 125 steps rather than 750, and the AR bottleneck shrinks by 6× without giving up implicit duration modelling.

The safety chapter

The paper's Broader Impacts paragraph, in full: "Since VALL-E could synthesize speech that maintains speaker identity, it may carry potential risks in misuse of the model, such as spoofing voice identification or impersonating a specific speaker. To mitigate such risks, it is possible to build a detection model to discriminate whether an audio clip was synthesized by VALL-E. We will also put Microsoft AI Principles into practice when further developing the models."

Four sentences. Take them seriously, because the capability described in this lesson is genuinely different from what came before, and the difference is worth stating precisely.

Prior voice cloningVALL-EWhy the difference matters
Minutes to hours of the target's clean audio3 seconds, any qualityThree seconds exists for nearly everyone: a voicemail, a video, a call recording, a podcast, a hold-music greeting.
A fine-tuning run per speakerNo training at allNo GPU, no ML expertise, no per-target cost. Cloning becomes an API call.
A stored per-speaker checkpoint1,800 integersA cloned voice is 2.25 KB. It fits in a text message and cannot be meaningfully controlled by restricting model weights.
Clean, neutral studio deliveryEmotion and room preservedChapter 9's environment and emotion transfer means the output can be made to match the acoustic signature of a real call or room — the cues a listener uses to judge authenticity.

The mitigation offered — "it is possible to build a detection model" — is worth examining rather than accepting, because it is the standard proposal and it has known weaknesses.

Context the paper does not contain, marked as such. Microsoft did not release VALL-E's weights or code. What was published was the paper and a demo page of samples. That is a real decision with real consequences — it is the reason the method was widely reproduced from the description rather than downloaded — but it is a fact about the organization's release practice, not a claim in the paper, and this lesson does not attribute it to the authors. Read the Broader Impacts paragraph for what it is: an acknowledgement of risk and a gesture at a technical mitigation, published alongside a full method description that anyone could implement.

What would a stronger mitigation stack look like? Not one thing, and not detection alone:

LayerMechanismWhat it actually buys
Consent at enrolmentVerified enrolment — the speaker records a challenge phrase live, rather than the system accepting arbitrary audioPrevents cloning from found audio. The single most effective control, and it constrains the product, not the model.
WatermarkingAn imperceptible signal embedded at generation time and detectable afterwardsAttribution rather than detection: proves this system made it. Survives mild processing; can be stripped by a determined adversary.
Provenance signingCryptographic signatures on capture devices and content credentials on distributionShifts the question from "is this fake?" to "can this prove it is real?" — a strictly easier question to answer correctly.
Anti-spoofing in verificationVoice-biometric systems adding liveness and replay detectionDirectly addresses the paper's named risk — spoofing voice identification — at the point where it is exploited.
Post-hoc detectionThe paper's proposalUseful for forensics and platform moderation. Weakest of the five when used alone.

The general lesson generalizes past speech. When a capability's cost falls by three orders of magnitude — hours of clean audio and a training run, to three seconds and an API call — controls that relied on the cost being high stop working, and controls have to be rebuilt around consent and provenance instead. That transition is the interesting engineering problem, and it is not a machine-learning problem.

Limitation 4, unlisted: latency

The paper's own list has three entries. Add a fourth that it does not name, because with hindsight it turned out to be the one that mattered most.

Chapter 7's dependency analysis showed that no audio can be decoded until the AR phase has finished, because the NAR passes need the complete first-codebook layer. Time-to-first-audio therefore equals total generation time, which Chapter 5 estimated at roughly 1.5× real time.

ApplicationLatency requirementVALL-E as published
Audiobook / voiceover renderingnone — offline batchfine
Screen reader, navigation promptsa few hundred ms per phrasemarginal; short utterances only
Voice assistant reply< 500 ms to first audiono — the whole sentence must generate first
Full-duplex conversation with barge-in≈ 200 ms, and it must listen while speakingstructurally impossible

The last row is not a matter of degree. A duplex system must model its own output and the user's speech simultaneously, and must be able to abandon a partially-spoken utterance mid-word. VALL-E generates one complete utterance from a fixed text; there is no point at which it is listening, and no mechanism for stopping early that is not "throw away what you generated."

That gap is why the voice-interface line of work after 2023 did not simply scale VALL-E. It rebuilt the substrate: a lower-frame-rate codec so the AR chain is short enough to run live, a semantically-distilled first codebook so the coarse layer carries content as well as acoustics, and parallel streams so listening and speaking coexist. VALL-E proved speech is a language; the next generation had to make that language fast enough to have a conversation in.

Limitation 5, unlisted: the evaluation

Chapter 9 catalogued the gaps; collect them here as a single honest ledger, because "what was not measured" is part of understanding a paper.

Missing measurementWhy it matters
Codec round-trip baselineGround truth is real audio, but VALL-E's ceiling is EnCodec at 6 kbps. Without the round-trip row, part of the remaining gap is charged to the model rather than the vocabulary.
Per-utterance failure rateThe named failure mode is discrete (dropped/duplicated words) but the only metric is continuous and aggregate.
Perplexity / bits per tokenThe natural intrinsic metric for a language model, and the natural way to quantify what each conditioning signal contributes.
Emotion and environment transfer, quantifiedReported as demo-page observations. An emotion classifier on generated audio, or a reverberation-time estimate, would have made these into results.
LatencyNot reported at all, despite the AR/NAR split being justified on speed grounds.

Notice that the AR/NAR trade — the paper's central architectural claim — is argued entirely from complexity analysis (O(T) → O(1)) and never measured in seconds. Chapter 5's ledger had to derive the numbers because the paper does not report them.

The deployment questions this capability forces

If you were reviewing a product built on this method, the technical questions are not the hard ones. These are:

That last point is the one to carry out of this chapter. This is not a safety problem caused by a model behaving unexpectedly. It is a capability whose ordinary, correct operation is the hazard — which means the controls cannot live in the model, and a detection classifier is not a control at all, only a forensic aid.

The lineage — what VALL-E started

The reframe in Chapter 1 turned out to be the durable contribution. Once speech is tokens, everything the language-model ecosystem knows applies: prompting, scaling, instruction tuning, multimodal fusion, streaming. The systems that followed all inherit the substrate and attack a different one of VALL-E's limitations.

The codec-language-model family tree

Tap a node to see what it inherited from VALL-E and what it changed. The horizontal axis is roughly time; the vertical axis is what the system does with the token substrate.

VALL-E (2023): TTS as conditional codec language modelling. AR for codebook 1, NAR for 2-8, 3-second acoustic prompt, 60K hours.

Three inheritances, three attacks:

Follow the arc here: EnCodec built the vocabulary · AudioLM proved a language model over it could generate speech · VALL-E added text control and prompting · Moshi made it conversational in real time. On the Gleam side, TTS architectures covers the cascaded systems this paper displaced, neural audio codecs derives RVQ from zero, and Whisper is the mirror image — the same weak-supervision-at-scale bet, pointed at recognition instead of synthesis.

The arc, on one timeline

Placing VALL-E among its neighbours makes the pace of the period visible — and makes clear how little separated the pieces from each other.

WhenWhatThe missing piece it supplied
2016WaveNetAutoregressive audio generation is possible — at 24,000 steps per second
2018–2019Tacotron 2, FastSpeech, speaker encodersThe mel-cascade era, and the adaptation methods VALL-E displaces
2021GSLM, HuBERT unitsLanguage modelling over discrete speech tokens — without the speaker
2022 (Jul)SoundStream / EnCodec line maturesA tokenizer that keeps everything and ships a decoder
2022 (Sep)AudioLMHierarchical LM over codec tokens; speech-to-speech
2022 (Dec)WhisperThe same scale-over-clean-data bet, for recognition
2023 (Jan)VALL-EText conditioning + 60K hours → zero-shot TTS with in-context learning
2023–2024VALL-E X, VALL-E 2, and a wave of codec-LM TTS systemsCross-lingual synthesis; robustness fixes; open reproductions
2024–Moshi and the omni modelsLow frame rates, streaming, full duplex — the latency limitation attacked directly

Six months separate AudioLM from VALL-E, and one component — a phoneme channel — separates them architecturally. That is a useful thing to notice about research: the decisive addition is often small, and it is decisive because of what it makes possible (control, prompting, evaluation against text) rather than because of what it adds computationally.

Open questions this paper leaves

A good measure of whether a paper has been understood is whether you can state what it did not settle. Six, ordered from most tractable to most open.

QuestionWhy it is openHow you would answer it
How much of the 3.7-point WER gap is the codec's and how much is the model's?No codec round-trip baseline was reportedScore EnCodec-6kbps reconstructions of the ground truth with the same ASR model. One afternoon of work.
What fraction of utterances contain a dropped or duplicated word?Only aggregate WER is publishedAlign generated transcripts to references and count deletions and insertions per utterance.
How much does each conditioning signal reduce perplexity?No intrinsic metrics reported at allBits-per-token with and without x, with and without C̃ — the information-theoretic version of the ablations.
Does the AR/NAR split beat a flat AR model at equal compute?Never compared — the split is justified by complexity analysis onlyTrain a flattened baseline at matched FLOPs and compare quality and latency.
How many speakers are actually needed for in-context learning to emerge?Only one data point (7,000) existsSubsample the corpus by speaker count at fixed hours and find the knee.
Does zero-shot cloning degrade gracefully or sharply outside the training distribution?VCTK shows degradation but not its shapeEvaluate along controlled axes: accent, age, pathological voices, non-English.

Notice how many of these are cheap. That is characteristic of a paper whose contribution is a reframing rather than an optimization — the reframing is the hard part, and the measurement backlog it creates is large and mostly straightforward.

How to check this lesson's derived claims

Several numbers here were derived rather than quoted, and you should be able to reconstruct each in a minute. Nothing below requires a GPU.

Derived claimReconstruction
750 frames for 10 s24,000 × 10 / 320 — also stated in the paper
6 kbps and 64× compression75 × 8 × 10 = 6,000 bps; 24,000 × 16 = 384,000 bps; ratio 64
280 entries for a single codebook8 codebooks × 10 bits = 80 bits per frame
757 sequential passes, 7.93 tokens per pass750 + 7; 6,000 / 757
≈151 M trunk parameters12 × (4 × 10242 + 2 × 1024 × 4096)
53 MiB KV cache12 × 2 × 1,132 × 1,024 × 2 bytes
≈4.74 epochs16 × 6,000 × 800,000 divided by 60,000 × 3,600 × 75
58.3% / 13.2% gap closure(VALL-E − baseline) / (ground truth − baseline) on Tables 2 and 6
≈3.1 WER points attributable to the AR stage5.9 (Table 5) − 2.8 (Table 4, ground-truth layer 1)

Anything not in that list and not attributed to the paper is flagged in the text as reasoning or estimation — the latency figures in Chapter 5, the FLOP estimate in Chapter 8, the prompt-hygiene predictions in Chapter 6, and the per-codebook content assignment in Chapter 5. Keep the boundary between measured and inferred sharp; it is the difference between knowing the paper and having a feeling about it.

Cheat sheet — every symbol, every number

SymbolMeaningTypical value
ywaveform24 kHz float
x = {x0…xL}phoneme sequence (pseudo-labels from a DNN-HMM aligner)L ≈ 120 for 10 s
C = Encodec(y)acoustic code matrixint[T × 8], 0…1023
Tframes = 75 × seconds750 for 10 s
c:,1first codebook layer — the AR model's whole outputint[750]
c:,j∈[2,8]residual layers — the NAR model's output7 × int[750]
acoustic prompt from the enrolmentint[225 × 8] for 3 s
θAR, θNARthe two separate parameter sets≈152 M, ≈160 M
AdaLN(h, i)ai·LayerNorm(h) + bi — stage conditioningi ∈ [2, 8]
NumberValueWhere it came from
Sample rate / frame rate24,000 Hz / 75 HzEnCodec, 320× downsampling
Codebooks × entries8 × 1,024the 6 kbps operating point
Bitrate / compression6 kbps / 64×75 × 8 × 10 bits; vs 384 kbps raw
Sequential passes for 10 s757 = 750 + 7Chapter 5's ledger; 7.93× better than flat AR
Training data60,000 h, ≈7,000 speakersLibriLight, unlabelled
Training budget16 V100s · 6k tokens/GPU · 800k steps≈4.74 epochs, ≈7.0×1019 FLOPs (derived)
Model shape12 layers, 16 heads, d = 1024, dff = 4096≈151 M in the trunk
LibriSpeech WER / SPK5.9 / 0.580 (GT 2.2 / 0.754)Table 2
LibriSpeech SMOS / CMOS4.38 (GT 4.5) / +0.12 vs YourTTSTable 3
VCTK SPK at 3/5/10 s0.382 / 0.423 / 0.484Table 6, 108 speakers
AR ablationSPK 0.585 → 0.236, WER unchangedTable 5 — the double dissociation
NAR ablationWER 19.6 → 3.0 → 2.8; SPK 0.518 → 0.541 → 0.732Table 4
The mastery test. You should now be able to, on a whiteboard: derive why 8 codebooks of 1,024 beat one codebook of 280; write Equations 1–3 and say what each conditioning term does; explain why the AR model gets one codebook of the prompt and the NAR model gets eight; compute 757 from T and J and explain what licenses the 7; state the double dissociation and what it proves; and name which of VALL-E's failures more data would fix and which it would not. If any of those is shaky, the chapter that builds it is one tab away.

One closing thought about why this paper matters more than its metrics. The contribution is not the AR/NAR split — that is a good engineering trade worth 7.93×. The contribution is the demonstration that a whole subfield's central constraint was self-imposed by its loss function. Text-to-speech required clean studio data because regression required clean targets. Change the objective, and sixty thousand hours of noisy audiobooks — free, already recorded, sitting on a server — become the best training set anyone had. That move is available in more places than speech, and looking for it is a better habit than memorizing this architecture.

Which of VALL-E's limitations would not be fixed by scaling the training data further?