台灣華語語音合成與聲音克隆

BlueMagpie-TTS
藍鵲

用最白話的方式,講這個模型怎麼運作、怎麼訓練

https://bluemagpie.intemotech.com
這是什麼

一台會「講台灣華語」的機器

  • 打字進去 → 它念出來
  • 錄一段你的聲音 → 它用你的聲音念別的話
  • 也能選內建的聲音來念
  • 專攻台灣腔,還能中英混講(一句話裡中夾英)

一句話

就像一個很會模仿的播音員:你給它字,它念給你聽;你給它一段聲音,它就學起來。

整體架構

前端負責「對外」,GPU 主機負責「運算」

瀏覽器(使用者)
前端 Portal Web
展示介面麥克風錄音 播放 · 歷史即時 GPUAPI 入口
↓ 私有內網(不對公網)
GPU 主機 GB10 推論
API 服務
排隊 · 限流 · 檢查
BlueMagpie 模型
Barbet(想) 擴散(發聲) 語者編碼
本場焦點,就是右下角那塊:BlueMagpie 模型本身
模型在做什麼

跟人講話一樣,分兩步

🧠
① 先「想」
看懂字,規劃語氣、節奏、重音
🗣️
② 再「發聲」
把想好的,變成真正的聲音
🔊
聲音
48 kHz

我們做的事:換掉「想」的那顆腦袋沿用一套很會「發聲」的嘴巴

其實是:① Barbet 文字語意語言模型(TSLM) ② 沿用 VoxCPM 的聲學生成棧,中間用橋接模組對接
①「想」的那顆腦袋

記性好、又讀得快的腦袋

  • 它的工作:看字,規劃語氣、節奏、重音
  • 一種讀法:從頭順順讀過去 → 很省力、很快
  • 另一種:回頭看前面的重點 → 比較準
  • 這顆腦袋兩種都用 → 又快又準

打個比方

像一個邊讀邊抓重點的人:一路讀下去不費力,遇到關鍵還會回頭確認。

其實是:Barbet = Mamba2(順順讀、線性時間)+ Attention(回看重點)的混合架構。
②「發聲」的那張嘴

把「沙沙的雜訊」慢慢擦成人聲

🌫️ 一團雜訊
沙沙沙…
擦幾次
越來越清楚
🔊 清楚人聲

擦一面起霧的鏡子:擦一次有點清楚,多擦幾次就完全清晰。

其實是:擴散 / Flow-matching(LocDiT);取樣約 10 步(inference_timesteps 預設 10/建議 9),加上 CFG 有/無條件兩條,網路實際跑近 20 次 → 這步最花時間、最吃 GPU
聲音克隆

幫你的聲音「拍一張身分證」

🎙️ 你講幾句
3–15 秒
📸 拍張照
抓出特徵
一串數字
192 個
照著模仿

這串數字就是你的「聲音指紋」。模型看著指紋,就能用你的聲音念任何字。

其實是:ECAPA-TDNN 語者編碼 → 192 維向量;沒聽過的人也行(零樣本)。內建語者=事先存好的指紋。
聲音克隆 · 最重要的觀念

不是「重新學習」,是「給一張提示」

模型的大腦一個字都沒改
你的錄音被壓成一串數字,當成提示遞給早就訓練好的模型,它一次就照著念。

所以它很快

  • 不用訓練,幾秒就完成
  • 換一個人 = 換一張提示,模型不用重學

對比另一種做法

  • 有些克隆要拿幾十分鐘錄音去「重新訓練」
  • 那種慢很多;我們這種是當場、零樣本
其實是:conditioning(條件化)+ zero-shot(零樣本);一次 forward pass(推論),不更新模型參數。
聲音克隆 · 完整流程

從你的聲音,到一張「聲音指紋」

🎙️ 你的聲音
16 kHz
聲紋辨識器ECAPA-TDNN
每 6 秒切一段
每段 → 192 個數字
平均 → 你的指紋
指紋不同 → 模型就知道要模仿誰
別人
「聲紋辨識器」ECAPA-TDNN(本來用來認人,借來抽指紋);指紋=L2 正規化的 192 維向量(centroid=平均質心)。模型訓練時就學會「看著指紋控制音色」,所以沒聽過的人也能克隆(零樣本)。
程式怎麼用

載入 → 合成 → 克隆,三段就好

# 1) 載入模型(權重 + tokenizer)
model = BlueMagpieModel.from_local(model_dir, tokenizer=tok, device="cuda")

# 2) 一般合成:文字 → 語音
audio = model.generate(target_text="今天天氣真好。", cfg_value=2.0)

# 3) 克隆:先從「語音檔」抽出指紋,再帶進去合成
from bluemagpie import extract_speaker_centroid
centroid = extract_speaker_centroid("reference.wav")        # → 192 維
audio = model.generate(target_text="…", speaker_centroid=centroid, cfg_value=2.8)
匯入語音檔的關鍵就一行:extract_speaker_centroid("檔案.wav") → 得到 192 維「指紋」;合成時用 speaker_centroid= 帶進去就會模仿。
語者向量怎麼產生 · 跟權重的差別

