---
# System prepended metadata

title: '[2025李宏毅ML] 第12講：語言模型如何學會說話 — 概述語音語言模型發展歷程'
tags: [2025ML]

---

# [2025李宏毅ML] 第12講：語言模型如何學會說話 — 概述語音語言模型發展歷程
:::success
:+1: 筆記全集Book 請至: https://hackmd.io/@4j/r1U_UJ_pye/
:::

:::info
2025生成式AI時代下的機器學習_李宏毅
課程網站 https://speech.ee.ntu.edu.tw/~hylee/ml/2025-spring.php

video: https://youtu.be/gkAyqoQkOSk?si=kQOsj80qTEI0kN2g
[[ppt]](https://docs.google.com/presentation/d/1JjbWkIMOWKmeouWtrMi7ph5-2j8TPlUF/edit?slide=id.p1#slide=id.p1) [[pdf]](https://speech.ee.ntu.edu.tw/~hylee/ml/ml2025-course-data/speech.pdf) 
(20250530)
:::

:::spoiler 目錄
[TOC]
:::

可以聽和說的語音語言模型
![image](https://hackmd.io/_uploads/HyyjBLwfle.png =500x)

## 語音語言模型 Speech LLM
![image](https://hackmd.io/_uploads/BkYjSIPGle.png =500x)
輸入聲音 輸出聲音
跟文字比有更多的挑戰： 內容、語者、情緒、環境

Example 各大語音模型
![image](https://hackmd.io/_uploads/ryVx8LPfge.png =500x)
• Moshi(最早釋出服務的) https://arxiv.org/abs/2410.00037 
• GLM-4-Voice https://arxiv.org/abs/2412.02612
• Step-Audio https://arxiv.org/abs/2502.11946
• Qwen2.5-Omni https://arxiv.org/abs/2503.20215
• Kimi-Audio https://arxiv.org/abs/2504.18425
• SpeechGPT https://github.com/OpenMOSS/SpeechGPT-2.0-preview
• Sesame (老師目前覺得互動最流暢的)
https://www.sesame.com/research/crossing_the_uncanny_valley_of_voice


![image](https://hackmd.io/_uploads/S1C7U8vzel.png =500x)
【生成式AI時代下的機器學習(2025)】[第六講：生成式人工智慧的後訓練(Post-Training)與遺忘問題](https://www.youtube.com/watch?v=Z6b5-77EfGk)
有提到如何讓模型學習聽懂聲音，但不遺忘文字模型的技能
而此節會較著重在 "語音是如何被產生出來"

![image](https://hackmd.io/_uploads/rkxzPIDGxx.png =500x)
把語音訊號 轉為 語音token <-- Tokenization
接龍  <-- Speech LLM
語音token 轉回 聲音訊號  <-- Detokenization

![image](https://hackmd.io/_uploads/Sy7QPIPzel.png =500x)
▪ How to Train Speech LLM
pre-trained model, SFT 人類標註, RLHF 提醒他好與不好

## 語音生成的基本單位是什麼？(Speech Token)
![image](https://hackmd.io/_uploads/rynLv8PGxl.png =500x)
What is a "token" in the context of speech?

![image](https://hackmd.io/_uploads/H1StwLwMlg.png =500x)
**▪ 若 用 ASR+TTS, 模型變成只是 TextLLM, 好嗎？**
==> 僅把語音訊號轉文字是不夠的，會忽略掉很多資訊 (ex:反諷的語氣)

![image](https://hackmd.io/_uploads/SyD9w8DGll.png =500x)
**▪ 若 把取樣點當token基本單位, 好嗎？**
1秒至少8000 tokens, sequence會非常長... 

![image](https://hackmd.io/_uploads/S14jwUPzge.png =300x) ![image](https://hackmd.io/_uploads/rygi2P8Dzgg.png =300x)
**▪ Various Types of Speech Tokenizers**
Overview paper about Speech Tokenization
https://arxiv.org/abs/2402.13236
https://arxiv.org/abs/2502.06490

![image](https://hackmd.io/_uploads/HyRy_IPfle.png =500x)
**▪ What is the best choice of tokens?**
2 benchmark, 可在訓練前 判斷 token 的好壞
- **Codec-SUPERB** https://codecsuperb.github.io/
把 token 解回來看品質(音質或任務的準確度)有無下降
- **DASB** https://poonehmousavi.github.io/DASB-website/
直接檢測 token 內涵的資訊, ex:把 token 拿去訓練情緒分類模型


## 如何產生 token
![image](https://hackmd.io/_uploads/SJZN_Lwzll.png =300x) ![image](https://hackmd.io/_uploads/H1SrOLDMxx.png =300x)
### 方法一：SSL
現成 encoder(speech SSL model), 通常以 "0.02秒"為單位對應成一向量
可參考 [【機器學習 2022】語音與影像上的神奇自督導式學習 (Self-supervised Learning) 模型](https://www.youtube.com/watch?v=lMIN1iKYNmA)

![image](https://hackmd.io/_uploads/Sk-M6LvGee.png =500x)
其他步驟
**Quantization**: 把相近的向量歸類到同個id表示, K-means or VQ-layer
**Deduplicate**: 把重複的 token 拿掉
**BPE (Byte Pair Encoding)**: 將常一起出現的組合合併成新的id

![image](https://hackmd.io/_uploads/r1J7p8DMxx.png =500x)
==> 這一串把聲音訊號轉為離散token向量表示的過程 稱為 **Tokenization** (不需訓練)
反之 將 token 轉回聲音訊號的過程叫 **Detokenization** （需另外訓練模型)

### 方法二：Neural Speech Codec
![image](https://hackmd.io/_uploads/ByOLaUPGge.png =500x)
此法 Tokenization 跟 Detokenization 是一起訓練的
像 autoencoder一樣訓練, 希望他輸入跟輸出越接近越好
`Codec = Co(compression) + dec(decompression)`

### Various Types of Speech Tokenizers
![image](https://hackmd.io/_uploads/Bk9d6UDzxg.png =500x)
- SSL產生的token 常稱為 **"semantic token"**
但不精確 其實較像kk音標 跟語意比較沒關係
- Neural codec產生的token 常稱為 **"acoustic token"**
也不精確 不僅含有acoustic資訊 也有內容的資訊

![image](https://hackmd.io/_uploads/By95pUwfll.png =500x)
Neural codec 一段聲音會抽"多個" token 出來 表示不同面向
可查詢 "RVQ(Residual vector Quantization)"

另一種方法是讓 semantic token 當老師, 讓其中一組 Neural codec 去學跟他越像越好(一組學phonic資訓,其他學語意資訊)
可參考 paper: SpeechTokenizer 跟 Mimi(used in Moshi)
![image](https://hackmd.io/_uploads/BJai6LPMgg.png =500x)
其實不會只選一組token, 會把通通都用上去!!!

## **如何結合不同層級的 token**
![image](https://hackmd.io/_uploads/Bk7CTIvzlx.png =350x) ![image](https://hackmd.io/_uploads/HyqeRUvzlg.png =350x)

可組合不同層次的 token, 粗到細粒度的資訊(內容-->聲音訊號)
不同層次的可以從不同的LLM模型產生(架構也可以不同)
ex: autoregressive model 生成慢 但品質比較高 [[去年筆記]](https://hackmd.io/uSMSupRPR2Kz71Tvrt4F7w?view#%E7%94%9F%E6%88%90%E7%9A%84%E7%AD%96%E7%95%A5Autoregressive-Generation-AR)

![image](https://hackmd.io/_uploads/B1N-AUDzgl.png =500x)
此種生法 **難以"streaming"**(即時反應不停頓), 因模型要粗到細都生完才會進detokenizer

![image](https://hackmd.io/_uploads/H1zmRIPzle.png =500x)
改成 **粗細交錯的生法** 就比較容易做 streaming
but sequence 會需要很長
![image](https://hackmd.io/_uploads/SyC70UDGgx.png =300x) ![image](https://hackmd.io/_uploads/SkMBAIDzee.png =300x)
ex: Moshi 五分鐘需要 30k 的 tokens
(右圖) 輸入上限長度達 30k 其實蠻困難的, gpt4剛出來時也未達

怎麼縮短？ --> **一次(步)產生多組token**
![image](https://hackmd.io/_uploads/r1-LCUvfgx.png =500x)
但往往 細粒token需依靠粗粒token的資訊, 有先後順序無法同時生成
--> **Acoustic Delay**
![image](https://hackmd.io/_uploads/SJRDAUPfge.png =500x)
先生 `粗_1` --> `粗_2,中_1` --> `粗_3,中_2,細_1` --> ... 
就會比較容易

![image](https://hackmd.io/_uploads/SJ0dCIDGgl.png =500x)
另一種用兩個transformer的方法,可與 Acoustic Delay 併用

---
### Why discrete tokens? 
為什麼人類最後選擇了 "離散型" 當作語音的token呢？
![image](https://hackmd.io/_uploads/HkjtCUDzgg.png =500x)
![image](https://hackmd.io/_uploads/Byzo0IDGex.png =500x)
**▪ continuous vs discrete token**
輸入 選用 **離散或連續token** 差不多(甚至連續較好 較多資訊)
輸出反而 **離散 token** 有優勢
-->因生成的特性 給定一個輸入下,可生成不同可能的輸出
(ex: "你好!" --> "你好啊"/"怎麼了"/"嗨嗨")

![image](https://hackmd.io/_uploads/SyS2A8wfgx.png =500x)
ex1: 輸出為 **連續** 的狀況
正確答案可以是藍色或綠色
但模型生成了兩者的混合 --> 反而不正確了:(
![image](https://hackmd.io/_uploads/SybaRUwfee.png =500x)
ex2: 輸出為 **離散** 的狀況
模型學習的是機率分佈, inference 時會 sampling 選出其中一個可能 --> ok

![image](https://hackmd.io/_uploads/BJm008Dzxg.png =300x) ![image](https://hackmd.io/_uploads/Hk7J1PPGgx.png =300x)
ex3: 輸出為 **連續** 的狀況(但有好好處理)
其實也可以特別設計 loss fcn, 讓他學習輸出只能跟某一個答案接近 --> ok
在影像上會這麼做

在語音上可參考 MELLE https://arxiv.org/pdf/2407.08551

![image](https://hackmd.io/_uploads/HyNbywwGeg.png =500x)
**▪ Good performance in Text-to-Speech (TTS)**
語音合成(TTS)只是唸出來 沒有回覆意思
多輸入一個語音token, 可以使輸出有相同的語音特性, 合成效果更好
參考聯發科 Breezy Voice

![image](https://hackmd.io/_uploads/rJqfyDDGee.png =500x)
**▪ Pre-trained Speech LLM ……**
人類的卡關
用幾萬小時的語音資料 訓練pre-trained speech model 是訓練不起來的! (效果差)
--> 以 **"文字模型"** 作為語音模型的 Foundation Model

## 以文字模型作為語音模型的 Foundation Model
![image](https://hackmd.io/_uploads/SJr4kPPzxg.png =500x)

![image](https://hackmd.io/_uploads/BkjSJwDGxl.png =500x)
人類1分鐘約可講100個token
1百萬(1M)小時 可以產生 "6B" 的文字token
但 LLaMa3 訓練 pre-trained 可是用了 "15T" 的文字token
相當於285k年才唸的完的語音資料...
```
Text is a compressed version of speech.
文字是語音的壓縮版!!
```
--> 語音更複雜 保有更多資訊 所以訓練在語音上是更困難的

![image](https://hackmd.io/_uploads/SktDkDwMle.png =500x)
ex: (綠線)語音文字模型speech, (黑線)文字模型text
在資料量增多時 text模型可以大幅提升能力,但對speech模型仍很有挑戰
(此僅比較文字語意的能力)

### Leveraging Text: Starting from Text LLM
![image](https://hackmd.io/_uploads/SJo_yPPfxg.png =500x)
現今已有許多成熟的文字模型，我們可以從文字模型開始打造語音模型
![image](https://hackmd.io/_uploads/BJFKkvwfex.png =500x)
ex: 用 文字模型 當訓練語音模型時的 initialization

**▪ Leveraging Text: Speech-Text Hybrid Generation**
![image](https://hackmd.io/_uploads/r15nyDwMgx.png =500x)
ex: Hybrid decoding
讓他同時生成語音tk跟文字tk,文字作為生成訓練的輔助(像心中的獨白),可使模型表現更穩定
![image](https://hackmd.io/_uploads/SkI61vDMeg.png =500x)
可以有各種設計方式
**- 1. text then speech:**
文字token後面接語音token,對模型來說像是先生草稿再TTS,是可以容易做好的!
缺點是比較難做及時的回應 要等文字都產生完
**- 2. text then speech(token-level):**
先產生一個文字token再產生一個語音token,持續下去
就可以即時回應
但訓練資料需要知道如何align, align品質影響大
![image](https://hackmd.io/_uploads/Syp1gPvMxx.png =500x)
**- 3. text and speech at the same time**
每一步同時產生文字跟語音的token
問題是文字跟語音對應的長度往往不同，所以有以下多種處理策略
![image](https://hackmd.io/_uploads/SJOlxvwMlg.png =500x)
**Mini-Omni**:文字生完後面都補等待符號
**LLaMA-Omni**: 生固定數目的等待,但文字也要補一些
**Moshi**: 模型自己預測每步要等多久
哪種方法比較好尚未明朗

**▪ 考慮文字的語音 Tokenization**
![image](https://hackmd.io/_uploads/Hy9UlDDfll.png =300x) ![image](https://hackmd.io/_uploads/rkOuxwPzgl.png =300x)
TASTE (Text-Aligned Speech Tokenization and Embedding)
想法：其實語音token可以不保留文字資訊的
![image](https://hackmd.io/_uploads/H1iYxvwGxl.png =500x)
Can we have text-aligned speech representations?
希望有個 tokenizer 可以幫忙產生 **"相同長度的"** 文字/語音token
![image](https://hackmd.io/_uploads/Sytogwwfgg.png =300x) ![image](https://hackmd.io/_uploads/rykpePvfxg.png =300x)
**network上的設計方法**
ASR: 語音辨識成文字
speeech encoder: 抽多組 representation
aggregator: 組合上述的q,k,v
detokenizer:(一個語音合成系統) 會吃 文字 跟 文字所對應的語音token, 還原成聲音訊號
![image](https://hackmd.io/_uploads/r1p6ewDMex.png =500x)
讓輸入跟輸出越接近越好 --> TASTE
![image](https://hackmd.io/_uploads/S1PWWwvGxx.png =500x) 

![image](https://hackmd.io/_uploads/ryk7-vwzee.png =300x) ![image](https://hackmd.io/_uploads/HksX-DPGge.png =300x)
示範音檔：[[yt 1:10:27]](https://youtu.be/gkAyqoQkOSk?si=Yvtixotlsm6bPQpa&t=4227)
交換語音token

**Training Speech LLM**
![image](https://hackmd.io/_uploads/r11S-wPMxl.png =500x)
語音資料 跟 文字token,通過 Tokenizer, 可得到對應的語音token
就可以拿成對token 來訓練 speech LLM
[[demo yt 1:14:16]](https://youtu.be/gkAyqoQkOSk?si=zgjb5dSskpDPKE1D&t=4456): 
![image](https://hackmd.io/_uploads/rkb8bPvGle.png =300x) ![image](https://hackmd.io/_uploads/Hy9wZwPMgx.png =300x)

## 有了 pretrained model 後
我們已經討論了很多生成語音的方式，然後怎麼訓練呢？

### 怎麼訓練 How to Train Speech LLM
![image](https://hackmd.io/_uploads/By7qWPPfge.png =500x)
**▪ 監督式微調(Supervised Fine-tuning, SFT)**
常見做法：
拿 pretrained speech LLM 之前所用 **"文字模型"** 來生成對話
(網爬對話不一定最合適，會把 ptm 的文字能力 finetune 壞)
再用 **TTS語音合成** 唸出來，即為可拿來微調訓練的成對資料。

![image](https://hackmd.io/_uploads/Sk9iZwwGxl.png =500x)
**▪ RLHF：** Alignment with Feedback
語音模型產生多組答案 讓人去評價好壞
![image](https://hackmd.io/_uploads/rkdnWDvzlg.png =500x)
學者前期較多研究 評價quality音質好壞
近期研究趨勢 聽懂聲音(文字以外的聲音) 音樂,環境音,...

![image](https://hackmd.io/_uploads/rkDpbPPzgx.png =500x)
RLAIF： 用另一個模型來給語音模型回饋

### Beyond the Turn-based Game
![image](https://hackmd.io/_uploads/rkuR-Pvfgl.png =500x)
文字對話 --> **Turn-based** 是回合制的
語音對話 --> **Full-duplex** 是複雜會重疊的 要會"邊聽邊說"
![image](https://hackmd.io/_uploads/r10JMvvMgg.png =500x)
模型如何邊聽邊說 參考文獻：Moshi, Dialogue GSLM

### Evaluation
![image](https://hackmd.io/_uploads/BkU-zwPGlg.png =500x)
要考慮文字 跟文字以外的事(語氣,情緒...)
參考 https://arxiv.org/abs/2505.15957

![image](https://hackmd.io/_uploads/rkWzGDwfll.png =500x)
To Learn More
最新的語音語言模型相關論文 https://github.com/ga642381/speech-trident

![image](https://hackmd.io/_uploads/Skxrfvvflx.png =500x)
overview paper
https://arxiv.org/abs/2410.03751
https://arxiv.org/abs/2410.18908
https://arxiv.org/abs/2411.13577

![image](https://hackmd.io/_uploads/ry0UGDwzxx.png =500x)
On The Landscape of Spoken Language Models: A Comprehensive Survey https://arxiv.org/abs/2504.08528 (李宏毅老師)

-- END --


