G2P 縮小語音模型
背景
字素 (Graphemes) 是書寫系統的單位(例如,英語中的字母)。音素 (Phonemes) 是獨特的發音單位。
G2P (Grapheme-to-Phoneme) 是將字素轉換為音素的問題,通常以多對多、語言特定的方式進行。一個字素字串可以匹配多個音素字串。
- 你能替我再讀一遍 (reread) 嗎:
reread => /ɹiɹˈid/
(re-REED) - 是的,我替你再讀了一遍 (reread):
reread => /ɹiɹˈɛd/
(re-RED) - 我們再讀一遍 (reread):
reread => /ɹˈiɹid/
(RE-reed)
多個字素字串可以匹配相同的音素字串,例如 cereal, serial
和 ate, eight
。
為了本次討論的目的:文字模型生成文字,影像模型生成影像,影片模型生成影片,音訊模型生成音訊。語音模型是音訊模型的一個子型別。
generative_models/
├── text/
│ ├── GPT
│ └── ...
├── image/
├── video/
├── ...
└── audio/
├── speech/
│ ├── Kokoro-82M
│ └── ...
├── music/
├── sfx/
└── ...
G2P 壓縮假說
假說:G2P 輸入預處理能夠壓縮語音模型,無論是模型大小還是資料集大小。換句話說,如果您在將文字傳遞給 TTS 模型之前對其進行 G2P 處理,您應該能夠以更少的引數和更少的資料獲得可比的 Elo 評分。後者是一個推論,因為眾所周知,更大的模型對資料需求更大。
這一理解基於我自己的經驗觀察和體驗——我沒有消融表可以展示給您。這也很可能不是一個新穎的觀察,對許多研究人員來說可能顯而易見。
您的資料熵越低,您的模型在達到某些目標效能的同時可以越小。即使是一個微小的數字分類器也能在 MNIST 上獲得 99% 的效能。一個性能相似的貓狗影像分類器——其中貓狗可以面向任何方向——將需要大得多。
使用音素而不是原始文字作為輸入,大大降低了 TTS 問題的輸入熵。
重量級:數十億引數
進行端到端字素輸入、音訊輸出的語音模型,隱式地將其一部分引數專門用於 G2P。通常,此類模型從學習到的碼本中預測潛在音訊標記,具有相對較大的引數數量和相應的訓練資料集。
長尾鸚鵡 (Parakeet)
例如,Darefsky 等人於 2024 年年中描述的 Parakeet 模型,訓練了一個“30 億引數的編碼器-解碼器 Transformer 模型”,使用了“約 10 萬小時的音訊-轉錄對資料集”,因此展現出卓越的自然度,以及發出笑聲、咳嗽等聲音的能力。Parakeet 預測潛在標記時“以原始文字為條件”,因此不涉及顯式 G2P 預處理。兩點旁白:
- 在機器學習中,一分錢一分貨,而模型的引數數量(在很多方面)就是它的價格。
- 由於 Parakeet 是在播客上訓練的,它的一些樣本聽起來與 NotebookLM 的性質相似。這純屬猜測,但如果 NotebookLM 使用類似的 Transformer+碼本方法,我不會感到驚訝,儘管我猜測為了成本效益,它的規模會更小。無論是 Parakeet 還是 NotebookLM 都不是第一個使用這種方法的產品。
拉薩 (Llasa)
Llasa 是一個文字轉語音(TTS)系統,它透過整合來自 XCodec2 碼本(包含 65,536 個標記)的語音標記來擴充套件基於文字的 LLaMA(1B、3B 和 8B)語言模型。Llasa 在一個包含 250,000 小時中英文語音資料的資料集上進行了訓練。該模型能夠僅根據輸入文字或利用給定語音提示生成語音。
與 XCodec2 碼本中的 65k 個標記相比,G2P 預處理後您可能只有幾十個音素。
輕量級:數百萬引數
那麼,如果 Transformer 可以在模型內部透過神經網路解決 G2P 問題,為什麼還要在輸入端進行 G2P 預處理呢?正如假設中所述:模型壓縮。
如果 Parakeet (3B) 代表了 TTS 模型的重量級,那麼 Piper 則屬於輕量級。一個 Piper 模型擁有 500 萬到 3200 萬引數,採用 VITS 架構,並以 espeak-ng
音素作為輸入,快速生成語音,儘管質量相對較低,但對於如此小的模型來說是預期的。Parakeet 和 Piper 模型的引數數量相差 2-3 個數量級,即 100-1000 倍。
G2P 型別:查詢、規則和神經網路
G2P 是實現從重量級到輕量級語音模型(可能存在損耗)壓縮的因素之一。值得注意的 G2P 類別包括:
- 像 CMUdict 這樣的發音詞典簡單但脆弱。如果你的詞典完美且發音與上下文無關,那麼任何詞典匹配都應該是完美的,但詞典未命中或上下文相關的發音則需要更復雜的 G2P 解決方案。
espeak-ng
是一個基於規則的 G2P 引擎,其 README 中寫道:“體積小巧。程式及其資料,包括多種語言,總計約幾兆位元組。” 基於規則的 G2P 仍然很快,但可能因規則覆蓋不足(例如缺少貨幣或時間的正則表示式)或規則存在例外(罕見/外來詞)而失敗。- 理論上,神經 G2P 的泛化能力應遠優於上述兩種方法,但通常執行成本更高,並且像其他使用 softmax 的 Transformer 應用一樣,可能會以不透明的方式產生幻覺。
我目前正在開發一種名為 Misaki 的混合 G2P 解決方案,它從查詢表和一些非常基本的英語規則開始。對於超出詞彙的單詞,它會回退到可配置的“莊家選擇”,這可能是一個基於規則的系統(如 espeak-ng
),或者一個神經 seq2seq 模型。在某些特定情況下,例如英語同形異義詞 axes bass bow lead tear
,G2P 應該升級到神經網路(仍待完成)。希望這種混合解決方案能在速度和效能之間取得良好平衡,同時保持靈活性和可解釋性。在這種機制下,G2P 失敗不再是某種黑箱無法解釋的幻覺,而更像是“它只是不在詞典中”。
G2P 不是免費的午餐
就像臭名昭著的草莓分詞盲點一樣,如果您進行顯式 G2P 預處理,那麼任何上游的 G2P 細微差別和錯誤都將對下游產生負面影響,您的語音模型可能無法從中恢復。此外,除非您能找到一種有效的 G2P 方案來處理笑聲/咳嗽/嘆息等,或者透過其他方式(可能是擴散模型)來模擬這些聲音,否則純粹基於 G2P 的語音模型不太可能像端到端語音模型那樣表達清晰和有效。
如果您的 G2P 是神經網路的,您必須在語音模型之前增加神經網路 G2P 的時間和計算成本,這會增加延遲。
到目前為止,我發現 G2P 是一項針對不同語言的任務。擁有一個英語 G2P 引擎並不意味著您也能很好地處理中文 G2P。
腳註
這篇文章缺乏學術論文的嚴謹性,但它基於實踐經驗。G2P 假說完全有可能落入“痛苦的教訓”。即便沒有,改進的硬體和新架構也可能意味著,如果人們能夠在未來的手機上以幾乎零延遲執行今天的 B 引數語音模型,那麼最終,沒有人會真正關心 M 引數語音模型,就像現在沒有人真正關心教育之外的 K 引數語言模型一樣。
但“最終”還沒有到來。我懷疑 M 引數語音模型在至少近期內仍將具有相關性。
本文是對“Kokoro TTS 引數如此之少卻表現如此出色”這一問題的一個潛在答案。
