---
# System prepended metadata

title: GPT-4o 背後可能的語音技術猜測
tags: [生成式AI導論 2024]

---

# GPT-4o 背後可能的語音技術猜測

## GPT-4o語音模式

* 4O可以有豐富的語音風格
* 可以理解聲音內容以外的資訊(例如語氣比較喘可以理解那個人很累)
* 發出非語言性聲音(笑聲)
* 自然而即時的互動

## 使用現有(舊有)技術

![image](https://hackmd.io/_uploads/B1ED45WGee.png)
這是舊有技術，直接將語音轉為文字輸入，再將生成結果轉回語音。
![image](https://hackmd.io/_uploads/HyRcN5WMlx.png)
接著也可以加上情緒偵測模組偵測輸入的聲音、生成時提供額外資訊給語音合成模型要求語氣、透過插入動作，讓語音生成時有額外的非語言聲音

## GPT-4o

4o是個End-to-end的模型架構，直接使用多模態作為模型輸入。
![image](https://hackmd.io/_uploads/ByQWSqWGgx.png)

聲音訊號相較於文字接龍而言，需要處理的數值非常多。以16Khz的訊號而言每秒就有16K個數值
![image](https://hackmd.io/_uploads/SJ7sBc-zex.png)

因此現今較常見的方法是使用Encoder，將聲音訊號Encode成Codebook中所包含，模型能購理解的壓縮聲音，稱為Speech Unit。Decoder則可以將Speech Unit還原回音訊。
![image](https://hackmd.io/_uploads/HkCpScZfee.png)

語言模型則是透過Speech Unit進行接龍，而不是直接使用聲音訊號接龍
![image](https://hackmd.io/_uploads/Sy73UcZMge.png)

但是全用Speech Unit，對於說話中的文字來說，會造成很多Unit與現有的文字符號重複。因此可以將兩者結合，避免過多的文字Speech Unit，同時又保留Speech Unit的訊號理解。
![image](https://hackmd.io/_uploads/Hk7_v5bGxg.png)

另外還需要Speaker Diarization(語者自動分段標記)的技術![image](https://hackmd.io/_uploads/H1yRw9ZGeg.png)
將兩者結合成為這樣的架構![image](https://hackmd.io/_uploads/BJAADqbMll.png)

## 模型訓練

訓練文字接龍需要大量的文字資料，訓練聲音接龍同理也需要大量的語音資料![image](https://hackmd.io/_uploads/Bkufd9bGge.png)

因此紐約時報過去曾[報導](https://www.nytimes.com/2024/04/06/technology/tech-giants-harvest-data-artificial-intelligence.html)Open AI用了超過100萬小時的YouTube影片訓練模型，似乎對的上了

但網路上的許多影片都有BGM，這也成為了模型的學習，再Demo影片中也有顯現出來

100W小時的語音也只是60億個文字token，大約是LLaMA3 Pre-train資料的1/2500而已。因此老師推測有使用文字模型的Pre-tain資料。

## 模型Alignment

訓練完也需要Alignment，因此也需要蒐集對應的回答。![image](https://hackmd.io/_uploads/r1t0YcZzeg.png)

可以請一個人錄音，錄下那個人的對話
* 也許不用太多資料，因為已經有Pre-trainxk7
* 可以用語音轉換，將任何人轉為Sky的聲音

## 文字與語音的不同

文字我們會按下Enter，告訴模型我們結束了。
而語音不會，模型需要自己判斷是不是說完話了。

2022年已經有將模型"聽"與"說"分開來的技術了([Dialogue GSLM](https://arxiv.org/abs/2203.16502))

![image](https://hackmd.io/_uploads/rJ2qqcWfll.png)
模型會同時讀取聽跟說的頻道，來決定接下來要不要說話。

![image](https://hackmd.io/_uploads/HyC2c5-fgg.png)
當聽到人還在說話時就保持安靜

![image](https://hackmd.io/_uploads/Bkgyi5WGxl.png)
也可以適當的給予回應

![image](https://hackmd.io/_uploads/SySeoqbGeg.png)
在聽到長時間安靜時則可以輸出

![image](https://hackmd.io/_uploads/B1hPo5-Mlg.png)
當然也可以應用到更多模態中