把一個人的聲音,存成一個小檔

# 1) 從參考音「產生」語者向量檔(CLI)
python scripts/extract_speaker_centroid.py \
    --audio reference.wav --out my_voice.pt
# 同一人多段更穩: --audio a.wav b.wav c.wav

# 2) 之後直接載入這個 .pt 來用
c = torch.load("my_voice.pt")        # [192]
audio = model.generate(target_text="…", speaker_centroid=c)

# 3) 內建語者:打包好的多條向量
d = torch.load("speaker_centroids.pt")
# {speaker_ids:[…], centroids:[N,192]}

語者向量 ≠ 模型權重

  • 語者向量 .pt:192 數字、幾 KB,一人一條
  • 模型權重 pytorch_model.bin:約 7.7 GB
  • 換人只換 .pt權重不變、所有聲音共用
你自己抽的 my_voice.pt 和內建的 speaker_centroids.pt 是同一種東西,只是後者多打包了幾個人;產生方式都是上面那支 extract_speaker_centroid
一個重要旋鈕

「要多用力模仿」的旋鈕

  • 轉小 → 比較自然、但比較不像
  • 轉大 → 比較像、但太大會變僵硬、走音
  • 建議停在中間(2.0–2.8)

打個比方

化妝:淡妝自然好看,妝太濃反而變一個怪人。

其實是:cfg_value(無分類器引導強度)。
怎麼訓練 ①

站在巨人的肩膀上,不從零開始

已經有一位很會發音的老師。我們不重教發音
換上一個新學生來「看字、想怎麼念」,
再讓學生一直模仿老師,把這段學起來。

👩‍🏫
老師
很會「發聲」(沿用)
🧑‍🎓
新學生
負責「想怎麼念」
👀
模仿老師
慢慢學到一樣好
其實是:以 VoxCPM蒸餾老師;換上 BarbetAudioVAE(嘴巴)全程不動,省力又穩。
怎麼訓練 ②

像學騎腳踏車:先扶著,再放手

🛞
先扶著
只練「接上去」那一小段
🚲
半放手
自己踩,學會「用不同人的聲音」
🏁
完全放手
整體微調到最好

一次只放開一點點,穩、不會跌倒、學得快

其實是三階段:bridge(只訓練橋接)→ tslm(學語者條件)→ full(整體微調,只有 AudioVAE 凍結)。
合成流程

從文字到聲音,一條龍

文字
🧠 想
Barbet
🗣️ 發聲
擴散 + 語者
🔊 聲音
跑在哪裡

放在一台 GPU 主機上

  • 模型住在 GPU 裡,隨時待命
  • 合成時,前端能即時看到 GPU 忙起來(0% → 約 86%)
  • 對外只開展示頁,模型本體不直接對公網

背後還有

排隊、限流、輸入檢查、克隆要勾同意 —— 確保穩定又不被濫用

成效與速度

念得準,也念得快

4.81
11.45
CER 字錯誤率
5.36
14.83
WER 詞錯誤率
BlueMagpie
對照模型
數字=錯誤率 %
越低越好 ↓

速度與特色

  • 即時的 4.7 倍速(產 1 秒語音約 0.2 秒)
  • 專攻台灣腔中英混講
  • 含李宏毅教授的內建語者(已授權)
評測:closed-loop TTS→ASR→比對(CER=字錯誤率、WER=詞錯誤率,越低越好);速度以 RTF(real-time factor)衡量。
老實說

它還不會什麼

目前限制

  • 只會台灣華語(國語)不會台語
  • 英文縮寫可能念錯(例如 "LLM")
  • 不是 production 等級(官方定位為展示/研究)
  • 錄音越乾淨,克隆越像

之後可以做

  • 加上台語
  • 調情緒、語速
  • 多人同時用、加浮水印
Demo 時間 · 動手玩玩看

來實際聽聽看

  • ① 文字合成:點一句長範例 →
    「感謝大家今天撥空參加這場說明會…」
  • ② 內建語者:選 hung_yi_lee,按「試聽語者」 →
    「各位好,這是內建語者的聲音示範。」
  • ③ 克隆我的聲音:勾同意、照腳本錄約 10 秒 →
    「嗨,這是用我的聲音克隆出來的,像不像?」

小提醒

  • 風格強度先用預設(一般 2.0/克隆 2.8)
  • 長句更能聽出停頓與語氣
  • 合成時看上面 GPU 使用率衝高
  • 錄音安靜、久一點會更像
https://bluemagpie.intemotech.com · 歡迎現場操作 · Q & A
BlueMagpie-TTS(藍鵲)· 白話版
1 / 14
← → 或空白鍵翻頁 · F 全螢幕 · 點左右兩側切換