|
| 1 | +# MiniMax Voice Cloning |
| 2 | + |
| 3 | +聲音複製超酷的,如果可以複製出我的聲音的話,就只要寫好腳本,就可以錄好我的 IG Reels。所以最近在看聲音複製這一塊。 |
| 4 | + |
| 5 | +目前比較知名的就是 elevenlabs 跟 minimax,我兩個都有稍微用過 |
| 6 | + |
| 7 | +elevenlabs:買了應該三百塊左右的方案,丟了一小時我的聲音進去 |
| 8 | + |
| 9 | +minimax:我只用了免費版,丟了三十秒進去 |
| 10 | + |
| 11 | +我覺得效果是屌虐 elevenlabs 的模型,所以今天想來挖掘一下 minimax 的原理,但我時間有限+沒啥 AI 底子,所以基本上是透過 ChatGPT 跟我一起來讀這篇論文: [MiniMax-Speech: Intrinsic Zero-Shot Text-to-Speech with a Learnable Speaker Encoder](https://arxiv.org/pdf/2505.07916) |
| 12 | + |
| 13 | +這邊是我的 heptabase 筆記連結,有興趣也可以進去逛逛:[點此前往](https://app.heptabase.com/w/be7836298966b690ce047b07abf835685b78fa20b74a18665be149a0079ec5a6) |
| 14 | + |
| 15 | +## MiniMax 強在哪? |
| 16 | + |
| 17 | +#### **1\. 真零樣本(Intrinsic Zero-Shot)語音克隆** |
| 18 | + |
| 19 | +- 不用語音的**轉錄**(不需聲音對應文字)就能複製聲音(Zero-shot)。 |
| 20 | + |
| 21 | +- 只要一小段任意語音就能合成同一個人用任何文字講話,不需要預先對這個人微調模型或蒐集大量語料。 |
| 22 | + |
| 23 | +- 給三十秒的聲音,就可以模仿得很像 |
| 24 | + |
| 25 | +#### **2\. 可訓練的 Speaker Encoder** |
| 26 | + |
| 27 | +- 說話人編碼器(speaker encoder)和主模型一起端到端訓練,**不是用別人訓練好的說話人驗證模型當作黑盒子**。 |
| 28 | + |
| 29 | +- 這邊做得好,所以有詳細記錄我的聲音音色! |
| 30 | + |
| 31 | +#### **3\. 創新的 Flow-VAE 架構** |
| 32 | + |
| 33 | +- 結合 VAE(變分自編碼器)與 Flow model,提升語音特徵表達能力、音質和還原度。 |
| 34 | + |
| 35 | +- 讓模型生成的語音不僅自然,還能高度還原個人音色。 |
| 36 | + |
| 37 | +- 讓語音訊號本身細節和品質更高,有辦法呈現 Speaker Encoder 記錄下來的聲音細節。 |
| 38 | + |
| 39 | +### **這些亮點在哪些指標打敗了 SOTA?** |
| 40 | + |
| 41 | +#### **1\. 客觀指標** |
| 42 | + |
| 43 | +#### **(見論文 Table 1、Table 2、Table 3)** |
| 44 | + |
| 45 | +- **Word Error Rate (WER)** |
| 46 | + |
| 47 | + **[什麼是 WER(Word Error Rate)?](https://www.backend-b.com/%E4%BB%80%E9%BA%BC%E6%98%AF-werword-error-rate)** |
| 48 | + |
| 49 | + → 語音合成後由語音辨識模型還原出的文字,錯誤率比 SOTA(如 Seed-TTS、CosyVoice2、ElevenLabs Multilingual v2 等)還低,甚至比部分“真實錄音”還低,顯示模型合成語音清晰度高、可辨識度強。 |
| 50 | + |
| 51 | +- **Speaker Similarity (SIM)** |
| 52 | + |
| 53 | + → 合成語音的說話人向量(speaker embedding)和原始說話人相似度也達到 SOTA 水準,在「只用一小段語音」的 zero-shot 條件下,和現有最佳模型持平甚至更高。 |
| 54 | + |
| 55 | +#### **2\. 主觀評測** |
| 56 | + |
| 57 | +- 在公開 TTS Arena 人類聽感排名中(ELO 分數) |
| 58 | + |
| 59 | + - **MiniMax-Speech(榜上名為 Speech-02-HD)排名第一**,勝過 OpenAI、ElevenLabs、Google、微軟等知名模型。 |
| 60 | + |
| 61 | + - 人類偏好 MiniMax-Speech 的自然度、表達力與音色還原度。 |
| 62 | + |
| 63 | +### **MiniMax-Speech 的 TTS** 生成流程 |
| 64 | + |
| 65 | +整個生成流程由三大核心組件構成: |
| 66 | + |
| 67 | +1. **Speaker Encoder**(取得說話者音色) |
| 68 | + |
| 69 | +2. **AR Transformer**(從文字、音色生成語音 token) |
| 70 | + |
| 71 | +3. **Flow-VAE Decoder**(從語音 token 還原出聲音) |
| 72 | + |
| 73 | +#### **① Speaker Encoder** |
| 74 | + |
| 75 | +- **輸入**:你提供一段幾秒鐘的參考語音(不需要文字轉錄) |
| 76 | + |
| 77 | +- **輸出**:一個 **固定長度的 speaker embedding(條件向量)** |
| 78 | + |
| 79 | +這個向量捕捉了聲音的 **timbre(音色)**、prosody(說話風格)等與語意無關的特徵。 |
| 80 | + |
| 81 | +#### **學習方法** |
| 82 | + |
| 83 | +在訓練時,它透過: |
| 84 | + |
| 85 | +- 每次給定一小段語音當作 speaker reference |
| 86 | + |
| 87 | +- 產出一個 embedding(向量)去代表這段音色 |
| 88 | + |
| 89 | + - 算出音色、聲帶特質、講話慣性的資料 |
| 90 | + |
| 91 | +- 將這個 embedding 傳給下游的 AR |
| 92 | + |
| 93 | +基本上就是學習你怎麼發出聲音(音色、風格、⋯⋯) |
| 94 | + |
| 95 | +這邊做得好,所以有詳細記錄我的聲音音色! |
| 96 | + |
| 97 | +#### **② Tokenizer(把文字編碼成 token)** |
| 98 | + |
| 99 | +- 使用 **Byte Pair Encoding (BPE)** 將輸入文字拆成 token(像 GPT 一樣) |
| 100 | + |
| 101 | +[BPE 是什麼?](https://www.backend-b.com/bpe-%E6%98%AF%E4%BB%80%E9%BA%BC) |
| 102 | + |
| 103 | +例如: |
| 104 | + |
| 105 | +``` |
| 106 | +"你好世界" → ["你", "好", "世", "界"] → [token1, token2, token3, token4] |
| 107 | +``` |
| 108 | + |
| 109 | +這邊的文字 input 是你另外給的內容,目的在於讓訓練好的語音模型可以輸出你想講的內容。 |
| 110 | + |
| 111 | +#### **③ AR Transformer(自回歸模型)** |
| 112 | + |
| 113 | +- **輸入**: |
| 114 | + |
| 115 | + - 條件序列 |
| 116 | + |
| 117 | + [條件序列](https://www.backend-b.com/%E6%A2%9D%E4%BB%B6%E5%BA%8F%E5%88%97) |
| 118 | + |
| 119 | + - 文字 token |
| 120 | + |
| 121 | + - Speaker encoder 給出的 embedding |
| 122 | + |
| 123 | + - 這兩個作為 global input,每一輪都會丟進去 |
| 124 | + |
| 125 | + - 上一輪的 audio token |
| 126 | + |
| 127 | +- **輸出** |
| 128 | + |
| 129 | + - 一串 audio token(代表聲音) |
| 130 | + |
| 131 | +這一步是核心生成過程,透過 **自回歸地產生語音 token**,也就是一個一個預測下一個語音單元。 |
| 132 | + |
| 133 | +### Auto Regressive 怎麼運作? |
| 134 | + |
| 135 | +``` |
| 136 | +條件序列: [t1, t2, t3, t4] + z_speaker |
| 137 | +
|
| 138 | +初始 StartToken |
| 139 | + ↓ |
| 140 | +步驟1 y1 |
| 141 | + ↓ |
| 142 | +步驟2 [y1] ←(餵進去) |
| 143 | + ↓ |
| 144 | +步驟3 [y1, y2] |
| 145 | + ↓ |
| 146 | +步驟4 [y1, y2, y3] |
| 147 | + ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ |
| 148 | + ↓ |
| 149 | +結束 [y1, y2, ..., yn, <EOS>] <- audio token |
| 150 | +``` |
| 151 | + |
| 152 | +優勢: |
| 153 | + |
| 154 | +- AR 每生一個 audio token,就可以根據前面已經生成的聲音(包含語速、情緒、語調等)和條件序列(文字、speaker embedding)去「調整接下來要怎麼說」。 |
| 155 | + |
| 156 | +- Attention 機制讓每個步驟可以看到所有的文字 token,以及之前所有已經生成的音訊 token,能學出「哪裡該停頓」、「這個字該拉長、重讀、提高聲調」。 |
| 157 | + |
| 158 | + [Attention 複習](https://www.backend-b.com/attention-%E8%A4%87%E7%BF%92) |
| 159 | + |
| 160 | +#### **④ Flow-VAE 解碼器(還原語音波形)** |
| 161 | + |
| 162 | +AR Transformer 的輸出是一串 **離散 audio token**,並不是你可以直接播放的音訊。 |
| 163 | + |
| 164 | +所以還需要一個模型將這些 token「解碼」成聲音波形(.wav): |
| 165 | + |
| 166 | +- 使用 **Flow-VAE** 解碼器: |
| 167 | + |
| 168 | + - Flow:學習複雜 audio token 分布 |
| 169 | + |
| 170 | + - VAE:學習連續潛在特徵(能還原音質) |
| 171 | + |
| 172 | +優於傳統 vocoder(如 MelGAN、HiFi-GAN): |
| 173 | + |
| 174 | +- 支援更強的 speaker similarity |
| 175 | + |
| 176 | +- 更低的錯字率、更穩定 |
| 177 | + |
| 178 | +**[1\. AR Transformer 產生的 audio token 是什麼?](https://www.backend-b.com/1-ar-transformer-%E7%94%A2%E7%94%9F%E7%9A%84-audio-token-%E6%98%AF%E4%BB%80%E9%BA%BC)**[2\. token 轉成潛在特徵(latent vector)](https://www.backend-b.com/2-token-%E8%BD%89%E6%88%90%E6%BD%9B%E5%9C%A8%E7%89%B9%E5%BE%B5latent-vector)[3\. **Flow-VAE**](https://www.backend-b.com/3-flow-vae) |
| 179 | + |
| 180 | + |
| 181 | + |
| 182 | +Source: <https://www.backend-b.com/minimax-voice-cloning> |
0 commit comments