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.
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.
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.
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.
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."
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.
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:
| Family | Mechanism | What it costs you |
|---|---|---|
| Speaker adaptation | Fine-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 encoding | A 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.
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 representation | mel spectrogram | audio codec code |
| Objective function | continuous signal regression | language model |
| Training data | ≤ 600 hours | 60K hours |
| In-context learning | no | yes |
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.
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.
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 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.
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.
"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
Differentiate and set to zero, showing every step because the conclusion depends on it:
The optimum is 2.0 — a half-energy vowel onset that neither take contains. And the residual loss at that optimum is not zero:
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
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.
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.
| Regime | Weights change? | Target audio needed | Time to first output | Per-speaker artifact |
|---|---|---|---|---|
| Full fine-tuning | all of them | minutes to hours, clean | hours | a whole model |
| Parameter-efficient adaptation | a small subset (AdaSpeech-style) | minutes, clean | minutes | a small delta |
| Few-shot / meta-learned | a few gradient steps (Meta-TTS: 5-shot) | seconds to a minute | seconds to minutes | a small delta |
| Zero-shot (speaker encoding) | none | ≈3 s | immediate | one embedding vector |
| Zero-shot (VALL-E) | none | ≈3 s, any quality | immediate | 1,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.
It is worth being blunt about why the 600-hour ceiling existed, because it was not a technical limit. It was a budget.
| Cost line | Studio TTS corpus | LibriLight-style corpus |
|---|---|---|
| Recording | booked studio, engineer, paid voice talent, retakes | zero — the audio already exists |
| Transcription | human transcription and verification, per utterance | zero — an ASR model generates pseudo-labels |
| Segmentation and cleaning | manual or semi-manual, with rejection of noisy takes | automatic cropping; nothing is rejected |
| Speakers | each one is a separate hiring and recording effort | ≈7,000, free |
| Marginal cost of the 601st hour | hundreds 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.
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.
| Era | Intermediate | Why it was chosen | Why it was abandoned |
|---|---|---|---|
| Concatenative (1990s–2000s) | Recorded diphone units | Real human audio, so the timbre is perfect | Joins are audible; a new voice means recording a whole new unit database |
| Statistical parametric (2000s) | Vocoder parameters (F0, spectral envelope, aperiodicity) | Compact, controllable, small footprint | Buzzy vocoded quality — the parameterization discards too much |
| Neural cascaded (2016–2022) | Mel spectrogram | Perceptually aligned, easy for a CNN/RNN to regress | Continuous regression → over-smoothing, clean-data requirement, no prompting |
| Self-supervised units (2021–) | HuBERT / vq-wav2vec k-means codes | Discrete at last, and semantically rich | They deliberately discard speaker identity — and need a separately trained vocoder |
| Neural codec codes (VALL-E) | EnCodec RVQ tokens | Discrete 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.
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.
| Clause | What it is actually claiming | Chapter |
|---|---|---|
| "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.
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… | Read | Why |
|---|---|---|
| The idea, in twenty minutes | 0, 1, 7, 10 | The problem, the reframe, the showcase, the honest limits. Skips the derivations. |
| To implement it | 2, 3, 4, 5, 7 | Vocabulary, objective, both decoders, and the full inference loop with shapes. |
| To review or teach it | all, in order | Every 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.
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.
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
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.
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.
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.
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.
Three attempts, three partial answers. Assemble them into a specification.
| Representation | Vocabulary | Steps for 10 s | Keeps the speaker? | Comes with a decoder? |
|---|---|---|---|---|
| Raw 16-bit PCM | 65,536 | 240,000 | yes (it is the audio) | trivially |
| µ-law (WaveNet) | 256 | 240,000 | yes | trivially |
| HuBERT / vq-wav2vec units | ~100–1000 | ~500 | no | no — needs a trained vocoder |
| Mel spectrogram | continuous | ~800 frames | yes | needs a vocoder |
| EnCodec RVQ codes | 1024 per codebook | 750 frames × 8 | yes | yes — 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.
How much does 320× downsampling actually buy? Do it in full, because the number is larger than intuition suggests.
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.
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:
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:
Now T = 0.5. Divide every logit by 0.5 first, giving [6, 4, 2, 0]:
And T = 2, logits [1.5, 1.0, 0.5, 0]:
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.
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.
| Use | Why determinism fails |
|---|---|
| Long-form narration | A 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 ASR | Training a recognizer on a million identical deliveries teaches it one delivery. Chapter 9 makes this argument explicitly. |
| Re-rolling a bad take | If 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. |
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.
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.
| Inherited | What it does here | Chapter |
|---|---|---|
| Decoder-only transformers | The AR model is architecturally a small GPT | 4 |
| KV caching | Turns the 750-step generation loop from O(T2) into O(T) | 4 |
| Sampling and temperature | Output diversity, and the fix for beam-search degeneracy | 1, 4 |
| Prompting / in-context learning | Zero-shot voice cloning — the headline capability | 6 |
| Weight tying | Logits as similarity in embedding space; a smoothness prior for free | 4 |
| Scaling practice | Warmup, AdamW, linear decay — nothing speech-specific in the recipe | 8 |
| Perplexity as a diagnostic | Available in principle — though the paper does not use it | 3 |
| Infilling and editing | Speech editing appears in Figure 1's application list | 3 |
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.
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.
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.
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.
| Strategy | Rule | Behaviour on codec tokens |
|---|---|---|
| Greedy / argmax | always take the top token | Deterministic, and prone to the same degeneracy that breaks beam search — sustained sounds sustain forever. |
| Beam search | keep the k highest-likelihood sequences | The paper's reported failure: "may lead the LM into an infinity loop." Maximizing sequence likelihood favours never stopping. |
| Temperature sampling | sharpen or flatten, then draw | What VALL-E uses. Low T → safe and flat; high T → expressive and unstable. |
| Top-k | renormalize over the k most likely tokens | Truncates the tail, which removes catastrophic tokens while keeping local variation. A natural robustness lever. |
| Nucleus (top-p) | keep the smallest set with cumulative mass p | Adapts 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.
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.
| Region | Cross-take variance | Effect of averaging |
|---|---|---|
| Middle of a sustained vowel | low | negligible — the takes agree |
| Vowel onset / offset | high | smeared attack, softened transitions |
| Stop consonant release (/p/, /t/, /k/) | very high — a few milliseconds of timing shifts everything | the burst is averaged into mush |
| Word boundaries and pauses | high | indistinct 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%.
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.
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.
| Representation | Steps per second | Bits per step | Bits per second | Attention entries for 10 s |
|---|---|---|---|---|
| Raw 16-bit PCM at 24 kHz | 24,000 | 16 | 384,000 | 5.76 × 1010 |
| µ-law 8-bit at 24 kHz | 24,000 | 8 | 192,000 | 5.76 × 1010 |
| HuBERT units at 50 Hz | 50 | ≈9 | ≈450 | 2.5 × 105 |
| EnCodec 8×1024 at 75 Hz | 75 frames (600 tokens) | 80 per frame | 6,000 | 5.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.
Chronology is useful here because it shows the idea converging from several directions at once.
| Attempt | Idea | What it got right | What was missing |
|---|---|---|---|
| WaveNet (2016) | Autoregressive over µ-law samples — genuinely a language model of audio | The 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 model | Discreteness, 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 + WaveGlow | The 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 LM | Nearly 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.
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.
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.
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.
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.
| Quantity | Value | Where it comes from |
|---|---|---|
| Sample rate | 24,000 Hz | EnCodec's operating point in this paper |
| Downsampling factor | 320× | the encoder's stride product |
| Frame rate | 75 Hz | 24,000 / 320 — one frame every 13.33 ms |
| Quantizers (codebooks) | 8 | the 6 kbps operating point the paper chose |
| Entries per codebook | 1,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.
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:
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.
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:
Codebook 1 (four entries, learned during EnCodec's training — here just given):
| Index | Vector |
|---|---|
| 1 | e1 = [ 1.00, 0.00, 0.00 ] |
| 2 | e2 = [ 0.00, 1.00, 0.00 ] |
| 3 | e3 = [ 0.60, −0.60, 0.00 ] |
| 4 | e4 = [ −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:
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:
(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.
| Index | Vector |
|---|---|
| 1 | f1 = [ 0.25, 0.25, 0.10 ] |
| 2 | f2 = [ −0.30, 0.10, 0.20 ] |
| 3 | f3 = [ 0.10, −0.20, 0.30 ] |
| 4 | f4 = [ 0.35, 0.05, −0.15 ] |
Stage 2. Same procedure, but the input is r1, not v:
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:
The signal energy is ‖v‖2 = 0.81 + 0.16 + 0.04 = 1.01. Track the error as a fraction of it:
| After stage | Reconstruction | Squared error | Fraction of signal energy | Energy removed by this stage |
|---|---|---|---|---|
| 0 (nothing) | [0, 0, 0] | 1.0100 | 100.00% | — |
| 1 (codebook 1) | [0.60, −0.60, 0.00] | 0.1700 | 16.83% | 83.17 pp |
| 2 (codebook 2) | [0.85, −0.35, 0.10] | 0.0150 | 1.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."
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
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.
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.
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.
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:
| Quantizers | Bits per frame | Bitrate | Matrix for 10 s | NAR calls VALL-E would need |
|---|---|---|---|---|
| 1 | 10 | 0.75 kbps | 750 × 1 | 0 |
| 2 | 20 | 1.5 kbps | 750 × 2 | 1 |
| 4 | 40 | 3.0 kbps | 750 × 4 | 3 |
| 8 | 80 | 6.0 kbps | 750 × 8 | 7 |
| 16 | 160 | 12.0 kbps | 750 × 16 | 15 |
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.
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.
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.
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.
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."
| Object | Symbol | Shape / type | Meaning |
|---|---|---|---|
| Waveform | y | float[24,000 × sec] | the audio itself |
| Code matrix | C = Encodec(y) | int[T × 8], values 0…1023 | T = 75 × sec |
| One frame | ct,: | int[8] | the 8-deep token stack for 13.33 ms |
| One codebook layer | c:,j | int[T] | the j-th quantizer across all time — a sequence |
| 3-second prompt | C̃ | int[225 × 8] = 1,800 ints | the enrolled recording, tokenized |
| 10-second target | C | int[750 × 8] = 6,000 ints | what 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.
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.
A dataset D = {xi, yi} of paired examples. For each pair:
| Symbol | What it is | Concrete shape |
|---|---|---|
| y | an audio sample — the waveform | float array at 24 kHz |
| x = {x0, x1, …, xL} | its phoneme transcription | int[L+1], indices into a small phoneme inventory |
| C = Encodec(y) | the acoustic code matrix | int[T × 8], values 0…1023 |
| ct,: | the row vector: eight codes for frame t | int[8] — one 13.33 ms slice, all depths |
| c:,j | the column vector: the code sequence from the j-th codebook | int[T] — one depth, all time |
| C̃ | the acoustic prompt matrix, from the enrolled recording | int[T′ × 8], T′ = 225 for 3 s |
| Decodec(C) ≈ ŷ | the frozen decoder turning codes back into audio | float array at 24 kHz |
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̃)."
Three symbols, and each carries a distinct job:
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.
"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:
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.
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.
| Component | Status | Why |
|---|---|---|
| EnCodec encoder | frozen | Off the shelf. It defines the vocabulary; changing it would change what the tokens mean. |
| EnCodec decoder | frozen | Also off the shelf. It is the vocoder, and it already works. |
| DNN-HMM aligner | frozen (trained separately on 960 h) | Used once, offline, to produce pseudo-labels. Not part of the model. |
| AR model θAR | trained | 800k steps, its own run |
| NAR model θNAR | trained | 800k 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.
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.
| # | Scheme | Sequential steps (T = 750) | Why it is tempting | Why it loses |
|---|---|---|---|---|
| 1 | Flatten everything. Read the grid row by row into one long sequence of 8T tokens and run a plain decoder-only LM over it. | 6,000 | Maximum 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. |
| 2 | Eight heads, one step. At each time step, predict all eight codes at once from eight output heads. | 750 | Cheapest 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. |
| 3 | Fully non-autoregressive. Predict the entire grid in parallel from x and C̃. | 1 | Fastest 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." |
| 4 | Hierarchical AR + NAR (VALL-E). Autoregress codebook 1; then non-autoregressively fill codebooks 2–8, each conditioned on all shallower ones. | 757 | Respects 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 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.
Scheme 4 in symbols — this is the paper's Equation 3, and it is the whole model:
Read it left to right as a generation procedure, and notice four things the equation quietly tells you:
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:
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:
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.
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.
Before more symbols, say Equation 3 out loud as a procedure. If you can narrate this without looking, you have the model.
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.
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.
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:
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:
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.
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.
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.
Compare the supervision density against the era's TTS practice, because this is a quiet reason the scale bet works.
| System | Per 10-second utterance | Loss terms |
|---|---|---|
| Mel-regression TTS | 80 mel bins × ≈800 frames | 64,000 real-valued regression targets — but heavily redundant and smooth |
| VALL-E AR model | 750 first-codebook tokens | 750 categorical predictions over 1,024 classes |
| VALL-E NAR model | 750 tokens for one randomly chosen stage per step | 750 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.
Be precise about the shape of the probability model, because three natural requests are outside it.
| Request | Expressible? | Why |
|---|---|---|
| "Say this in this voice" | yes | exactly p(C | x, C̃) |
| "Say this at 1.2× speed" | no | There 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) | no | Emotion 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" | partially | Figure 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.
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.
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.
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?
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.
| Term | What it is | Length | Predicted or given? |
|---|---|---|---|
| x | phoneme sequence — at inference, the enrolled transcript then the target text, concatenated | L ≈ 150 for 3 s + 10 s | given |
| c̃:,1 | first-codebook layer of the enrolled 3 s | 225 | given (the acoustic prefix) |
| c<t,1 | everything the model has already generated | 0 … T−1 | predicted, then fed back |
| ct,1 | the next first-codebook token | 1 integer in 0…1023 | predicted |
The paper: "It comprises a phoneme embedding Wx, an acoustic embedding Wa, a transformer decoder, and a prediction layer."
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.
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:
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.
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.
"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.
| Token | Absolute index in the sequence | Position value the model receives |
|---|---|---|
| x0 (first phoneme) | 0 | 0 |
| x155 (last phoneme) | 155 | 155 |
| 〈EOSphn〉 | 156 | 156 |
| c̃0,1 (first prompt frame) | 157 | 0 — the counter restarts |
| c̃224,1 (last prompt frame) | 381 | 224 |
| c0,1 (first generated frame) | 382 | 225 — 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.
"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 position | May attend to | Effect |
|---|---|---|
| a phoneme xi | x≤i | the text block is causally masked within itself too — it is one flat sequence, not an encoder |
| an acoustic token ct,1 | all of x, plus c≤t,1 | full access to the text, causal access to the audio so far |
| the prompt tokens c̃:,1 (inference only) | all of x, plus themselves causally | they 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.
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.
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.
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:
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.
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.
"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.
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 cache | With cache | |
|---|---|---|
| Work at step t | full pass over t positions | one position's worth, plus attention against t cached keys |
| Total for T steps | O(T2) position-passes | O(T) position-passes |
| Memory | none extra | 2 × 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.
One inference, end to end. Enrolled clip 3 s; target sentence ten seconds long.
| Stage | Tensor | Shape | Note |
|---|---|---|---|
| enrolled phonemes | xprompt | int[36] | ≈12 phonemes/s × 3 s |
| target phonemes | xtarget | int[120] | from G2P on the input text |
| concatenated + EOS | x | int[157] | 36 + 120 + 1 |
| phoneme embeddings | Wx[x] | float[157, 1024] | plus its own sinusoidal positions |
| enrolled audio → codes | C̃ | int[225, 8] | the AR model uses column 1 only: int[225] |
| acoustic prefix embeddings | Wa[c̃:,1] | float[225, 1024] | positions restart at 0 here |
| step-t transformer input | h | float[157 + 225 + t, 1024] | grows by one vector per step |
| step-t logits | WaThlast | float[1024 + 1] | 1024 codes + 〈EOS〉; softmax, sample |
| final output | c:,1 | int[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:
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.
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:
Because the output layer is Wa, the logit for token k is just h · (row k). Four dot products, every term shown:
Softmax at temperature 1:
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.
"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-task | What it requires | Where it shows up |
|---|---|---|
| Text–audio alignment | Knowing which phoneme in x the current frame corresponds to, with no alignment supervision at inference | Failure → dropped and duplicated words (Chapter 10) |
| Duration | How many frames this phoneme gets, given the speaker's rate and the prosodic context | Chapter 9's diversity figure: two takes with different phrase durations |
| Prosody continuation | Continuing the pitch contour and stress pattern established by the prompt | The 0.585 → 0.236 collapse when the prefix is removed (Chapter 6) |
| Speaker continuation | Keeping timbre and voice quality stable over 750 frames | Speaker similarity; degrades over long utterances |
| Stopping | Calibrating p(〈EOS〉) so the utterance ends when the text is exhausted | The 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.
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.
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.
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 handling | Bidirectional encoder; decoder cross-attends | Text is a causally-masked prefix of the same sequence |
| Alignment | Explicit cross-attention map, often constrained to be monotonic | Implicit, unconstrained, inside self-attention |
| Prompting | Awkward — audio conditioning must enter through a separate channel | Natural — the prompt is just earlier tokens |
| Inherited tooling | Speech-specific | Everything from text LMs: KV caching, sampling, scaling recipes, infilling |
| Cost | Text encoded once | Text 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.
The paper gives the hyperparameters but not a parameter count, so derive it. Per transformer layer, with d = 1024 and dff = 4096:
(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.
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:
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.
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.
"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.
The paper writes the input construction as two steps. First, look up each code in its own table (⊙ denotes index selection):
Then — and this is the load-bearing step — add them up:
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.
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.
For the enrolled recording, the paper sums over all eight codebooks:
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, ec̃, ec:,<i), with positional embeddings again computed separately for the prompts and the acoustic sequence:
| Segment | Content | Shape | Where it comes from |
|---|---|---|---|
| ex | phoneme embeddings | float[L, 1024] | the text — content conditioning |
| ec̃ | prompt, summed over all 8 codebooks | float[225, 1024] | the enrolled voice — speaker conditioning |
| ec:,<i | generated audio, summed over codebooks 1…i−1 | float[750, 1024] | what has been built so far — depth conditioning |
| total | one bidirectional sequence | float[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.
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:
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 on | Extra parameters | Problem |
|---|---|---|
| Seven separate NAR models | ≈ 7 × 160 M = 1.1 B | No sharing — each model sees one-seventh of the training signal |
| A "stage token" prepended to the sequence | ≈ 8 × 1024 | Weak: 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.
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 model | NAR model | |
|---|---|---|
| Predicts | c:,1 | c:,2 … c:,8 |
| Sequential along | time | depth |
| Attention mask | causal | bidirectional |
| Embedding tables | 1 | 8 |
| Prompt depth received | 1 codebook | 8 codebooks |
| Stage conditioning | none needed | AdaLN on i |
| Decoding | sampling | greedy |
| Passes per utterance | T (= 750) | 7 |
| Decides T? | yes, via 〈EOS〉 | no — inherits it |
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.
| Component | Parameters | Note |
|---|---|---|
| Transformer trunk (12 layers) | 150,994,944 | identical shape to the AR model |
| Eight acoustic embedding tables | 8 × 1024 × 1024 = 8,388,608 | one per codebook — the type-safety cost |
| Seven prediction layers | 0 | tied to embedding tables 2–8 — free |
| Stage embedding + AdaLN projections | ≈ 1 M | 8 stages → scale and shift per normalization site |
| Phoneme embedding | small | a few hundred entries × 1024 |
| Total | ≈ 160 M | vs ≈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.
"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.
e_curr is built from the real C, never from the model's own predictions. This is teacher forcing across depth, and it creates the same exposure-bias exposure that Chapter 4 named across time: at inference, layer 5 conditions on the model's own layers 1–4. The mitigating factor is that the chain is 7 long, not 750.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:
| Layer | What the paper's evidence implies | Which result says so |
|---|---|---|
| 1 | Phonetic identity, prosody, rate, speaker trajectory — 84% of the reconstruction energy and effectively all of the voice | Chapter 2's residual walk; the AR ablation (SPK 0.585 → 0.236) |
| 2–4 | Enough spectral detail that intelligibility depends on it — getting these wrong garbles words even with a perfect layer 1 | NAR-no-prompt WER of 19.6 with ground-truth layer-1 input |
| 5–8 | Fine texture: high-frequency detail, breathiness, the last few percent of reconstruction error | The 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.
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 symptom | Observed? |
|---|---|---|
| Adjacent frames' residuals would be inconsistent | Frame-rate buzz or roughness — a 75 Hz artifact | Not reported; the paper's samples are judged natural (SMOS 4.38) |
| Long-range residual structure would be lost | Timbre drifting over an utterance | Speaker similarity is high, so not badly |
| The model would need time-conditioning to hit good WER | NAR WER floor well above the AR model's | NAR-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.
"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.
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.
| Objection | Severity |
|---|---|
| Seven times the parameters (≈1.1 B instead of 160 M) and seven times the storage | annoying but affordable |
| Seven separate training runs and seven sets of hyperparameters to babysit | real engineering cost |
| Each model sees only its own stage's data — one-seventh of the gradient signal, with no transfer between stages | decisive |
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.
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.
| Capability | Why it needs bidirectional attention |
|---|---|
| Coarticulation from the right | How 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 consistency | Timbre 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 detail | The 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.
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 t | NAR stage i | |
|---|---|---|
| What the index means | how much noise remains | how much residual remains |
| Direction of travel | coarse → fine as t decreases | coarse → fine as i increases |
| Conditioning operator | AdaLN / FiLM on the timestep embedding | AdaLN on the stage embedding — the same operator |
| Number of steps | tens to hundreds, and tunable | exactly 7, fixed by the codec |
| Output type | continuous, refined by subtraction | discrete, chosen by argmax over a codebook |
| Can you trade steps for quality? | yes — fewer steps, worse samples | yes, 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.
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.
Isolate the part the NAR model is responsible for, because that is where the paper's O(T) → O(1) claim lives:
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.
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:
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):
| Scheme | Sequential steps | Illustrative wall clock | Real-time factor for 10 s of audio |
|---|---|---|---|
| Flatten and autoregress | 6,000 | ≈ 120 s | 12× 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 s | 20× faster than real time — but needs a length predictor |
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.
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.
Inference construction, spelled out for both models. Nothing here is learned at inference time; it is all sequence assembly.
| Model | Phoneme conditioning | Acoustic conditioning | Decoding |
|---|---|---|---|
| AR | transcript of the enrolled clip, concatenated with the target text — one sequence x | c̃:,1 as a literal prefix of the generated sequence — 225 tokens | sampling |
| NAR | the same x | ec̃ = sum over all 8 codebooks — a separate 225-position segment | greedy |
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.
Count the bits. Three seconds at 75 Hz is 225 frames; eight codebooks of 10 bits each:
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 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.
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-E | VALL-E-continual | |
|---|---|---|
| Enrolled clip | a different utterance by the same speaker, cropped to 3 s | the first 3 seconds of the target utterance itself |
| Phoneme prompt | transcript of that different utterance, prepended to the target text | the whole transcription of the target utterance |
| Task | say something new in this voice | finish the sentence you started |
| Semantic relation | none — the prompt is unrelated content | continuous — the prompt flows into the output |
| LibriSpeech WER | 5.9 | 3.8 |
| LibriSpeech SPK | 0.580 | 0.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.
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 conditioning | WER ↓ | SPK ↑ | Reading |
|---|---|---|---|
| no prompt at all | 19.6 | 0.518 | Given perfect codebook-1 tokens it still garbles the words. The residual layers are not passengers. |
| + phoneme prompt | 3.0 | 0.541 | WER falls by 85%. SPK barely moves. |
| + phoneme and acoustic prompt | 2.8 | 0.732 | WER 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 conditioning | WER ↓ | SPK ↑ |
|---|---|---|
| VALL-E (full) | 5.9 | 0.585 |
| w/o acoustic prompt | 5.9 | 0.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.
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.
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.
"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.
| Attribute | Copied? | Evidence |
|---|---|---|
| Timbre / vocal tract identity | yes | SPK 0.580 vs YourTTS 0.337 (Chapter 9) |
| Speaking rate and rhythm | yes | The AR model inherits rate from the prefix — Chapter 4's implicit duration argument |
| Pitch range and contour style | yes | Implied by the 0.585 → 0.236 ablation: identity lives in the layer-1 trajectory |
| Room acoustics / reverberation | yes | Explicitly reported: reverberant prompt → reverberant output |
| Emotional state | yes | EmoV-DB prompts preserve emotion zero-shot |
| Recording channel (mic, codec artifacts) | presumably | Same mechanism as room acoustics; not separately measured |
| Content | no | That is x's job — and the double dissociation proves the channels are separate |
| Accent | partially | The 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 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 — prefix | NAR — reference | |
|---|---|---|
| Depth used | codebook 1 only | all 8, summed |
| Bits | 2,250 | 18,000 |
| Position in the sequence | occupies the generated stream's own positions | a separate segment with its own positional embeddings |
| Is it continued? | yes — generation literally extends it | no — it is attended to, never extended |
| Constructed at training time? | no — every prefix is implicitly a prompt | yes — a random 3 s window is drawn |
| Removing it costs | SPK 0.585 → 0.236 | SPK 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.
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.
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:
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 defect | Predicted effect | Mechanism |
|---|---|---|
| Two speakers overlapping in the clip | Blended or unstable identity | The tokens encode both; nothing separates them, and the model continues whatever mixture it is given |
| Heavy background music | Music continues into the output | Same mechanism that copies reverberation — the model cannot distinguish "environment" from "signal" |
| Clip cut mid-word | The generated speech may begin mid-articulation | The AR model continues the acoustic trajectory it is handed, and a truncated phoneme is a trajectory in flight |
| Wrong transcript for the enrolment | Loss of phoneme/frame registration at the generation boundary | The model has learned that x and the acoustic sequence advance together |
| Prompt at a very different sample rate | Systematic pitch/timbre error | EnCodec 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.
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 length | YourTTS* (saw 97 of these speakers) | VALL-E (saw none) | Ground truth ceiling |
|---|---|---|---|
| 3 s | 0.357 | 0.382 | 0.546 |
| 5 s | 0.377 | 0.423 | 0.591 |
| 10 s | 0.394 | 0.484 | 0.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.
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.
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.
| Consideration | Prompting (VALL-E) | Fine-tuning (prior art) |
|---|---|---|
| Time to a new voice | milliseconds — tokenize and prepend | minutes to hours of training |
| Storage per voice | 1,800 integers (2.25 KB) | a checkpoint or an adapter delta |
| Quality ceiling | bounded by what 3–10 s of evidence supports | higher, given enough clean target audio |
| Behaviour on out-of-distribution voices | degrades smoothly (VCTK accents) | can adapt into the gap, if you have data |
| Serving | one model, all voices, batchable together | one model per voice — a serving nightmare at scale |
| Revocation | none — the "voice" is the audio someone holds | delete 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.
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:
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.
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 model | ground-truth codebook-1 tokens | the AR model's generated tokens |
| What is varied | which prompts the NAR model was trained with | whether the AR model gets an acoustic prefix at inference |
| NAR configuration | three separately trained models | fixed at NAR-2-prompts |
| Best WER shown | 2.8 | 5.9 |
| Why the numbers differ | Table 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.
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.)
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.
Before operating the machine, one consolidated statement of what it is doing, with the chapter each piece came from.
| Piece | What it is | From |
|---|---|---|
| The alphabet | EnCodec RVQ tokens: 75 Hz, 8 codebooks, 1,024 entries, 6 kbps | Ch 2 |
| The objective | max p(C | x, C̃), factorized AR over time then NAR over depth | Ch 3 |
| The content channel | x — phonemes, worth 16.6 WER points | Ch 3, 6 |
| The identity channel | C̃ — 225 frames, worth 0.349 speaker similarity through the AR prefix alone | Ch 6 |
| The expensive decoder | AR, causal, sampled, 750 passes, decides T | Ch 4 |
| The cheap decoder | NAR, bidirectional, greedy, 7 passes, AdaLN-conditioned | Ch 5 |
| The output | 750 × 8 integers → frozen decoder → 240,000 samples | Ch 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.
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.
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.
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 shows | Reality | Why the distortion |
|---|---|---|
| 26–46 columns | 975–1,500 frames | Individual cells would be sub-pixel. The ratios — prompt fraction, AR versus NAR cost — are exact. |
| The NAR phase taking visible time | 7 passes against 750 | At 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 bright | Layer 1 dominates perceptually | Uniform 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.
Compute the prompt fractions yourself so the slider means something. Target utterance ten seconds = 750 frames in every case:
And the total token accounting for the standard case — 3-second prompt, ten-second output:
| Quantity | Count | Where it comes from |
|---|---|---|
| Prompt tokens given | 225 × 8 = 1,800 | EnCodec on the enrolment |
| Tokens the AR model generates | 750 | one per sequential step |
| Tokens the NAR model generates | 750 × 7 = 5,250 | seven parallel passes |
| Total generated | 6,000 | = T × 8, the whole matrix |
| Sequential forward passes | 757 | 750 + 7 — Chapter 5's ledger |
| Tokens per sequential pass | 6,000 / 757 = 7.93 | the effective parallelism of the design |
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.
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.
| Moment | What exists | Sequential passes used |
|---|---|---|
| t = 0, before anything | x (157 phonemes + EOS), C̃ (225 × 8 integers). No generated audio. | 0 |
| After pass 1 | One new integer in layer 1. It sounds like nothing; a single 13.33 ms frame at 0.75 kbps. | 1 |
| After pass 75 | One second of coarse structure. The model has committed to a speaking rate. | 75 |
| After pass 450 | Six 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 751 | All 750 tokens of codebook 2, at once. | 751 |
| Passes 752–757 | Codebooks 3 through 8, one pass each. | 757 |
| Decode | 750 × 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.
Not the structure, only the ratio — and the ratio is why short-form synthesis is a much better fit for this design.
| Utterance | T | AR passes | NAR passes | Total | Tokens per pass |
|---|---|---|---|---|---|
| 2 seconds | 150 | 150 | 7 | 157 | 7.64 |
| 10 seconds | 750 | 750 | 7 | 757 | 7.93 |
| 30 seconds | 2,250 | 2,250 | 7 | 2,257 | 7.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.
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 quantity | Physical meaning | Arithmetic |
|---|---|---|
| 1 column | 13.33 ms | 1 / 75 s; 320 samples at 24 kHz |
| 1 phoneme | ≈6 columns | 750 frames / ≈120 phonemes (Chapter 3) |
| 1 syllable | ≈15–20 columns | ≈200–270 ms of speech |
| The 3-second prompt | 225 columns | 3 × 75 |
| A 200 ms conversational turn gap | 15 columns | the 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.
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.
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.
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.
| Configuration | Frames for 10 s | Codebooks | Sequential passes | Tokens per pass |
|---|---|---|---|---|
| VALL-E as published | 750 (75 Hz) | 8 | 757 | 7.93 |
| EnCodec at 12 kbps | 750 | 16 | 765 | 15.7 |
| Flat AR baseline | 750 | 8 | 6,000 | 1.00 |
| A 12.5 Hz codec (Mimi-style) | 125 | 8 | 132 | 7.58 |
| A 12.5 Hz codec, fully NAR | 125 | 8 | 8 | 125 |
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.
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.
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.
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.
Run these deliberately. Each one is a claim from an earlier chapter, made checkable.
| Do this | Watch for | Which 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.
The simulation is a teaching device, but each control corresponds to a real degradation you could measure. Predict the outcome before you drag.
| Experiment | What the design predicts | Grounded in |
|---|---|---|
| Temperature → 0 | Deterministic 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 → high | Erratic durations, misplaced emphasis, and eventually dropped or duplicated words — the AR failure mode, amplified. | Chapter 10's limitations |
| Truncate to 4 codebooks | Audible 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.
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.
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 model | Scale the data | |
|---|---|---|
| What it costs | compute, memory, serving latency | acquisition, storage, and a tolerance for noise |
| What it buys | capacity to fit what you already have | coverage of what you do not |
| When it helps | when the model is underfitting | when the model has never seen the case |
| Zero-shot speaker generalization | does not help — you cannot memorize a voice you have not heard | directly 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.
| Property | LibriLight | What it means for the model |
|---|---|---|
| Total audio | 60,000 hours | ≈ 6.8 years of continuous speech |
| Distinct speakers | ≈ 7,000 | ≈ 8.6 hours per speaker on average |
| Labels | none | audio only — transcripts must be generated (Chapter 3) |
| Domain | audiobooks (LibriVox readings) | read speech, mostly literary prose, mostly clean-ish but uncontrolled |
| Language | English | the model is monolingual; VALL-E X later extends this |
| Average utterance | 60 seconds | far 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:
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.
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.
| Setting | Value | Why it is what it is |
|---|---|---|
| Architecture (both models) | 12 layers, 16 heads, d = 1024, dff = 4096, dropout 0.1 | head dimension 1024/16 = 64, the standard choice |
| Hardware | 16 × NVIDIA Tesla V100 32 GB | two nodes of eight — a modest cluster even for 2022 |
| Batch | 6,000 acoustic tokens per GPU | 96,000 per optimizer step across the cluster |
| Steps | 800,000 | per model; the AR and NAR models are trained separately |
| Optimizer | AdamW | decoupled weight decay — the transformer default |
| Schedule | warm up 32,000 steps to a peak of 5 × 10−4, then linear decay | warmup is 4% of training |
| Input cropping | random window between 10 s and 20 s | LibriLight utterances average 60 s — too long to train on whole |
| NAR acoustic prompt | a random 3-second segment from the same utterance | the 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.
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.
Now the training budget:
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.
| Reading | Utterances per GPU per step | Verdict | Implied epochs |
|---|---|---|---|
| A: 6,000 = individual integers (all 8 codebooks) | 6,000 / (1,125 × 8) = 0.67 | Impossible — you cannot batch two-thirds of an utterance | 0.59 |
| B: 6,000 = frames (i.e. codebook-1 positions) | 6,000 / 1,125 = 5.3 | Sensible — a small but normal batch | 4.74 |
Reading B it is. So:
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.
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):
(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.
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.
"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 TTS | Codec language model | |
|---|---|---|
| What the target looks like | a mel spectrogram with reverb smeared across it | a token sequence that decodes to reverberant audio |
| What the model learns | the conditional mean — 5% of a reverb tail, applied to everything | that this kind of prefix is followed by this kind of continuation |
| Effect on clean synthesis | degraded — a faint smear everywhere | none — prompt with clean audio, get clean audio |
| New capability | none | reverberant 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.
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:
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:
The paper describes its data as "semi-supervised," which in speech usually means something specific and is worth unpacking against the alternatives.
| Regime | What you have | Example |
|---|---|---|
| Supervised | audio with human transcripts | LibriSpeech 960h, LibriTTS |
| Self-supervised | audio only; the objective is constructed from the audio itself | wav2vec 2.0, HuBERT masked-unit prediction |
| Semi-supervised (VALL-E) | audio only, plus a model trained on a small labelled set to generate pseudo-labels | 960 h of real labels bootstraps 60,000 h of machine labels |
| Weakly supervised | audio with noisy, human-produced labels of uncertain quality | Whisper'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.
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 field | ASR needed in-domain fine-tuning to be robust | TTS needed studio data and per-speaker adaptation |
| The constraint being removed | label cleanliness | audio cleanliness |
| The move | 680,000 h of noisy web audio-transcript pairs | 60,000 h of unlabelled audio with pseudo-labels |
| The architecture | a plain encoder-decoder transformer | a plain decoder-only transformer (×2) |
| The claim | zero-shot robustness approaching human on out-of-distribution audio | zero-shot speaker generalization from a 3-second prompt |
| The shared thesis | The 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.
"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:
Now run the thought experiment the paper does not. Imagine two corpora, both 60,000 hours.
| Corpus A: 7,000 speakers × 8.6 h | Corpus B: 10 speakers × 6,000 h | |
|---|---|---|
| Acoustic modelling quality | good | good — possibly better per speaker |
| Prosody diversity | high | low |
| Zero-shot cloning | works | cannot work |
| Reason | "continue an unfamiliar voice" occurs 7,000 times, always with a different answer | The 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 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.
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.
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.
Useful for calibrating whether this is a frontier-lab result or a lab-scale one.
| Resource | Paper (2022–23) | Modern equivalent |
|---|---|---|
| Compute | 16 × V100 32 GB, days | A few contemporary accelerators for a comparable time — the FLOP count is small by current standards |
| Data | 60,000 h LibriLight | Freely available — LibriLight is a public benchmark corpus |
| Tokenizer | EnCodec 24 kHz, 6 kbps | Open-source and pre-trained; no work required |
| Aligner | Kaldi hybrid on LibriSpeech 960h | Standard recipe, or an off-the-shelf forced aligner |
| Hardest part | Nothing 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. | |
Three capabilities, none of which was designed in, all of which the paper attributes to data volume and diversity.
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.
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."
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.
| Claim | What would have refuted it | Did it happen? |
|---|---|---|
| Zero-shot cloning works | Speaker similarity near the GSLM level (0.126), or near the baseline's 0.337 | No — 0.580 |
| The discrete objective is not paid for in quality | WER worse than YourTTS's 7.7, or naturalness clearly below baseline | No — 5.9 and CMOS +0.12 |
| Noisy data is tolerable | Audible noise or reverberation on clean prompts — the corpus leaking into every output | Not reported as an issue; environment tracks the prompt instead |
| Both conditioning channels matter | An ablation where removing one changes nothing, or where both move the same metric | No — a clean double dissociation |
| It generalizes beyond the training domain | Collapse on a different corpus | Partially 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.
Read the instruments before the readings, because two of the four are subjective and one is not strictly comparable across systems.
| Metric | Instrument | Range | What to distrust |
|---|---|---|---|
| SPK — speaker similarity | WavLM-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 better | It is a verification model — it scores "same person?", which is not identical to "sounds like the same person to a listener." |
| WER — word error rate | ASR on the generated audio: HuBERT-Large fine-tuned on LibriSpeech 960h, CTC-based, no language-model fusion | %, lower better | No 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 score | 6 native speakers, crowdsourced | 1–5 in 0.5 steps | Six raters. Confidence intervals of ±0.09–0.10 are reported and should be respected. |
| CMOS — comparative opinion score | 12 native speakers, side-by-side against VALL-E | −3 to +3 in steps of 1 | Comparative, 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.
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-clean | VCTK | |
|---|---|---|
| Relationship to training data | same domain (LibriVox audiobooks), disjoint speakers | different domain — different accents, different recording setup, different content |
| What it tests | speaker generalization | speaker and domain generalization |
| Baseline's advantage | none — YourTTS did not train on it | large — YourTTS trained on 97 of the 108 speakers |
| Sentence length | longer (4–10 s samples used) | shorter |
| What the results tell you | the capability, near its best case | the 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.
| Model | Type | WER ↓ | SPK ↑ |
|---|---|---|---|
| Ground truth | real recordings | 2.2 | 0.754 |
| GSLM | speech-to-speech | 12.4 | 0.126 |
| AudioLM* | speech-to-speech | 6.0 | not evaluable |
| YourTTS | TTS baseline | 7.7 | 0.337 |
| VALL-E | TTS | 5.9 | 0.580 |
| VALL-E-continual | TTS | 3.8 | 0.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.
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.
Forty test cases — one randomly sampled utterance per speaker in test-clean.
| System | SMOS (similarity) ↑ | CMOS vs VALL-E (naturalness) |
|---|---|---|
| YourTTS | 3.45 ± 0.09 | −0.12 |
| VALL-E | 4.38 ± 0.10 | 0.00 (reference) |
| Ground truth | 4.5 ± 0.10 | +0.17 |
The SMOS result is the strongest number in the paper, and normalizing makes it obvious:
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 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).
| Split | System | 3 s prompt | 5 s prompt | 10 s prompt |
|---|---|---|---|---|
| 108 full speakers | YourTTS* (saw 97) | 0.357 | 0.377 | 0.394 |
| VALL-E (saw 0) | 0.382 | 0.423 | 0.484 | |
| Ground truth | 0.546 | 0.591 | 0.620 | |
| 11 unseen speakers | YourTTS | 0.331 | 0.337 | 0.344 |
| VALL-E | 0.389 | 0.380 | 0.414 | |
| Ground truth | 0.528 | 0.556 | 0.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."
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.
| System | SMOS ↑ | CMOS vs VALL-E |
|---|---|---|
| YourTTS* (saw 49 of these 60) | 3.70 ± 0.09 | −0.23 |
| VALL-E (saw none) | 3.81 ± 0.09 | 0.00 |
| Ground truth | 4.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.
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.
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 CMOS | Honest 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."
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.
Two asymmetries run in opposite directions and largely cancel, but you should track them separately rather than trusting the cancellation.
| Asymmetry | Direction | Where it bites |
|---|---|---|
| YourTTS trained on 97 of VCTK's 108 speakers; VALL-E on none | favours the baseline | The 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-Portuguese | favours VALL-E | Everywhere. 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 model | unknown | Table 2's AudioLM row. The paper flags it. |
| GSLM and AudioLM are speech-to-speech, not TTS | favours VALL-E | They 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.
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.
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.
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.
| Sample | What differs between the two seeds | What 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.
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.
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:
| Anchor | Score | What it is |
|---|---|---|
| Ground truth (LibriSpeech) | 0.754 | Two different real recordings of the same person. This is the practical ceiling — even a human speaking twice does not score 1.0. |
| GSLM | 0.126 | Effectively a different speaker. The tokenizer erased identity. |
| YourTTS | 0.337 | Some identity captured through a speaker embedding. |
| VALL-E | 0.580 | Between 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.
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.
| Claim | Evidence | Strength |
|---|---|---|
| Beats SOTA zero-shot TTS on speaker similarity | SPK 0.580 vs 0.337; SMOS +0.93; wins on VCTK even against a baseline that trained on 97 of the speakers | Strong — large margins, two datasets, objective and subjective agree |
| Beats SOTA on naturalness | CMOS +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 recordings | SMOS 4.38 vs 4.5 with overlapping intervals; CMOS −0.04 vs ground truth on VCTK | Qualified — true on VCTK, and the paper itself explains why VCTK flatters it |
| Preserves emotion and environment | demo-page samples, EmoV-DB prompts | Anecdotal — no metric, no ablation, no numbers. Believable and unquantified |
| More robust than speech-to-speech LMs | WER 5.9 vs GSLM 12.4, AudioLM 6.0 | Suggestive — 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.
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 paper lists three. With hindsight they did not age equally, and ranking them is a useful exercise before the details.
| Rank | Limitation | How it aged |
|---|---|---|
| 1 | Latency (unlisted — see below) | Became the defining problem of the next generation. Everything after 2024 is about making speech models interactive. |
| 2 | Synthesis robustness | Directly attacked by successors and largely improved — but it required architectural change, exactly as the paper predicted. |
| 3 | Data coverage | Improved by scaling and by multilingual corpora. The paper's own prescription worked. |
| 4 | Model 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.
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.
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 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.
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.
| Consequence | Why it follows |
|---|---|
| Failures are utterance-level, not frame-level | An alignment slip contaminates everything after it |
| Longer utterances fail more often | More steps, more chances to slip, and more room to compound after slipping |
| Aggregate WER understates the user experience | One broken utterance in fifteen reads as "5.9% WER" and as "unusable" to a listener |
| The continual setting helps disproportionately | It 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.
"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.
"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 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 cloning | VALL-E | Why the difference matters |
|---|---|---|
| Minutes to hours of the target's clean audio | 3 seconds, any quality | Three seconds exists for nearly everyone: a voicemail, a video, a call recording, a podcast, a hold-music greeting. |
| A fine-tuning run per speaker | No training at all | No GPU, no ML expertise, no per-target cost. Cloning becomes an API call. |
| A stored per-speaker checkpoint | 1,800 integers | A cloned voice is 2.25 KB. It fits in a text message and cannot be meaningfully controlled by restricting model weights. |
| Clean, neutral studio delivery | Emotion and room preserved | Chapter 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.
What would a stronger mitigation stack look like? Not one thing, and not detection alone:
| Layer | Mechanism | What it actually buys |
|---|---|---|
| Consent at enrolment | Verified enrolment — the speaker records a challenge phrase live, rather than the system accepting arbitrary audio | Prevents cloning from found audio. The single most effective control, and it constrains the product, not the model. |
| Watermarking | An imperceptible signal embedded at generation time and detectable afterwards | Attribution rather than detection: proves this system made it. Survives mild processing; can be stripped by a determined adversary. |
| Provenance signing | Cryptographic signatures on capture devices and content credentials on distribution | Shifts the question from "is this fake?" to "can this prove it is real?" — a strictly easier question to answer correctly. |
| Anti-spoofing in verification | Voice-biometric systems adding liveness and replay detection | Directly addresses the paper's named risk — spoofing voice identification — at the point where it is exploited. |
| Post-hoc detection | The paper's proposal | Useful 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.
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.
| Application | Latency requirement | VALL-E as published |
|---|---|---|
| Audiobook / voiceover rendering | none — offline batch | fine |
| Screen reader, navigation prompts | a few hundred ms per phrase | marginal; short utterances only |
| Voice assistant reply | < 500 ms to first audio | no — the whole sentence must generate first |
| Full-duplex conversation with barge-in | ≈ 200 ms, and it must listen while speaking | structurally 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.
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 measurement | Why it matters |
|---|---|
| Codec round-trip baseline | Ground 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 rate | The named failure mode is discrete (dropped/duplicated words) but the only metric is continuous and aggregate. |
| Perplexity / bits per token | The natural intrinsic metric for a language model, and the natural way to quantify what each conditioning signal contributes. |
| Emotion and environment transfer, quantified | Reported as demo-page observations. An emotion classifier on generated audio, or a reverberation-time estimate, would have made these into results. |
| Latency | Not 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.
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 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.
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.
Placing VALL-E among its neighbours makes the pace of the period visible — and makes clear how little separated the pieces from each other.
| When | What | The missing piece it supplied |
|---|---|---|
| 2016 | WaveNet | Autoregressive audio generation is possible — at 24,000 steps per second |
| 2018–2019 | Tacotron 2, FastSpeech, speaker encoders | The mel-cascade era, and the adaptation methods VALL-E displaces |
| 2021 | GSLM, HuBERT units | Language modelling over discrete speech tokens — without the speaker |
| 2022 (Jul) | SoundStream / EnCodec line matures | A tokenizer that keeps everything and ships a decoder |
| 2022 (Sep) | AudioLM | Hierarchical LM over codec tokens; speech-to-speech |
| 2022 (Dec) | Whisper | The same scale-over-clean-data bet, for recognition |
| 2023 (Jan) | VALL-E | Text conditioning + 60K hours → zero-shot TTS with in-context learning |
| 2023–2024 | VALL-E X, VALL-E 2, and a wave of codec-LM TTS systems | Cross-lingual synthesis; robustness fixes; open reproductions |
| 2024– | Moshi and the omni models | Low 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.
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.
| Question | Why it is open | How 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 reported | Score 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 published | Align generated transcripts to references and count deletions and insertions per utterance. |
| How much does each conditioning signal reduce perplexity? | No intrinsic metrics reported at all | Bits-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 only | Train 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) exists | Subsample 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 shape | Evaluate 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.
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 claim | Reconstruction |
|---|---|
| 750 frames for 10 s | 24,000 × 10 / 320 — also stated in the paper |
| 6 kbps and 64× compression | 75 × 8 × 10 = 6,000 bps; 24,000 × 16 = 384,000 bps; ratio 64 |
| 280 entries for a single codebook | 8 codebooks × 10 bits = 80 bits per frame |
| 757 sequential passes, 7.93 tokens per pass | 750 + 7; 6,000 / 757 |
| ≈151 M trunk parameters | 12 × (4 × 10242 + 2 × 1024 × 4096) |
| 53 MiB KV cache | 12 × 2 × 1,132 × 1,024 × 2 bytes |
| ≈4.74 epochs | 16 × 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 stage | 5.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.
| Symbol | Meaning | Typical value |
|---|---|---|
| y | waveform | 24 kHz float |
| x = {x0…xL} | phoneme sequence (pseudo-labels from a DNN-HMM aligner) | L ≈ 120 for 10 s |
| C = Encodec(y) | acoustic code matrix | int[T × 8], 0…1023 |
| T | frames = 75 × seconds | 750 for 10 s |
| c:,1 | first codebook layer — the AR model's whole output | int[750] |
| c:,j∈[2,8] | residual layers — the NAR model's output | 7 × int[750] |
| C̃ | acoustic prompt from the enrolment | int[225 × 8] for 3 s |
| θAR, θNAR | the two separate parameter sets | ≈152 M, ≈160 M |
| AdaLN(h, i) | ai·LayerNorm(h) + bi — stage conditioning | i ∈ [2, 8] |
| Number | Value | Where it came from |
|---|---|---|
| Sample rate / frame rate | 24,000 Hz / 75 Hz | EnCodec, 320× downsampling |
| Codebooks × entries | 8 × 1,024 | the 6 kbps operating point |
| Bitrate / compression | 6 kbps / 64× | 75 × 8 × 10 bits; vs 384 kbps raw |
| Sequential passes for 10 s | 757 = 750 + 7 | Chapter 5's ledger; 7.93× better than flat AR |
| Training data | 60,000 h, ≈7,000 speakers | LibriLight, unlabelled |
| Training budget | 16 V100s · 6k tokens/GPU · 800k steps | ≈4.74 epochs, ≈7.0×1019 FLOPs (derived) |
| Model shape | 12 layers, 16 heads, d = 1024, dff = 4096 | ≈151 M in the trunk |
| LibriSpeech WER / SPK | 5.9 / 0.580 (GT 2.2 / 0.754) | Table 2 |
| LibriSpeech SMOS / CMOS | 4.38 (GT 4.5) / +0.12 vs YourTTS | Table 3 |
| VCTK SPK at 3/5/10 s | 0.382 / 0.423 / 0.484 | Table 6, 108 speakers |
| AR ablation | SPK 0.585 → 0.236, WER unchanged | Table 5 — the double dissociation |
| NAR ablation | WER 19.6 → 3.0 → 2.8; SPK 0.518 → 0.541 → 0.732 | Table 4 |
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.