譯者 | 朱先忠
審校 | 重樓
Sesame使用一種名為殘差向量量化的深度學(xué)習(xí)技術(shù)對(duì)語(yǔ)音進(jìn)行編碼
最近,Sesame人工智能公司發(fā)布了他們最新的語(yǔ)音轉(zhuǎn)語(yǔ)音(Speech-to-Speech)模型的演示。這是一個(gè)非常擅長(zhǎng)說(shuō)話的對(duì)話式人工智能代理,它們能夠提供相關(guān)的答案,并帶有表情地說(shuō)話,而且說(shuō)實(shí)話,它們非常有趣,互動(dòng)性很強(qiáng)。
請(qǐng)注意,有關(guān)這方面的系統(tǒng)的技術(shù)論文尚未發(fā)布,但他們確實(shí)發(fā)布了一篇簡(jiǎn)短的博客文章,并提供了有關(guān)他們使用的技術(shù)和他們所構(gòu)建的先前算法的大量信息。
謝天謝地,他們提供了足夠的信息,讓我能夠撰寫(xiě)這篇文章并制作一個(gè)YouTube視頻。
訓(xùn)練對(duì)話語(yǔ)音模型
Sesame是一個(gè)會(huì)話語(yǔ)音模型,簡(jiǎn)稱(chēng)CSM。它輸入文本和音頻,并將語(yǔ)音生成音頻。雖然他們沒(méi)有在文章中透露其訓(xùn)練數(shù)據(jù)來(lái)源,但我們?nèi)匀豢梢試L試進(jìn)行可靠的猜測(cè)。上述博客文章大量引用了另一個(gè)CSM,即2024年的Moshi模型,幸運(yùn)的是,Moshi模型的創(chuàng)建者在他們的論文中透露了他們的數(shù)據(jù)來(lái)源。Moshi模型使用了700萬(wàn)小時(shí)的無(wú)監(jiān)督語(yǔ)音數(shù)據(jù)、170小時(shí)的自然和腳本對(duì)話(用于多流訓(xùn)練)以及2000多個(gè)小時(shí)的電話對(duì)話(Fischer數(shù)據(jù)集)。
Sesame模型是建立在Moshi模型論文(2024)基礎(chǔ)上的
生成音頻到底需要什么?
原始形式的音頻只是一長(zhǎng)串振幅值 ——波形。例如,如果以24kHz的頻率采樣音頻,則每秒捕獲24,000個(gè)浮點(diǎn)值。
這里使用24000個(gè)值來(lái)表示1秒的語(yǔ)音?。▓D片由作者生成)
當(dāng)然,處理一秒鐘的數(shù)據(jù)中的24000個(gè)浮點(diǎn)值是非常耗費(fèi)資源的,尤其是因?yàn)門(mén)ransformer的計(jì)算量會(huì)隨著序列長(zhǎng)度的平方而增長(zhǎng)。如果我們能夠壓縮這個(gè)信號(hào)并減少處理音頻所需的樣本數(shù)量,那就太好了。
后面,我們將深入探討Mimi編碼器,特別是殘差向量量化器(RVQ),它們是當(dāng)今深度學(xué)習(xí)中音頻/語(yǔ)音建模的支柱。文章最后,我們將介紹Sesame模型如何使用其特殊的雙轉(zhuǎn)換器架構(gòu)生成音頻。
預(yù)處理音頻
卷積在壓縮和特征提取方面大有裨益。Sesame模型使用Mimi語(yǔ)音編碼器來(lái)處理音頻。Mimi也曾在前面提到的Moshi論文中被介紹過(guò)。Mimi是一個(gè)自監(jiān)督音頻編解碼器模型,它首先將音頻波形轉(zhuǎn)換為離散的“潛在”標(biāo)記,然后重建原始信號(hào)。Sesame僅使用Mimi的編碼器部分來(lái)對(duì)輸入的音頻進(jìn)行標(biāo)記。讓我們來(lái)仔細(xì)了解一下這是如何操作的。
Mimi輸入24Khz的原始語(yǔ)音波形,并將其傳入多個(gè)步幅卷積層,對(duì)信號(hào)進(jìn)行下采樣,步幅分別為4、5、6、8和2。這意味著,第一個(gè)CNN模塊將音頻下采樣4倍,然后是5倍,再是6倍,以此類(lèi)推。最終,它以1920的倍數(shù)下采樣,將幀率降至每秒12.5幀。
卷積塊還將原始浮點(diǎn)值投影到512的嵌入維度。每個(gè)嵌入聚合原始1D波形的局部特征。1秒的音頻現(xiàn)在表示為大約12個(gè)大小為512的向量。這樣,Mimi將序列長(zhǎng)度從24000減少到僅12,并將它們轉(zhuǎn)換為密集的連續(xù)向量。
在應(yīng)用任何量化之前,Mimi編碼器會(huì)將輸入的24KHz音頻下采樣1920倍,并將其嵌入到512維空間中。換句話說(shuō),每秒可以獲得12.5幀,每幀都是一個(gè)512維向量(圖片來(lái)自作者視頻)。
什么是音頻量化?
給定卷積層之后獲得的連續(xù)嵌入,我們希望對(duì)輸入語(yǔ)音進(jìn)行標(biāo)記化。如果我們可以將語(yǔ)音表示為一系列標(biāo)記,那么我們就可以應(yīng)用標(biāo)準(zhǔn)的語(yǔ)言學(xué)習(xí)Transformer來(lái)訓(xùn)練生成模型。
Mimi使用殘差向量量化器(RVQ分詞器)來(lái)實(shí)現(xiàn)這一點(diǎn)。我們很快會(huì)討論殘差部分,但首先,我們先來(lái)看看一個(gè)簡(jiǎn)單的vanilla向量量化器是如何做的。
向量量化
向量量化背后的想法很簡(jiǎn)單:訓(xùn)練一個(gè)碼本(codebook ),它是1000個(gè)隨機(jī)向量代碼的集合,大小均為512(與嵌入維度相同)。
一個(gè)Vanilla向量量化器。訓(xùn)練一個(gè)嵌入的碼本。給定一個(gè)輸入嵌入,我們將其映射/量化到最近的碼本條目(作者視頻截圖)
然后,給定輸入向量,我們將其映射到碼本中最近的向量——本質(zhì)上就是將一個(gè)點(diǎn)映射到其最近的聚類(lèi)中心。這意味著,我們有效地創(chuàng)建了一個(gè)固定的標(biāo)記詞匯表來(lái)表示每個(gè)音頻幀,因?yàn)闊o(wú)論輸入幀的嵌入是什么,我們都將用最近的聚類(lèi)質(zhì)心來(lái)表示它。
殘差向量量化
簡(jiǎn)單的向量量化的問(wèn)題在于,由于我們將每個(gè)向量映射到其聚類(lèi)的質(zhì)心,信息損失可能過(guò)高。這種“映射”很少是完美的,因此原始嵌入和最近的碼本之間總是存在誤差。
殘差向量量化的核心思想是,它不僅僅局限于一個(gè)碼本。相反,它嘗試使用多個(gè)碼本來(lái)表示輸入向量。
- 首先,使用第一個(gè)碼本量化原始向量。
- 然后,從原始向量中減去該質(zhì)心。剩下的就是殘差—— 即第一次量化中未捕獲的誤差。
- 現(xiàn)在取這個(gè)殘差,并使用充滿全新代碼向量的第二個(gè)代碼本 再次對(duì)其進(jìn)行量化——再次將其捕捉到最近的質(zhì)心。
- 減去這個(gè)值,你會(huì)得到一個(gè)更小的殘差。用第三個(gè)碼本再次量化……你可以對(duì)任意數(shù)量的碼本重復(fù)此操作。
殘差向量量化器(RVQ)使用新的碼本和VQ層對(duì)輸入嵌入進(jìn)行分層編碼,以表示先前碼本的誤差
每一步都會(huì)逐層捕捉上一輪遺漏的細(xì)節(jié)。假設(shè)你對(duì)N個(gè)碼本重復(fù)此操作,那么你將從每個(gè)量化階段獲得一個(gè)由N個(gè)離散標(biāo)記組成的集合,用來(lái)表示一個(gè)音頻幀。
RVQ最酷的地方在于,它們被設(shè)計(jì)成在第一個(gè)量化器中具有較高的歸納偏差,傾向于捕捉最重要的內(nèi)容。在后續(xù)的量化器中,它們會(huì)學(xué)習(xí)越來(lái)越細(xì)粒度的特征。
如果您熟悉PCA,可以認(rèn)為第一個(gè)碼本包含主要主成分,用于捕獲最關(guān)鍵的信息。后續(xù)碼本代表高階成分,包含更多細(xì)節(jié)信息。
殘差向量量化器(RVQ)使用多個(gè)碼本對(duì)輸入向量進(jìn)行編碼——每個(gè)碼本一個(gè)條目(作者視頻截圖)
聲學(xué)與語(yǔ)義密碼本
由于Mimi是針對(duì)音頻重建任務(wù)進(jìn)行訓(xùn)練的,因此編碼器會(huì)將信號(hào)壓縮到離散化的潛在空間,而解碼器則會(huì)從潛在空間將其重建回來(lái)。在針對(duì)此任務(wù)進(jìn)行優(yōu)化時(shí),RVQ碼本會(huì)學(xué)習(xí)在壓縮的潛在空間內(nèi)捕捉輸入音頻的基本聲學(xué)內(nèi)容。
Mimi還單獨(dú)訓(xùn)練了一個(gè)碼本(原始VQ),該碼本專(zhuān)注于嵌入音頻的語(yǔ)義內(nèi)容。正因如此,Mimi被稱(chēng)為“分割RVQ分詞器”——它將量化過(guò)程劃分為兩個(gè)獨(dú)立的并行路徑:一個(gè)用于語(yǔ)義信息,另一個(gè)用于聲學(xué)信息。
Mimi架構(gòu)(來(lái)源:Moshi論文)許可證:免費(fèi)
為了訓(xùn)練語(yǔ)義表征,Mimi使用知識(shí)蒸餾技術(shù),并使用現(xiàn)有的語(yǔ)音模型WavLM作為語(yǔ)義教師。Mimi引入了一個(gè)額外的損失函數(shù),用于減小語(yǔ)義RVQ代碼與WavLM生成的嵌入之間的余弦距離。
音頻解碼器
給定一個(gè)包含文本和音頻的對(duì)話,我們首先使用文本和音頻標(biāo)記器將它們轉(zhuǎn)換為一個(gè)標(biāo)記嵌入序列。然后,該標(biāo)記序列作為時(shí)間序列輸入到轉(zhuǎn)換器模型中。在作者的博客文章中,該模型被稱(chēng)為自回歸骨干轉(zhuǎn)換器(Autoregressive Backbone Transformer)。它的任務(wù)是處理該時(shí)間序列并輸出“第零個(gè)”碼本標(biāo)記。
然后,一個(gè)稱(chēng)為音頻解碼器的輕量級(jí)轉(zhuǎn)換器會(huì)根據(jù)主干轉(zhuǎn)換器生成的第零個(gè)代碼,重建下一個(gè)碼本標(biāo)記。需要注意的是,由于主干轉(zhuǎn)換器能夠看到整個(gè)過(guò)去的序列,因此第零個(gè)代碼已經(jīng)包含了大量關(guān)于對(duì)話歷史的信息。輕量級(jí)音頻解碼器僅對(duì)第零個(gè)標(biāo)記進(jìn)行操作,并生成其余N-1個(gè)代碼。這些代碼由N-1個(gè)不同的線性層生成,這些線性層輸出從其對(duì)應(yīng)碼本中選擇每個(gè)代碼的概率。
你可以把這個(gè)過(guò)程想象成在純文本的LLM中根據(jù)詞匯表預(yù)測(cè)文本標(biāo)記。只不過(guò),基于文本的LLM只有一個(gè)詞匯表,而RVQ標(biāo)記器則以N個(gè)碼本的形式擁有多個(gè)詞匯表,因此你需要訓(xùn)練一個(gè)單獨(dú)的線性層來(lái)為每個(gè)詞匯表建模碼本。
Sesame架構(gòu)
最后,所有碼字生成完成后,我們將它們聚合起來(lái),形成組合的連續(xù)音頻嵌入。最后一步是將音頻轉(zhuǎn)換回波形。為此,我們應(yīng)用轉(zhuǎn)置卷積層將嵌入從12.5Hz升頻回kHz波形音頻。本質(zhì)上,這相當(dāng)于逆轉(zhuǎn)了我們?cè)谝纛l預(yù)處理過(guò)程中最初應(yīng)用的變換。
總結(jié)
觀看本文附帶的視頻?。ㄗ髡咭曨l)
以下是針對(duì)Sesame模型的一些要點(diǎn)的總結(jié):
- Sesame建立在多模式對(duì)話語(yǔ)音模型或CSM之上。
- 文本和音頻一起被標(biāo)記以形成標(biāo)記序列,并輸入到主干轉(zhuǎn)換器中,該轉(zhuǎn)換器對(duì)該序列進(jìn)行自回歸處理。
- 雖然文本的處理方式與其他基于文本的LLM類(lèi)似,但音頻的處理則直接基于其波形表示。他們使用Mimi編碼器,通過(guò)分割RVQ標(biāo)記器將波形轉(zhuǎn)換為潛在代碼。
- 多模態(tài)骨干變換器消耗一系列標(biāo)記并預(yù)測(cè)下一個(gè)第零個(gè)碼字。
- 另一個(gè)稱(chēng)為音頻解碼器的輕量級(jí)轉(zhuǎn)換器根據(jù)第零個(gè)代碼字預(yù)測(cè)下一個(gè)代碼字。
- 最終的音頻幀表示是通過(guò)組合所有生成的碼字并上采樣回波形表示而生成的。
參考文獻(xiàn)和必讀論文
- 查看我的ML YouTube頻道
- Sesame模型博客文章和演示
- 相關(guān)論文:
Moshi:https://arxiv.org/abs/2410.00037
SoundStream:https://arxiv.org/abs/2107.03312
HuBert:https://arxiv.org/abs/2106.07447
Speech Tokenizer:https://arxiv.org/abs/2308.16692
譯者介紹
朱先忠,51CTO社區(qū)編輯,51CTO專(zhuān)家博客、講師,濰坊一所高校計(jì)算機(jī)教師,自由編程界老兵一枚。
原文標(biāo)題:Sesame Speech Model: How This Viral AI Model Generates Human-Like Speech,作者:Avishek Biswas