大多數工程師把 TTS 當成「呼叫 API、播放音訊」的黑箱。 真正的 AI 工程師理解聲學模型與聲碼器的分工、延遲來源、以及為何同一句話用不同架構品質差距達 0.8 MOS。 他們能設計零樣本語音克隆系統、控制情感韻律、並在 200ms 內完成整條推論鏈。 本文帶你從模型架構到線上服務,逐層拆解語音合成工程的每一個決策點。
面試情境
你的公司要推出有聲書朗讀功能,支援繁體中文與英文雙語、使用者可上傳 30 秒聲音樣本克隆自己的聲音、整體端對端延遲需低於 300ms。請說明你會如何設計這套 TTS 系統,包含模型選型、聲碼器、語音克隆架構、以及上線後如何持續改善音質。
一、核心問題:語音合成的工程挑戰
語音合成表面上是「文字轉音訊」,但工程挑戰遠比想像中複雜:
三大矛盾張力
| 維度 | 極端 A | 極端 B | 工程取捨 |
|---|---|---|---|
| 自然度 vs 延遲 | Tortoise-TTS(MOS 4.5)推論 30s | FastSpeech2 < 50ms | 互動場景選速度,有聲書選品質 |
| 個人化 vs 資料量 | 傳統 clone 需 1 小時錄音 | XTTS v2 只需 6 秒樣本 | 零樣本 clone 改變商業模式 |
| 表達力 vs 穩定度 | 情感模型偶爾產生雜音 | 平坦語調安全但無趣 | 情感強度需可調參數 |
延遲分解(300ms 預算)
文字前處理(正規化/分詞): ~10ms
G2P(字素轉音素): ~15ms
聲學模型(Mel 頻譜生成): ~80ms ← 最大瓶頸
聲碼器(Mel → 波形): ~60ms
音訊編碼/傳輸: ~30ms
緩衝播放首包: ~20ms
─────────────────────────────────
總計: ~215ms ✓ 低於 300ms
核心工程問題清單
- 聲學模型如何從 Tacotron 自回歸演進到 FastSpeech 非自回歸?
- 聲碼器 WaveNet vs HiFi-GAN:品質差多少、速度差多少?
- 零樣本克隆的 speaker embedding 如何注入?
- 情感控制向量(VAE latent)如何不破壞音素對齊?
- 串流輸出(chunked TTS)如何降低首包延遲至 < 100ms?
二、三個演進階段
╔══ Phase 1:POC(< 1K 日活,有聲書 Demo)══╗
目標:驗證音質可接受、克隆功能跑通、不需擴展性
┌──────────────────────────────────────────────────────┐
│ Phase 1 POC 架構 │
│ │
│ 用戶輸入文字 │
│ │ │
│ ▼ │
│ ┌─────────────┐ 文字正規化 + G2P │
│ │ 前處理層 │ (OpenCC 繁簡 + jieba 分詞) │
│ └──────┬──────┘ │
│ │ 音素序列 │
│ ▼ │
│ ┌─────────────┐ VITS 端對端模型 │
│ │ TTS 模型 │ (Hugging Face 預訓練) │
│ └──────┬──────┘ 本地 GPU A10G │
│ │ 音訊檔案 │
│ ▼ │
│ ┌─────────────┐ 直接回傳 wav/mp3 │
│ │ 儲存/回傳 │ 無串流 │
│ └─────────────┘ │
│ │
│ 成本:$500/月(單機 GPU 實例) │
│ 延遲:1–3 秒(可接受,Demo 用) │
│ MOS:~4.0(VITS 預訓練) │
└──────────────────────────────────────────────────────┘
Phase 1 可接受的捷徑
- 直接用 Hugging Face 上的 VITS 或 Coqui TTS 預訓練模型
- 不做串流,整句生成後回傳完整音訊
- 語音克隆只支援固定幾個說話人
- 無情感控制,單一語調
Phase 1 遺留問題:無法擴展、無串流、克隆品質不穩
╔══ Phase 2:MVP(10K–100K 日活,正式上線)══╗
目標:低延遲串流輸出、穩定的零樣本克隆、可水平擴展
┌──────────────────────────────────────────────────────────────────┐
│ Phase 2 MVP 架構 │
│ │
│ ┌──────────┐ REST/gRPC ┌──────────────────────────────┐ │
│ │ 客戶端 │ ───────────────▶ │ TTS API Gateway │ │
│ └──────────┘ │ (FastAPI + 串流 SSE) │ │
│ └──────────────┬───────────────┘ │
│ │ │
│ ┌────────────────────┼──────────────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌────────────┐ ┌────────────────┐ ┌───────┐ │
│ │ 前處理服務 │ │ Speaker Embed │ │ 快取 │ │
│ │ G2P+正規化 │ │ 提取服務 │ │ Redis │ │
│ └─────┬──────┘ └───────┬────────┘ └───────┘ │
│ │ 音素 │ 256-dim vector │
│ ▼ ▼ │
│ ┌─────────────────────────────────────┐ │
│ │ FastSpeech2 聲學模型 │ │
│ │ (ONNX Runtime, A10G GPU) │ │
│ │ 推論 < 50ms / 句 │ │
│ └────────────────────┬────────────────┘ │
│ │ Mel 頻譜 │
│ ▼ │
│ ┌─────────────────────────────────────┐ │
│ │ HiFi-GAN 聲碼器 │ │
│ │ (TorchScript, 即時串流輸出) │ │
│ │ < 60ms / 句 │ │
│ └────────────────────┬────────────────┘ │
│ │ PCM chunks │
│ ▼ │
│ 串流回傳客戶端 │
│ │
│ 成本:~$3,000/月(4× A10G,Auto Scaling) │
│ P95 延遲:< 250ms 首包 │
│ MOS:4.2(HiFi-GAN fine-tuned) │
└──────────────────────────────────────────────────────────────────┘
Phase 2 新增元件
- FastSpeech2 取代自回歸模型,推論速度提升 10×
- HiFi-GAN 聲碼器,MOS 提升 0.4 分
- Speaker embedding 服務(d-vector 或 x-vector)
- Redis 快取常用句子的 Mel 頻譜(命中率約 30%)
- 串流輸出:chunk 大小 256 frames ≈ 50ms 音訊
Phase 2 遺留問題:情感控制尚未完善、MOS 在情感句差距明顯
╔══ Phase 3:Scale(200K+ 日活,企業級)══╗
目標:情感控制、多語言、音樂生成、成本最佳化
┌─────────────────────────────────────────────────────────────────────┐
│ Phase 3 Scale 架構 │
│ │
│ ┌──────────┐ │
│ │ 客戶端 │ │
│ └────┬─────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 智慧路由層(按任務類型分流) │ │
│ │ 互動語音→高速路線 有聲書→高品質路線 音樂→專用路線 │ │
│ └──────────────┬──────────────────────────────────────────┘ │
│ │ │
│ ┌────────────┼───────────────────────────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──────┐ ┌──────────────┐ ┌──────────────────────────────┐ │
│ │高速線│ │ 高品質線 │ │ 音樂生成線 │ │
│ │F.S.2 │ │ VITS2+Vocos │ │ MusicGen / AudioCraft │ │
│ │<50ms │ │ MOS 4.4 │ │ 文字→音樂 10–30s │ │
│ └──┬───┘ └──────┬───────┘ └──────────────┬───────────────┘ │
│ │ │ │ │
│ └─────────────┴──────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 後處理層 │ │
│ │ 音量正規化 / 去雜訊 / 格式轉碼 (ffmpeg) │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │
│ 成本:~$12,000/月(混合 GPU 機型 + Spot) │
│ P99 延遲:< 400ms(高品質線)/ < 100ms(高速線首包) │
│ MOS:4.4(VITS2 + Vocos fine-tuned) │
└─────────────────────────────────────────────────────────────────────┘
三、聲學模型演進:Tacotron2 → FastSpeech2 → VITS
3.1 自回歸瓶頸:Tacotron2
Tacotron2 以 Seq2Seq + Attention 生成 Mel 頻譜,每個時間步依賴前一步輸出,造成:
- 推論時間 O(T),T = 輸出幀數(典型 5–8 秒文字需 800ms 推論)
- Attention 偶爾錯位(missing/repeating phonemes),品質不穩定
- 無法並行化
3.2 非自回歸突破:FastSpeech2
┌────────────────────────────────────────────────────────────┐
│ FastSpeech2 架構 │
│ │
│ 文字/音素序列 │
│ │ │
│ ▼ │
│ ┌──────────────┐ │
│ │ FFT Block │ × 4 (Feed-Forward Transformer) │
│ │ 自注意力 │ │
│ └──────┬───────┘ │
│ │ │
│ ▼ │
│ ┌──────────────┐ 預測每個音素的持續時間 │
│ │ Duration │ → 決定 Mel 幀對齊 │
│ │ Predictor │ (Phoneme → Duration lookup) │
│ └──────┬───────┘ │
│ │ 長度調節(可控語速) │
│ ▼ │
│ ┌──────────────┐ 預測 F0(基頻)和 Energy │
│ │ Pitch/Energy │ ← 情感控制入口 │
│ │ Predictor │ │
│ └──────┬───────┘ │
│ │ │
│ ▼ │
│ ┌──────────────┐ │
│ │ FFT Block │ × 4 │
│ └──────┬───────┘ │
│ │ │
│ ▼ │
│ Mel 頻譜(可並行生成所有幀) │
│ │
│ 推論時間:< 50ms(A10G GPU,10 秒文字) │
│ vs Tacotron2:~800ms → 16× 加速 │
└────────────────────────────────────────────────────────────┘
FastSpeech2 關鍵數字
- Duration predictor 誤差 < 5%,消除 Attention 失對問題
- 語速控制:直接縮放 duration,0.5× – 2.0× 無失真
- MOS:約 4.0(與 Tacotron2 相當,但穩定性更高)
3.3 端對端整合:VITS
VITS(Variational Inference with adversarial learning for end-to-end TTS)消除聲學模型與聲碼器的分離訓練問題:
- VAE:隱空間 z 對齊文字與音訊,同時捕捉韻律變化
- Flow:可逆正規化流,提升 Mel 頻譜品質
- GAN:對抗訓練,輸出接近真實波形
- 推論:文字 → 一步到位輸出波形,MOS 4.36(VCTK 基準)
- 代價:推論時間約 120–200ms,比 FastSpeech2 慢 3–4×
| 模型 | 推論延遲 | MOS | 情感控制 | 克隆難度 |
|---|---|---|---|---|
| Tacotron2 | 800ms | 3.9 | 弱 | 難 |
| FastSpeech2 | < 50ms | 4.0 | 中(F0/Energy) | 中 |
| VITS | 150ms | 4.36 | 強(VAE latent) | 易 |
| VITS2 | 120ms | 4.42 | 強 | 易 |
四、聲碼器:Griffin-Lim → WaveNet → HiFi-GAN → Vocos
聲碼器負責「Mel 頻譜 → 波形」,品質差距顯著:
| 聲碼器 | 推論速度 | MOS | 原理 | 適用場景 |
|---|---|---|---|---|
| Griffin-Lim | 即時(CPU) | 3.2 | 迭代相位估計 | 原型/Debug |
| WaveNet | 0.02× 即時 | 4.4 | 自回歸神經網路 | 已淘汰 |
| WaveGlow | 2× 即時 | 4.2 | 正規化流 | 次選 |
| HiFi-GAN V1 | 167× 即時 | 4.2 | GAN + 多週期判別器 | 生產首選 |
| HiFi-GAN V2 | 250× 即時 | 4.1 | 輕量版,精度換速度 | 邊緣設備 |
| Vocos | 200× 即時 | 4.3 | ConvNeXt + ISTFT | 新世代首選 |
HiFi-GAN 為何是 Phase 2 生產首選
- 167× 即時意味著生成 1 秒音訊只需 6ms
- 多週期判別器(MPD)+ 多尺度判別器(MSD)消除高頻雜音
- 開源、生態完整、fine-tuning 資料需求低(1 小時錄音即可)
Vocos 的優勢
- 以 ISTFT(反短時傅立葉)取代直接波形生成,相位估計更穩定
- 在高音質場景 MOS 高於 HiFi-GAN 0.1 分
- 模型參數僅 13.5M,適合邊緣部署
五、零樣本語音克隆:XTTS/Tortoise 架構
5.1 Speaker Embedding 注入機制
傳統 TTS 克隆需要 > 30 分鐘錄音訓練新說話人模型。零樣本克隆的核心突破是將說話人特徵壓縮為向量,在推論時注入:
┌─────────────────────────────────────────────────────────┐
│ 零樣本語音克隆流程 │
│ │
│ ┌─────────────────┐ 30秒參考音訊 │
│ │ 參考音訊輸入 │ │
│ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ d-vector / x-vector │
│ │ Speaker Encoder│ (預訓練 ECAPA-TDNN) │
│ │ (凍結權重) │ 輸出 256-dim speaker embedding │
│ └────────┬────────┘ │
│ │ speaker_emb │
│ │ 文字輸入 │
│ │ │ │
│ ▼ ▼ │
│ ┌────────────────────────────────────────────────┐ │
│ │ TTS 聲學模型(VITS/FastSpeech2) │ │
│ │ │ │
│ │ cross-attention(text_enc, speaker_emb) │ │
│ │ 或 AdaIN(speaker_emb) 注入每個 FFT Block │ │
│ └────────────────────────┬───────────────────────┘ │
│ │ Mel 頻譜 │
│ ▼ │
│ HiFi-GAN / Vocos │
│ │ 克隆音訊 │
│ ▼ │
│ 保留目標說話人音色的輸出 │
│ │
│ XTTS v2:6 秒參考音訊,MOS 3.8(克隆評估) │
│ Tortoise:6 秒樣本,MOS 4.2,但推論 30 秒 │
└─────────────────────────────────────────────────────────┘
5.2 XTTS v2 vs Tortoise-TTS
| 指標 | XTTS v2 | Tortoise-TTS |
|---|---|---|
| 最少參考音訊 | 6 秒 | 6 秒 |
| 推論時間 | ~2 秒(1 段落) | 30–60 秒 |
| 克隆 MOS | 3.8 | 4.2 |
| 多語言 | 17 種語言 ✓ | 英文為主 |
| 適用場景 | 互動/即時 | 離線有聲書 |
工程建議:有聲書場景用 Tortoise 離線批次生成,互動語音助理用 XTTS v2 即時回應。
5.3 Speaker Embedding 快取策略
用戶上傳 30 秒樣本後,提取 speaker embedding 並存入 Redis(TTL 24h),後續請求無需重新提取。提取一次約 150ms,快取命中後節省此延遲。
六、情感與韻律控制
6.1 情感控制的三個層次
層次 1:F0/Energy 顯式控制(FastSpeech2)
- 直接調整 pitch(+20% = 更興奮)、energy(+15% = 更有力)
- 可解釋,但情感不自然,像在「調參數」
層次 2:GST(Global Style Token)
- 從參考音訊提取全局風格向量,注入聲學模型
- 10–20 個 token,每個對應一種風格(朗讀、新聞播報、對話等)
- 無需情感標籤訓練
層次 3:VAE 隱空間控制(VITS/NaturalSpeech2)
- 情感作為 VAE 隱變數的一部分,採樣時可插值
- 「中性 → 喜悅」= 在隱空間線性插值,自然漸變
- MOS 在情感句比 GST 高 0.15 分
6.2 韻律控制實務
1# FastSpeech2 語速/音調控制範例(偽碼)
2output = model.infer(
3 text="今天天氣真好",
4 speaker_id=0,
5 speed=0.9, # 0.5–2.0,不影響音質
6 pitch_shift=+2, # 半音單位,-12 到 +12
7 energy_scale=1.1, # 能量倍率
8)
情感強度校正:用戶若感知過度誇張,提供 0–1 的情感強度滑桿,線性插值 neutral embedding 與 target emotion embedding。
七、音樂生成:MusicGen/AudioCraft 架構
7.1 AudioCraft 架構概覽
Meta 的 AudioCraft 包含三個子模型:
| 模型 | 用途 | 輸入 | 輸出長度 |
|---|---|---|---|
| MusicGen | 文字→音樂 | 文字描述 + 可選旋律 | 最長 30 秒 |
| AudioGen | 文字→音效 | 文字描述 | 最長 5 秒 |
| EnCodec | 神經音訊編解碼器 | 波形 | 壓縮 token |
MusicGen 核心設計:
- 以 EnCodec 將音訊壓縮為 4 個量化 codebook 的 token 序列
- Transformer decoder 自回歸生成這些 token(類似語言模型)
- 文字條件透過 T5 encoder 提取特徵,以 cross-attention 注入
- 生成 10 秒音樂約需 15 秒(A100),30 秒音樂約需 45 秒
7.2 音樂生成工程挑戰
一致性問題:自回歸生成可能在 15 秒後轉換風格 → 解法:使用 continuation 模式,以已生成的最後 2 秒作為 prompt
版權問題:生成音樂與訓練資料的相似度檢測 → 部署前跑 fingerprinting(Shazam 演算法),相似度 > 0.85 拒絕輸出
延遲不可接受:45 秒生成不適合互動場景 → 有聲書背景音樂預先批次生成,互動場景只用 5 秒音效(AudioGen < 3 秒)
八、為什麼選 X 不選 Y
| 決策 | 選擇 | 選 X 的理由 | 不選 Y 的理由 | Flip Condition |
|---|---|---|---|---|
| 聲學模型 | FastSpeech2 | < 50ms 推論,穩定無 Attention 失對 | Tacotron2:800ms,自回歸無法並行 | 若品質要求 MOS > 4.3 且可接受 200ms,改用 VITS |
| 聲碼器 | HiFi-GAN V1 | MOS 4.2,167× 即時,開源生態完整 | WaveNet:0.02× 即時,生產不可用 | 若 MOS 需再高 0.1 分,改用 Vocos(需評估 fine-tuning 成本) |
| 克隆架構 | XTTS v2 | 6 秒參考音訊,多語言,~2 秒推論 | Tortoise:推論 30s,不適合即時 | 離線批次有聲書生成用 Tortoise(MOS 更高) |
| 情感控制 | VAE latent(VITS) | 自然情感漸變,無需顯式標籤 | GST:情感不夠自然,需手動挑 token | 若訓練資料無情感標注,GST 是唯一選擇 |
| Speaker Encoder | ECAPA-TDNN | 說話人辨識 EER 0.8%,提取快(50ms) | i-vector:準確度低,不支援端對端更新 | 若資源極有限(邊緣),改用輕量 TDNN-F |
| 音訊格式 | Opus 48kHz | 壓縮率高,延遲低(20ms frame),WebRTC 原生支援 | MP3:編碼延遲 > 100ms,不適合串流 | 若客戶端只支援 MP3(舊系統整合),轉碼一次後快取 |
九、系統效應:Before vs After
9.1 延遲對比
| 指標 | Phase 1(POC) | Phase 2(MVP) | Phase 3(Scale) |
|---|---|---|---|
| 首包延遲(P50) | 2,000ms | 180ms | 80ms |
| 首包延遲(P95) | 5,000ms | 300ms | 150ms |
| 完整句子延遲(5秒文字) | 3,500ms | 350ms | 200ms |
| 串流支援 | ✗ | ✓ | ✓(chunk 50ms) |
9.2 音質對比
| 指標 | Phase 1 | Phase 2 | Phase 3 |
|---|---|---|---|
| MOS(自然度,1–5) | 3.8 | 4.2 | 4.4 |
| MOS(克隆相似度) | N/A | 3.5 | 3.8 |
| 情感表達準確率 | 無 | 60% | 82% |
| 多語言支援 | 僅中文 | 中/英 | 17 語言 |
9.3 成本對比
| 指標 | Phase 1 | Phase 2 | Phase 3 |
|---|---|---|---|
| 月成本 | $500 | $3,000 | $12,000 |
| 成本/千字 | $0.05 | $0.008 | $0.004 |
| GPU 使用率 | 15%(浪費) | 65% | 82%(Spot) |
| 快取命中率 | 0% | 30% | 45% |
關鍵洞察:Phase 2 → Phase 3 月成本增加 4×,但日活增加 20×(10K → 200K),單位成本下降 50%。快取命中率每提升 10%,GPU 成本降低約 8%。
十、面試答題要點
「這套有聲書 TTS 系統的設計分三個層次。首先,聲學模型選 FastSpeech2 而非 Tacotron2,非自回歸架構讓推論從 800ms 降至 50ms,Duration Predictor 解決 Attention 失對問題;若品質要求更高(MOS > 4.3),改用 VITS 端對端模型接受 150ms 的延遲換取自然度。其次,聲碼器選 HiFi-GAN V1,167× 即時速度加上 MOS 4.2,是品質與延遲最佳平衡點,Vocos 是未來升級選項。第三,零樣本克隆架構以 ECAPA-TDNN 從 6 秒參考音訊提取 256-dim speaker embedding,透過 cross-attention 注入聲學模型,克隆 MOS 達 3.8;互動場景用 XTTS v2(2 秒推論),離線有聲書用 Tortoise(MOS 4.2)。整體端對端 P95 延遲 300ms,拆解為:G2P 15ms + FastSpeech2 50ms + HiFi-GAN 60ms + 串流首包 30ms,符合需求。持續改善音質的方式是以用戶播放完成率(而非 MOS)作為主指標,自動挑選低完成率段落進行人工標注後 fine-tuning。」
十一、系列導航
← 上一篇:Phase 6 Part 1:語音辨識(ASR)— 讓機器聽懂人話
→ 下一篇:Phase 7 Part 1:推薦系統工程基礎(即將推出)
系列索引
本文屬於「AI 工程從零開始」系列,涵蓋從基礎 ML 到生產級 AI 系統的完整工程路徑:
- Phase 1:ML 基礎與特徵工程
- Phase 2:深度學習訓練工程
- Phase 3:LLM 應用與 RAG 系統
- Phase 4:MLOps 與模型部署
- Phase 5:電腦視覺工程
- Phase 6:語音 AI 工程(本系列)
- Part 1:語音辨識(ASR)
- Part 2:語音合成與音訊模型(本文)
- Phase 7:推薦系統工程(即將推出)
