# [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]
:::
可以聽和說的語音語言模型

## 語音語言模型 Speech LLM

輸入聲音 輸出聲音
跟文字比有更多的挑戰: 內容、語者、情緒、環境
Example 各大語音模型

• 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

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

把語音訊號 轉為 語音token <-- Tokenization
接龍 <-- Speech LLM
語音token 轉回 聲音訊號 <-- Detokenization

▪ How to Train Speech LLM
pre-trained model, SFT 人類標註, RLHF 提醒他好與不好
## 語音生成的基本單位是什麼?(Speech Token)

What is a "token" in the context of speech?

**▪ 若 用 ASR+TTS, 模型變成只是 TextLLM, 好嗎?**
==> 僅把語音訊號轉文字是不夠的,會忽略掉很多資訊 (ex:反諷的語氣)

**▪ 若 把取樣點當token基本單位, 好嗎?**
1秒至少8000 tokens, sequence會非常長...
 
**▪ Various Types of Speech Tokenizers**
Overview paper about Speech Tokenization
https://arxiv.org/abs/2402.13236
https://arxiv.org/abs/2502.06490

**▪ 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
 
### 方法一:SSL
現成 encoder(speech SSL model), 通常以 "0.02秒"為單位對應成一向量
可參考 [【機器學習 2022】語音與影像上的神奇自督導式學習 (Self-supervised Learning) 模型](https://www.youtube.com/watch?v=lMIN1iKYNmA)

其他步驟
**Quantization**: 把相近的向量歸類到同個id表示, K-means or VQ-layer
**Deduplicate**: 把重複的 token 拿掉
**BPE (Byte Pair Encoding)**: 將常一起出現的組合合併成新的id

==> 這一串把聲音訊號轉為離散token向量表示的過程 稱為 **Tokenization** (不需訓練)
反之 將 token 轉回聲音訊號的過程叫 **Detokenization** (需另外訓練模型)
### 方法二:Neural Speech Codec

此法 Tokenization 跟 Detokenization 是一起訓練的
像 autoencoder一樣訓練, 希望他輸入跟輸出越接近越好
`Codec = Co(compression) + dec(decompression)`
### Various Types of Speech Tokenizers

- SSL產生的token 常稱為 **"semantic token"**
但不精確 其實較像kk音標 跟語意比較沒關係
- Neural codec產生的token 常稱為 **"acoustic token"**
也不精確 不僅含有acoustic資訊 也有內容的資訊

Neural codec 一段聲音會抽"多個" token 出來 表示不同面向
可查詢 "RVQ(Residual vector Quantization)"
另一種方法是讓 semantic token 當老師, 讓其中一組 Neural codec 去學跟他越像越好(一組學phonic資訓,其他學語意資訊)
可參考 paper: SpeechTokenizer 跟 Mimi(used in Moshi)

其實不會只選一組token, 會把通通都用上去!!!
## **如何結合不同層級的 token**
 
可組合不同層次的 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)

此種生法 **難以"streaming"**(即時反應不停頓), 因模型要粗到細都生完才會進detokenizer

改成 **粗細交錯的生法** 就比較容易做 streaming
but sequence 會需要很長
 
ex: Moshi 五分鐘需要 30k 的 tokens
(右圖) 輸入上限長度達 30k 其實蠻困難的, gpt4剛出來時也未達
怎麼縮短? --> **一次(步)產生多組token**

但往往 細粒token需依靠粗粒token的資訊, 有先後順序無法同時生成
--> **Acoustic Delay**

先生 `粗_1` --> `粗_2,中_1` --> `粗_3,中_2,細_1` --> ...
就會比較容易

另一種用兩個transformer的方法,可與 Acoustic Delay 併用
---
### Why discrete tokens?
為什麼人類最後選擇了 "離散型" 當作語音的token呢?


**▪ continuous vs discrete token**
輸入 選用 **離散或連續token** 差不多(甚至連續較好 較多資訊)
輸出反而 **離散 token** 有優勢
-->因生成的特性 給定一個輸入下,可生成不同可能的輸出
(ex: "你好!" --> "你好啊"/"怎麼了"/"嗨嗨")

ex1: 輸出為 **連續** 的狀況
正確答案可以是藍色或綠色
但模型生成了兩者的混合 --> 反而不正確了:(

ex2: 輸出為 **離散** 的狀況
模型學習的是機率分佈, inference 時會 sampling 選出其中一個可能 --> ok
 
ex3: 輸出為 **連續** 的狀況(但有好好處理)
其實也可以特別設計 loss fcn, 讓他學習輸出只能跟某一個答案接近 --> ok
在影像上會這麼做
在語音上可參考 MELLE https://arxiv.org/pdf/2407.08551

**▪ Good performance in Text-to-Speech (TTS)**
語音合成(TTS)只是唸出來 沒有回覆意思
多輸入一個語音token, 可以使輸出有相同的語音特性, 合成效果更好
參考聯發科 Breezy Voice

**▪ Pre-trained Speech LLM ……**
人類的卡關
用幾萬小時的語音資料 訓練pre-trained speech model 是訓練不起來的! (效果差)
--> 以 **"文字模型"** 作為語音模型的 Foundation Model
## 以文字模型作為語音模型的 Foundation Model


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

ex: (綠線)語音文字模型speech, (黑線)文字模型text
在資料量增多時 text模型可以大幅提升能力,但對speech模型仍很有挑戰
(此僅比較文字語意的能力)
### Leveraging Text: Starting from Text LLM

現今已有許多成熟的文字模型,我們可以從文字模型開始打造語音模型

ex: 用 文字模型 當訓練語音模型時的 initialization
**▪ Leveraging Text: Speech-Text Hybrid Generation**

ex: Hybrid decoding
讓他同時生成語音tk跟文字tk,文字作為生成訓練的輔助(像心中的獨白),可使模型表現更穩定

可以有各種設計方式
**- 1. text then speech:**
文字token後面接語音token,對模型來說像是先生草稿再TTS,是可以容易做好的!
缺點是比較難做及時的回應 要等文字都產生完
**- 2. text then speech(token-level):**
先產生一個文字token再產生一個語音token,持續下去
就可以即時回應
但訓練資料需要知道如何align, align品質影響大

**- 3. text and speech at the same time**
每一步同時產生文字跟語音的token
問題是文字跟語音對應的長度往往不同,所以有以下多種處理策略

**Mini-Omni**:文字生完後面都補等待符號
**LLaMA-Omni**: 生固定數目的等待,但文字也要補一些
**Moshi**: 模型自己預測每步要等多久
哪種方法比較好尚未明朗
**▪ 考慮文字的語音 Tokenization**
 
TASTE (Text-Aligned Speech Tokenization and Embedding)
想法:其實語音token可以不保留文字資訊的

Can we have text-aligned speech representations?
希望有個 tokenizer 可以幫忙產生 **"相同長度的"** 文字/語音token
 
**network上的設計方法**
ASR: 語音辨識成文字
speeech encoder: 抽多組 representation
aggregator: 組合上述的q,k,v
detokenizer:(一個語音合成系統) 會吃 文字 跟 文字所對應的語音token, 還原成聲音訊號

讓輸入跟輸出越接近越好 --> TASTE

 
示範音檔:[[yt 1:10:27]](https://youtu.be/gkAyqoQkOSk?si=Yvtixotlsm6bPQpa&t=4227)
交換語音token
**Training Speech LLM**

語音資料 跟 文字token,通過 Tokenizer, 可得到對應的語音token
就可以拿成對token 來訓練 speech LLM
[[demo yt 1:14:16]](https://youtu.be/gkAyqoQkOSk?si=zgjb5dSskpDPKE1D&t=4456):
 
## 有了 pretrained model 後
我們已經討論了很多生成語音的方式,然後怎麼訓練呢?
### 怎麼訓練 How to Train Speech LLM

**▪ 監督式微調(Supervised Fine-tuning, SFT)**
常見做法:
拿 pretrained speech LLM 之前所用 **"文字模型"** 來生成對話
(網爬對話不一定最合適,會把 ptm 的文字能力 finetune 壞)
再用 **TTS語音合成** 唸出來,即為可拿來微調訓練的成對資料。

**▪ RLHF:** Alignment with Feedback
語音模型產生多組答案 讓人去評價好壞

學者前期較多研究 評價quality音質好壞
近期研究趨勢 聽懂聲音(文字以外的聲音) 音樂,環境音,...

RLAIF: 用另一個模型來給語音模型回饋
### Beyond the Turn-based Game

文字對話 --> **Turn-based** 是回合制的
語音對話 --> **Full-duplex** 是複雜會重疊的 要會"邊聽邊說"

模型如何邊聽邊說 參考文獻:Moshi, Dialogue GSLM
### Evaluation

要考慮文字 跟文字以外的事(語氣,情緒...)
參考 https://arxiv.org/abs/2505.15957

To Learn More
最新的語音語言模型相關論文 https://github.com/ga642381/speech-trident

overview paper
https://arxiv.org/abs/2410.03751
https://arxiv.org/abs/2410.18908
https://arxiv.org/abs/2411.13577

On The Landscape of Spoken Language Models: A Comprehensive Survey https://arxiv.org/abs/2504.08528 (李宏毅老師)
-- END --