張小峰,謝 鈞,羅健欣,楊 濤
1.中國人民解放軍陸軍工程大學(xué) 指揮控制工程學(xué)院,南京210007
2.中國人民解放軍31121部隊(duì)
語音合成是將文本轉(zhuǎn)化成語音的技術(shù),在日常生活中有著廣泛的應(yīng)用,比如智能客服、虛擬助手、智能閱讀等[1-2]。目前,常見的語音合成方法有拼接法(concatenative speech synthesis)、參數(shù)法(parametric speech synthesis)、統(tǒng)計(jì)參數(shù)法(Statistical Parametric Speech Synthesis,SPSS)以及深度學(xué)習(xí)法(deep learning)等。其中,拼接法和參數(shù)法也叫傳統(tǒng)語音合成方法。
文獻(xiàn)[3]從前端文本處理、語音生成角度對語音合成技術(shù)進(jìn)行綜述,首先綜述語音合成中前端文本處理技術(shù),然后綜述語音合成技術(shù),文獻(xiàn)[3]綜述的語音合成技術(shù)有拼接法、參數(shù)法以及前饋神經(jīng)網(wǎng)絡(luò)等。文獻(xiàn)[4]則首先簡述了傳統(tǒng)的語音合成方法,然后從深度神經(jīng)網(wǎng)絡(luò)在語音合成技術(shù)中的應(yīng)用角度綜述語音合成技術(shù),比如受限玻爾茲曼機(jī)、深度置信網(wǎng)、循環(huán)神經(jīng)網(wǎng)絡(luò)等在語音合成中的應(yīng)用,最后介紹了基于Wavenet[5]和Tacotron的語音合成技術(shù)。
不同于上述的語音合成技術(shù)綜述,文章從聲學(xué)模型和聲碼器角度,系統(tǒng)綜述基于深度學(xué)習(xí)的語音合成技術(shù)進(jìn)行,包括各種基于深度學(xué)習(xí)聲學(xué)模型、聲碼器和端到端語音合成系統(tǒng)等,并分析了各自的特點(diǎn)、優(yōu)勢、劣勢,以及適應(yīng)的場景。文章涉及了上述綜述中基于深度學(xué)習(xí)的語音合成技術(shù),但沒有涉及到傳統(tǒng)的語音合成技術(shù)。
自2016年谷歌公司提出Wavenet聲碼器至今,涌現(xiàn)出多種基于深度學(xué)習(xí)的語音合成技術(shù),這些技術(shù)從合成語音質(zhì)量、合成速度以及模型復(fù)雜度等方面提高語音合成技術(shù)性能?;谏疃葘W(xué)習(xí)的語音合成系統(tǒng)主要有兩種,一種是將深度學(xué)習(xí)應(yīng)用到傳統(tǒng)語音合成系統(tǒng)各個(gè)模塊中建模,這種方法可以有效地合成語音,但系統(tǒng)有較多的模塊且各個(gè)模塊獨(dú)立建模,系統(tǒng)調(diào)優(yōu)比較困難,容易出現(xiàn)累積誤差。這種系統(tǒng)的代表是百度公司提出的Deep Voice-1[6]和Deep Voice-2[7]。
另一種是端到端語音合成系統(tǒng),這種系統(tǒng)旨在利用深度學(xué)習(xí)強(qiáng)大的特征提取能力和序列數(shù)據(jù)處理能力,摒棄各種復(fù)雜的中間環(huán)節(jié),利用聲學(xué)模型將文本轉(zhuǎn)化中間表征,然后聲碼器將中間表征還原成語音。聲學(xué)模型和聲碼器是端到端語音合成系統(tǒng)的重要組成部分,一些語音合成系統(tǒng)會在聲學(xué)模型之前加上文本分析模塊,文本分析模塊對輸入的文本進(jìn)行預(yù)處理,比如詞性標(biāo)注、分詞以及韻律生成等。由于文本分析是自然語言處理的內(nèi)容,所以文章不進(jìn)行綜述。
圖1是語音合成系統(tǒng)分類示意圖,端到端語音合成系統(tǒng)由聲學(xué)模型和聲碼器兩個(gè)部分組成,聲學(xué)模型實(shí)現(xiàn)文本和語音在時(shí)間上的對齊,聲碼器將聲學(xué)模型輸出還原成語音波形。由于聲碼器不僅可以在端到端語音合成系統(tǒng)中,也可以單獨(dú)作為語音合成的模型,所以文章首先對基于深度學(xué)習(xí)的聲碼器進(jìn)行綜述,詳細(xì)介紹經(jīng)典的聲碼器這些工作原理,分析聲碼器的優(yōu)缺點(diǎn)。然后對聲學(xué)模型進(jìn)行綜述,在聲碼器和聲學(xué)模型的基礎(chǔ)上對語音合成系統(tǒng)進(jìn)行綜述。最后對基于深度學(xué)習(xí)的語音合成技術(shù)發(fā)展做出展望。
圖1 語音合成系統(tǒng)分類
圖2 是近幾年基于深度學(xué)習(xí)的語音合成技術(shù)發(fā)展歷程,包括聲碼器、聲學(xué)模型和端到端語音合成系統(tǒng),還有一些衍生的聲碼器、聲學(xué)模型和端到端語音合成系統(tǒng)沒有列出。
圖2 基于深度學(xué)習(xí)的語音合成技術(shù)發(fā)展歷程
聲碼器單獨(dú)作為語音合成模型時(shí)需要和預(yù)處理模型結(jié)合使用,預(yù)處理模型為聲碼器提供語言學(xué)特征或聲學(xué)特征等控制條件?;谏疃葘W(xué)習(xí)的聲碼器按照其生成語音原理可以分為自回歸式和并行式。自回歸式聲碼器按照時(shí)間順序生成語音,生成每一時(shí)刻的語音都依賴之前所有時(shí)刻的語音。并行式聲碼器并行生成語音,不再按照時(shí)間順序。并行式聲碼器主要有基于概率密度蒸餾[8]聲碼器和基于流[9]聲碼器兩種?;诟怕拭芏日麴s聲碼器是在自回歸模型基礎(chǔ)上結(jié)合逆自回歸流[10]和概率密度蒸餾方法,采用教師學(xué)生模式訓(xùn)練模型,教師模型是預(yù)訓(xùn)練好的自回歸模型,學(xué)生模型用逆自回歸流方法訓(xùn)練,損失函數(shù)一般是教師模型和學(xué)生模型輸出之間的相對熵(Kullback-Leibler 散度,KL 散度)?;诹鞯纳墒侥P妥畛跤糜谏蓤D像,但基于流的聲碼器也可以較好地生成語音。基于流的聲碼器只需要一個(gè)模型、一個(gè)損失函數(shù)就可以高速生成語音,而基于概率密度蒸餾的聲碼器需要兩個(gè)階段訓(xùn)練和多個(gè)輔助損失函數(shù)。圖3是聲碼器按照工作原理的分類,圖中所列的是經(jīng)典聲碼器,沒有包含衍生的聲碼器。
圖3 基于深度學(xué)習(xí)的聲碼器分類
自回歸聲碼器是較早研究的聲碼器,按其網(wǎng)絡(luò)模型主要有基于卷積神經(jīng)網(wǎng)絡(luò)聲碼器和基于循環(huán)神經(jīng)網(wǎng)絡(luò)聲碼器兩種?;诰矸e神經(jīng)網(wǎng)絡(luò)聲碼器利用卷積神經(jīng)網(wǎng)絡(luò)建模,通過因果卷積、帶洞卷積等達(dá)到按時(shí)序生成語音的目的?;诰矸e神經(jīng)網(wǎng)絡(luò)聲碼器能夠充分利用GPU等并行計(jì)算資源,訓(xùn)練速度比基于循環(huán)神經(jīng)網(wǎng)絡(luò)的聲碼器快?;谘h(huán)神經(jīng)網(wǎng)絡(luò)的聲碼器利用循環(huán)神經(jīng)網(wǎng)絡(luò)建模,比如長短時(shí)記憶網(wǎng)絡(luò)(LSTM)[11]、門循環(huán)單元(GRU)[12]等。
Wavenet[5]是谷歌DeepMind提出的由卷積神經(jīng)網(wǎng)絡(luò)構(gòu)成的生成式模型,該模型不僅可以生成語音也可以生成圖像、音樂等。Wavenet 作為聲碼器時(shí)有Wavenet 聲碼器[13]和條件Wavenet 聲碼器兩種模式。Wavenet 聲碼器需要語言學(xué)模型或聲學(xué)模型等提供控制條件,比如聲譜圖、F0 基頻等。圖4 是Wavenet 結(jié)構(gòu)示意圖,訓(xùn)練前將語音序列聯(lián)合概率x={x1,x2,…,xT} 分解為各時(shí)刻條件概率的乘積,如公式(1)所示:
x是語音波形值序列,xt是一個(gè)時(shí)刻波形值。訓(xùn)練過程中利用因果卷積和帶洞卷積逐點(diǎn)生成語音的波形。因果卷積和帶洞卷積保證模型按照時(shí)間順序生成語音。生成階段,模型采用逐采樣點(diǎn)自回歸方式,按公式(1)計(jì)算每個(gè)時(shí)刻的波形值。
圖4 Wavenet
條件Wavenet聲碼器在Wavenet聲碼器基礎(chǔ)上接收額外的輸入條件進(jìn)行建模,如公式(2)所示:
h是額外的輸入條件。比如在合成多說話人語音時(shí),說話人編碼就可以作為額外的輸入,在文本轉(zhuǎn)語音任務(wù)中,文本也可以作為額外的輸入。條件Wavenet聲碼器有兩種建模方法:全局方法和局部方法。全局方法是指模型接收單額外輸入條件h,該條件在所有的時(shí)間點(diǎn)上影響模型的輸出。局部條件建模方法是指模型有第二種時(shí)間序列ht,ht是通過對原始數(shù)據(jù)的低采樣率獲得。局部條件建模效果比全局建模的效果要差一些。
Wavenet 全卷積神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì)可以充分利用GPU 并行計(jì)算資源,訓(xùn)練速度比較快且合成語音質(zhì)量高。但是由于采用逐點(diǎn)自回歸方式生成語音,所以生成語音速度慢。對于16 kHz采樣率,16 bit采樣位的語音,每秒需要計(jì)算16 000個(gè)采樣點(diǎn),每個(gè)采樣點(diǎn)有65 536種可能,這需要較大的計(jì)算量和計(jì)算耗時(shí)。雖然Wavenet采用了μ律壓擴(kuò)[14]將16 bit的采樣位降低成8 bit的采樣位,但是生成語音速度仍然達(dá)不到實(shí)時(shí)的要求。
雖然Wavenet存在模型較為復(fù)雜、計(jì)算量大及合成速度慢等問題,但Wavenet是基于深度學(xué)習(xí)聲碼器的重要組成部分,對語音合成技術(shù)的發(fā)展有著重要影響,基于Wavenet衍生出多種聲碼器。
對于Wavenet 聲碼器需要額外的模型提供控制條件,文獻(xiàn)[15]提出直接使用現(xiàn)有的聲學(xué)特征作為Wavenet的輸入特征,這樣不需要對原始語音建模,從而避免了語音分析和生成過程各種先驗(yàn)的假設(shè)。文獻(xiàn)[16]在文獻(xiàn)[15]基礎(chǔ)上研究多說話人的語音合成。
對于Wavenet 合成語音有噪音的問題,文獻(xiàn)[17]通過在Wavenet 模型之前引入基于感知權(quán)重的噪音整形技術(shù),減少Wavenet因?yàn)榫矸e神經(jīng)網(wǎng)絡(luò)難以捕捉語音信號動態(tài)信息而產(chǎn)生的噪音,但是這種做法會造成合成語音的質(zhì)量下降。Excitnet[18]結(jié)合LPC(Linear Predictive Coding,LPC)聲碼器和Wavenet 聲碼器優(yōu)點(diǎn),使用自適應(yīng)預(yù)測器將與共振峰相關(guān)的頻譜結(jié)構(gòu)從輸入語音信號解耦,然后通過Wavenet對激勵(lì)信號的概率分布進(jìn)行建模,實(shí)現(xiàn)了高效訓(xùn)練和生成語音。
針對Wavenet 訓(xùn)練復(fù)雜,計(jì)算量大的問題,F(xiàn)ast-Wavenet[19]在Wavenet基礎(chǔ)上通過引入緩存,將因果卷積和帶洞卷積計(jì)算過程中不變的結(jié)果保存在緩存中,需要時(shí)直接使用,這樣可以節(jié)約計(jì)算的時(shí)間,提高訓(xùn)練和生成語音的速度。FFTNet[20]則對Wavenet 結(jié)構(gòu)進(jìn)行調(diào)整,通過多通道卷積的結(jié)構(gòu),提高合成語音的速度同時(shí)減小模型規(guī)模且合成語音的質(zhì)量較高。
不同于上述基于卷積神經(jīng)網(wǎng)絡(luò)的聲碼器,SampleRNN[21]采用處理序列數(shù)據(jù)常用的循環(huán)神經(jīng)網(wǎng)絡(luò)建模,SampleRNN有多層循環(huán)神經(jīng)網(wǎng)絡(luò)組成,最低層叫采樣層,其余層叫幀層。各層以不同時(shí)鐘速率運(yùn)行,學(xué)習(xí)不同抽樣級別。采樣層一個(gè)時(shí)間步只學(xué)習(xí)一幀樣本,而最高的幀層一個(gè)時(shí)間步可以學(xué)習(xí)較多幀樣本。幀層對語音非重復(fù)幀做處理,每個(gè)幀層都是一個(gè)循環(huán)神經(jīng)網(wǎng)絡(luò),循環(huán)神經(jīng)網(wǎng)絡(luò)可以由LSTM、GRU等組成,也可以是其他循環(huán)神經(jīng)網(wǎng)絡(luò)變體組成。采樣層對單個(gè)樣本數(shù)據(jù)進(jìn)行處理,直接計(jì)算出語音波形。
SampleRNN和Wavenet都是直接對原始語音建模,Wavenet 利用卷積神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)語音前后特征的關(guān)系,而SampleRNN 從循環(huán)神經(jīng)網(wǎng)絡(luò)的角度,利用多層循環(huán)神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)語音不同時(shí)間維特征。SampleRNN生成語音速度比Wavenet快,模型也比Wavenet簡單,合成語音質(zhì)量和Wavenet 相當(dāng)。但是由于SampleRNN 采用循環(huán)神經(jīng)網(wǎng)絡(luò),所以訓(xùn)練過程中并不能充分利用計(jì)算資源,需要采用較多的技巧加速模型訓(xùn)練。
不論是Wavenet 還是SampleRNN 都很難達(dá)到實(shí)時(shí)語音合成,WaveRNN[22]針對生成式語音合成中耗時(shí)較大的模塊進(jìn)行了專門分析和改進(jìn),達(dá)到超實(shí)時(shí)語音合成速度且合成語音質(zhì)量也沒有大的下降。WaveRNN認(rèn)為生成式語音合成模型生成語音速度可以用公式(3)表示:
T(u)是生成語音的總時(shí)間,語音有 |u |個(gè)采樣點(diǎn),N 表示模型神經(jīng)網(wǎng)絡(luò)層數(shù),c(opi)代表每層神經(jīng)網(wǎng)絡(luò)計(jì)算耗時(shí),d(opi) 表示硬件執(zhí)行程序時(shí)間。對于以上幾點(diǎn),WaveRNN 分別使用單層循環(huán)神經(jīng)網(wǎng)絡(luò)和兩層softmax層簡單模型減少神經(jīng)網(wǎng)絡(luò)層數(shù),采用裁剪法[23-24]減少每一層神經(jīng)網(wǎng)絡(luò)計(jì)算耗時(shí),使用折疊法減少因?yàn)檎Z音較長而需要的時(shí)間。
WaveRNN 通過上述方法達(dá)到了提高語音生成速度、降低模型規(guī)模的效果。WaveRNN 合成語音速度比Wavenet 和SampleRNN 快很多且可以部署在移動端等計(jì)算資源較少的設(shè)備上。LPCNet[25-26]在WaveRNN基礎(chǔ)上結(jié)合線性預(yù)測模塊,進(jìn)一步提高了語音合成的效率,在同等大小模型的情況下,LPCNet合成語音的質(zhì)量更高。
自回歸式聲碼器按照時(shí)間順序構(gòu)建語音,每一點(diǎn)語音值都需要依賴歷史語音值,合成語音質(zhì)量高,但實(shí)時(shí)性不足。不同于自回歸式逐點(diǎn)生成語音,并行式聲碼器同時(shí)生成整段語音,每個(gè)語音點(diǎn)之間沒有依賴關(guān)系。并行式聲碼器按其原理主要有兩種:一種是基于概率密度蒸餾,利用逆自回歸流和概率密度蒸餾訓(xùn)練和生成語音,比如Parallel Wavenet[27]和Clarinet[28]。逆自回歸流是一種每個(gè)可逆函數(shù)都基于自回歸神經(jīng)網(wǎng)絡(luò)的特殊的標(biāo)準(zhǔn)化流[29-30]。逆自回歸流最大似然估計(jì)是自回歸式,因此逆自回歸流模型會和概率密度蒸餾模型結(jié)合使用。概率密度蒸餾原本是模型壓縮的方法,通過優(yōu)化學(xué)生模型和教師模型輸出之間的誤差,得到規(guī)模較小的學(xué)生模型。另一種是基于流,通過一系列可逆函數(shù),利用簡單的分布在中間表征的控制下生成語音波形,基于流的模型是目前研究的熱點(diǎn)。
自回歸模型并行輸入訓(xùn)練數(shù)據(jù)逐點(diǎn)輸出預(yù)測結(jié)果,特點(diǎn)是訓(xùn)練速度快但生成速度慢。逆自回歸流模型相反,逐點(diǎn)輸入訓(xùn)練數(shù)據(jù)并行輸出預(yù)測結(jié)果,所以基于逆自回歸流模型的訓(xùn)練速度慢,但是生成速度快。Parallel Wavenet結(jié)合逆自回歸流和概率密度蒸餾方法,首先訓(xùn)練好自回歸的教師模型,然后從教師模型中蒸餾學(xué)習(xí)出學(xué)生模型,學(xué)生模型用逆自回歸流的方法訓(xùn)練。Parallel Wavenet 損失函數(shù)是學(xué)生模型和教師模型輸出之間的KL散度,通過優(yōu)化KL散度使學(xué)生模型輸出不斷逼近教師模型輸出。公式(4)是模型損失函數(shù),H(PS,PT)是學(xué)生模型和教師模型輸出的交叉熵,H(PS)是學(xué)生模型輸出的熵。
僅優(yōu)化KL散度,學(xué)生模型還不能很好地生成語音,Parallel Wavenet 增加了感知損失、對比損失、能量損失等輔助損失函數(shù)提高學(xué)生模型生成語音質(zhì)量。感知損失可以防止產(chǎn)生不好的發(fā)音,對比損失可以消除噪音,而能量損失協(xié)助匹配人類語音的能量。
Parallel Wavenet極大提高了語音合成速度,但實(shí)踐中發(fā)現(xiàn)很難有效實(shí)現(xiàn)該模型,因?yàn)镻arallel Wavenet 首先假設(shè)教師和學(xué)生模型的輸出均服從混合邏輯斯特分布,然后對混合邏輯斯特分布進(jìn)行蒙特卡洛采樣后計(jì)算兩者的KL 散度。蒙特卡洛采樣會導(dǎo)致訓(xùn)練過程不穩(wěn)定。對此,Clarinet 采用高斯分布取代教師學(xué)生模型輸出的混合邏輯斯特分布,兩個(gè)高斯分布可以直接計(jì)算KL散度,公式(5)所示:
q 是學(xué)生模型輸出的高斯分布,p 是教師模型輸出的高斯分布,uq和σq為q 均值和標(biāo)準(zhǔn)差,up和σp是p 均值和標(biāo)準(zhǔn)差。為了保證訓(xùn)練過程中數(shù)值計(jì)算的穩(wěn)定性,Clarinet還對σq和σp增加了正則項(xiàng),如公式(6)所示:
Parallel Wavenet和Clarinet通過逆自回歸流和概率密度蒸餾的方法實(shí)現(xiàn)了高速訓(xùn)練和生成語音目的,但在實(shí)際中這兩種方法使用并不多,因?yàn)檫@兩種模型訓(xùn)練過程比較復(fù)雜且合成效果也不穩(wěn)定。
不同于Parallel Wavenet 和Clarinet 需要兩個(gè)階段訓(xùn)練和多個(gè)輔助損失函數(shù)?;诹鞯穆暣a器只需要一個(gè)模型和一個(gè)損失函數(shù)就可以高速生成語音。標(biāo)準(zhǔn)化流是通過一系列可逆函數(shù)用簡單分布模擬復(fù)雜分布的一種生成式模型。在語音合成中,對于原始音頻x,假設(shè)存在可逆函數(shù)f(x):x →z,則可以直接將x 映射到先驗(yàn)Pz,則x 的對數(shù)概率分布函數(shù)可用公式(7)表示,這樣就可以用一個(gè)已知的簡單分布計(jì)算一個(gè)復(fù)雜的分布的似然估計(jì)。
基于流的模型的優(yōu)勢是訓(xùn)練過程簡單,不需要多次訓(xùn)練和多個(gè)損失函數(shù)且結(jié)果穩(wěn)定。WaveGlow[31]結(jié)合Glow 和Wavenet 以均值為0 的高斯球形分布作為先驗(yàn)分布,以梅爾頻譜作為控制條件,通過擠壓層、1×1可逆卷積和仿射耦合層[32]等擬合語音波形。FloWavenet[33]的原理和WaveGlow 相似,F(xiàn)loWavenet 認(rèn)為基于流的生成式模型要實(shí)現(xiàn)高效訓(xùn)練和生成需要滿足兩點(diǎn):(1)計(jì)算公式(7)的雅克比矩陣的公式f應(yīng)該簡單易于計(jì)算;(2)將噪音點(diǎn)z轉(zhuǎn)化成語音信號點(diǎn)x的逆函數(shù)x=f -1(z)應(yīng)該容易計(jì)算。如要并行生成和易于計(jì)算,第二點(diǎn)必須滿足。為了滿足上述兩點(diǎn),F(xiàn)loWavenet 使用類似文獻(xiàn)[32]的仿射耦合層中,并在每一個(gè)模塊中使用了多層流。
WaveGlow 和FloWavenet 實(shí)現(xiàn)了高速生成語音,降低了訓(xùn)練的難度和復(fù)雜度。但是基于可逆流的模型通常有較多的神經(jīng)網(wǎng)絡(luò)層和大量的參數(shù),這使得基于流的模型很大,比如Wavenet 和Clarinet 只有1.7×106個(gè)的參數(shù),而WaveGlow有200×106個(gè)的參數(shù)。
MCNN[34]通過多頭卷積網(wǎng)絡(luò)重建語音波形,該模型雖然不需要如Parallel Wavenet 那樣多次訓(xùn)練,但模型仍需要四個(gè)輔助損失函數(shù),訓(xùn)練過程比較復(fù)雜,且由于MCNN是在完整的聲譜圖上還原波形,所以并不清楚能否在梅爾頻譜這樣的聲譜圖上還原波形。
文獻(xiàn)[35]從人類發(fā)音角度建模,模型由三個(gè)部分組成,一個(gè)是源模塊,用于生成基于正弦的信號,作為激勵(lì)源。另一個(gè)是基于非自回歸帶動卷積的過濾器,過濾器將激勵(lì)轉(zhuǎn)化成語音波形。最后一個(gè)是條件模塊,這個(gè)模塊將輸入的聲學(xué)特征進(jìn)行預(yù)處理,然后輸入到前兩個(gè)模塊。通過這三個(gè)模型,文獻(xiàn)[35]避免了基于概率密度蒸餾復(fù)雜的訓(xùn)練環(huán)節(jié)。
表1是幾種聲碼器性能參數(shù)表,Wavenet合成語音質(zhì)量高,但模型較為復(fù)雜,生成語音速度慢。SampleRNN和WaveRNN是基于循環(huán)神經(jīng)網(wǎng)絡(luò)的聲碼器,這兩個(gè)模型比Wavenet 小,合成語音質(zhì)量和Wavenet 相當(dāng)。WaveRNN速度最快,模型最小。WaveGlow 和FloWavenet 是結(jié)合Wavenet和流的并行式聲碼器,兩者的工作原理相近,結(jié)構(gòu)不同。表中合成速度以實(shí)時(shí)為基準(zhǔn),實(shí)時(shí)是指合成一秒的語音需要一秒的時(shí)間,不足是指合成一秒語音需要超過一秒的時(shí)間。在實(shí)際應(yīng)用中一般會要求語音合成系統(tǒng)具有超實(shí)時(shí)性,因?yàn)椴渴鹪诜?wù)器端的語音合成需要考慮網(wǎng)絡(luò)時(shí)延問題,5G 的發(fā)展會在一定程度上緩解這個(gè)問題,但不能從根本上解決問題,所以實(shí)用的語音合成系統(tǒng)需要可以實(shí)時(shí)合成語音。
經(jīng)典的語音合成系統(tǒng)中語言學(xué)模型和聲學(xué)模型通常分開建模,這會導(dǎo)致模型比較復(fù)雜且需要研究人員具有專業(yè)的語言知識。隨著深度學(xué)習(xí)的發(fā)展,特別是基于注意力機(jī)制[36-38]的序列到序列(seq2seq)模型[39]的提出,使得將語言學(xué)模型嵌入到聲學(xué)模型中成為可能。文獻(xiàn)[40]首次提出基于序列到序列加注意力機(jī)制[41]的聲學(xué)模型,其原理是通過輸入文本序列生成梅爾頻譜。文獻(xiàn)[40]聲學(xué)模型可以很好地生成梅爾頻譜,但需要預(yù)訓(xùn)練的隱馬爾科夫模型輔助學(xué)習(xí),因此文獻(xiàn)[40]只能合成較短的語音。
和聲碼器相似,基于深度學(xué)習(xí)的聲學(xué)模型的發(fā)展也經(jīng)歷了自回歸式和并行式兩個(gè)階段。自回歸式聲學(xué)模型出現(xiàn)較早,生成的中間表征質(zhì)量高、速度慢。并行式聲學(xué)模型生成中間表征速度快,但質(zhì)量會有所下降,且訓(xùn)練過程比較復(fù)雜。本章節(jié)從自回歸和并行式兩種聲學(xué)模型綜述。
自回歸式聲學(xué)模型在語音合成中用的比較多,其基礎(chǔ)是seq2seq加注意力機(jī)制的編碼解碼模型。編碼器將文本轉(zhuǎn)化成上下文矢量,解碼器根據(jù)上下文矢量直接解碼出結(jié)果。注意力機(jī)制建立起上下文矢量與輸入文本之間的聯(lián)系,這樣可以更好地利用輸入的信息。在語音合成聲學(xué)模型中,注意力機(jī)制可以將解碼器的注意力集中在輸入的相關(guān)文本上。由于注意力機(jī)制在聲學(xué)模型有著重要的作用,所以這里介紹一下注意力機(jī)制。
圖5 是seq2seq 加注意力機(jī)制的示意圖,對于輸入序列x=(x1,x2,…,xL)和與之對應(yīng)的輸出序列y=(y1,y2,…,yT),首先將輸入序列編碼成(h1,h2,…,hTx) 嵌入特征,st為循環(huán)神經(jīng)網(wǎng)絡(luò)的隱層狀態(tài),如公式(8)所示,ct為第t時(shí)間步的上下文矢量,如公式(9)所示。公式(10)是解碼器解碼的結(jié)果。
表1 基于深度學(xué)習(xí)的聲碼器總結(jié)
公式(9)中,上下文矢量ct每次計(jì)算都和輸入h有關(guān),這種方式稱為基于內(nèi)容的注意力機(jī)制[41],這種方式?jīng)]有考慮輸入文本之間的位置關(guān)系,相同的輸入具有相似的權(quán)重值。另一種基于位置的注意力機(jī)制將輸入文本之間的位置關(guān)系代入計(jì)算,上下文矢量計(jì)算公式如式(11)所示,這種稱注意力機(jī)制為基于位置的注意力機(jī)制[37]。
圖5 循環(huán)神經(jīng)網(wǎng)絡(luò)加注意力機(jī)制示意圖
2.1.1 編碼器
編碼器提取輸入文本的特征,將輸入文本轉(zhuǎn)化成上下文矢量,編碼器的結(jié)構(gòu)一般比較簡單。Tacotron-1[42-43]的編碼器采用了預(yù)處理網(wǎng)絡(luò)和CBHG[44]模塊。預(yù)處理網(wǎng)絡(luò)是一系列非線性轉(zhuǎn)換層,將文本轉(zhuǎn)化成嵌入矢量,CBHG 模塊結(jié)合注意力機(jī)制將嵌入矢量轉(zhuǎn)化成上下文矢量,CBHG 模塊可以減少過擬合以及誤發(fā)音等情況。Tacotron-2[45]編碼器在Tacotron-1 編碼器基礎(chǔ)上進(jìn)行了簡化,僅使用普通的LSTM 和卷積網(wǎng)絡(luò),沒有使用復(fù)雜的CBHG 模塊。Deep Voice-3[46-47]的編碼器則采用全卷積進(jìn)行建模,全卷積的編碼器可以并行訓(xùn)練。
2.1.2 解碼器
解碼器是聲學(xué)模型的關(guān)鍵,后期對于聲學(xué)模型的改進(jìn)也是集中在解碼器。解碼器根據(jù)上下文矢量直接解碼出結(jié)果,解碼的結(jié)果需要根據(jù)聲碼器選擇。解碼器可以解碼出原始的聲譜圖,也可以解碼出梅爾頻譜。原始的聲譜圖可以保留更多的語音信息但是會有大量的冗余信息增加訓(xùn)練過程的不穩(wěn)定性,梅爾頻譜雖然會丟失大量的信息,但是通過良好設(shè)計(jì)的聲碼器可以還原出丟失的信息,因此解碼器通常會以梅爾頻譜為解碼結(jié)果。
Tacotron-1 采用基于內(nèi)容注意力機(jī)制解碼器[36],每一個(gè)時(shí)間步每一循環(huán)層都會生成一個(gè)注意力詢問。Tacotron-2的解碼器和Tacotron-1結(jié)構(gòu)相似,但是采用基于位置的注意力機(jī)制[37],以更好地適應(yīng)輸入文本有重復(fù)字的情況。Deep Voice-3 解碼器則是由帶洞卷積和基于Transformer[38]注意力機(jī)制構(gòu)成,基于卷積的解碼器比基于循環(huán)神經(jīng)網(wǎng)絡(luò)的聲碼器解碼的速度要快一些。由于在合成語音過程中,對于注意力機(jī)制的錯(cuò)誤較為敏感,所以Deep Voice-3進(jìn)一步采用了[48]注意力機(jī)制。
上述的解碼器可以高質(zhì)量地生成中間表征,但是都存在曝光偏差[49]問題。曝光偏差是由于在訓(xùn)練過程中,解碼器使用真實(shí)值作為每一個(gè)解碼步的輸入,而在預(yù)測時(shí)使用上一個(gè)解碼步的輸出作為本次解碼步的輸入,這種訓(xùn)練和預(yù)測的輸入會造成不一致性。曝光偏差會導(dǎo)致合成語音出現(xiàn)漏詞、重復(fù)詞以及不完全合成等現(xiàn)象。
并行式聲學(xué)模型并行解碼出結(jié)果,并行解碼的兩個(gè)難點(diǎn)是根據(jù)輸入的文本需要解碼出多少幀中間表征以及并行解碼出的各幀之間的依賴關(guān)系如何界定。目前常用的辦法仍是概率密度蒸餾,通過預(yù)訓(xùn)練的教師模型指導(dǎo)學(xué)生模型。Fastspeech[50]通過從預(yù)訓(xùn)練好的自回歸模型中提取文本語音對齊信息,結(jié)合Transformer、一維卷積網(wǎng)絡(luò)[51]以及概率密度蒸餾等方法并行生成中間表征。Fastspeech解決了自回歸聲學(xué)模型合成速度慢、合成結(jié)果不穩(wěn)定以及合成過程難以控制等問題。Paranet[52]則采用軟注意力機(jī)制從自回歸的教師模型中學(xué)習(xí),并行生成中間表征。
不同于Fastspeech 需要對齊模型或者Paranet 依賴自回歸的教師模型。GlowTTS[53]通過流和單調(diào)對齊搜索方法可以高速生成中間表征?;诹鞯穆晫W(xué)模型是研究的熱點(diǎn),比起基于概率密度蒸餾的聲學(xué)模型,基于流的聲學(xué)模型結(jié)構(gòu)更加簡單,模型也更加穩(wěn)定。
將深度學(xué)習(xí)引入到經(jīng)典語音合成各個(gè)模塊中建模是一種有效的語音合成方法,Deep Voice-1是這種方法的代表。Deep Voice-1合成速度快,合成語音質(zhì)量也較高。但系統(tǒng)由多個(gè)模塊組成,容易產(chǎn)生累積誤差且誤差難以定位。
Deep Voice-2 在Deep Voice-1 基礎(chǔ)上改進(jìn)了多說話人語音合成系統(tǒng),方法是將說話人矢量引入到模型中訓(xùn)練。目前直接將深度學(xué)習(xí)引入到經(jīng)典語音合成系統(tǒng)各個(gè)模塊中建模的研究已經(jīng)不多了,Deep Voice 系列的第三代Deep Voice-3 已經(jīng)轉(zhuǎn)為采用端到端語音合成方法。
文獻(xiàn)[40]是首個(gè)端到端語音合成系統(tǒng),開啟了端到端語音合成系統(tǒng)的研究。該系統(tǒng)需要一個(gè)預(yù)訓(xùn)練的隱馬爾科夫?qū)R模塊輔助聲學(xué)模型學(xué)習(xí)文本與語音在時(shí)間上的對齊,其次該系統(tǒng)采用一些輔助的訓(xùn)練技巧會影響合成語音質(zhì)量。
Char2Wav[54]有閱讀器和聲碼器兩部分。閱讀器有編碼器和解碼器組成,編碼器是一個(gè)雙向的循環(huán)神經(jīng)網(wǎng)絡(luò),解碼器是基于注意力機(jī)制的循環(huán)神經(jīng)網(wǎng)絡(luò),聲碼器是SampleRNN。
Tacotron-1語音合成系統(tǒng)聲學(xué)模型是基于內(nèi)容注意力機(jī)制的聲學(xué)模型,聲碼器是Griffin-Lim 算法,Griffin-Lim算法不是深度學(xué)習(xí)模型,文獻(xiàn)[42]提出可以將Griffin-Lim算法替換為基于深度學(xué)習(xí)的聲碼器。Tacotron-2在Tacotron-1的基礎(chǔ)上采用了Wavenet作為聲碼器。
Tacotron 系列語音合成系統(tǒng)架構(gòu)簡單,合成語音質(zhì)量高。WaveTTS[55]在Tacotron系列原有頻域損失函數(shù)基礎(chǔ)上引入時(shí)域的損失函數(shù),這樣可以提高合成語音的質(zhì)量。針對Tacotron 解碼器采用的強(qiáng)制教學(xué)模式會造成曝光偏差問題,文獻(xiàn)[56]提出用概率密度蒸餾的方法,訓(xùn)練教師解碼器時(shí)采用強(qiáng)制教學(xué)方法,而訓(xùn)練學(xué)生解碼器采用常規(guī)的自回歸方式,通過優(yōu)化學(xué)生解碼器和教師解碼器的輸出誤差提高學(xué)生解碼器的準(zhǔn)確性,從而減少曝光誤差。文獻(xiàn)[57]則采用對抗生成網(wǎng)絡(luò)的方式避免曝光誤差。
文獻(xiàn)[58]使用Tacotron 聲學(xué)模型和Excitnet 聲碼器組成端到端語音合成系統(tǒng),該系統(tǒng)可以合成具有特定風(fēng)格的語音。
Deep Voice-3是全卷積語音合成系統(tǒng),聲學(xué)模型可以生成多種中間表征,對應(yīng)也有多種聲碼器。Deep Voice-3 可以學(xué)習(xí)多說話人語音且訓(xùn)練時(shí)間短、合成語音速度快。
VoiceLoop[59]在文本到中間表征過程中在編碼解碼的基礎(chǔ)上添加了固定大小的緩存機(jī)制,這樣可以減少模型的復(fù)雜度,VoiceLoop聲碼器是WORLD[60]。
Clarinet是在Parallel Wavenet和Deep Voice-3基礎(chǔ)上改進(jìn)的可以高速訓(xùn)練和并行生成的完全意義上端到端的語音合成系統(tǒng)。Clarinet通過單個(gè)神經(jīng)網(wǎng)絡(luò)直接將文本轉(zhuǎn)換為語音波形。Tacotron、Deep Voice-3 等語音合成系統(tǒng)是先將文本轉(zhuǎn)換為頻譜,然后將頻譜轉(zhuǎn)換成語音。Clarinet 完全從文本到原始語音波形的端到端訓(xùn)練,實(shí)現(xiàn)了對整個(gè)語音合成系統(tǒng)的聯(lián)合優(yōu)化。比起分別訓(xùn)練的模型,Clarinet 在語音合成的自然度上有大幅提升。
文獻(xiàn)[61]提出使用Transformer替代Tacotron-2中的注意力機(jī)制,這樣編碼器和解碼器可以同時(shí)工作,提高了合成語音速度,基于Transform 的自注意力機(jī)制更好地適應(yīng)長序列依賴問題。
聲碼器是語音合成技術(shù)的基礎(chǔ),聲碼器的發(fā)展歷經(jīng)了自回歸式到并行式兩個(gè)階段。目前聲碼器已經(jīng)可以滿足不同場景的需求,但是高質(zhì)量的聲碼器模型規(guī)模比較大,這意味著訓(xùn)練和部署模型需要較多的資源,而這些資源往往不是很充沛。所以如何在較少的資源上提高聲碼器的性能是研究的一個(gè)方向,目前很多研究是在聲碼器性能和模型復(fù)雜度之間做權(quán)衡。
端到端語音合成系統(tǒng)有漏發(fā)音和誤發(fā)音的問題。這其中的一個(gè)原因是聲學(xué)模型生成中間表征不穩(wěn)定,特別是采用序列到序列加注意力機(jī)制的聲學(xué)模型有曝光偏差等問題。如何解決聲學(xué)模型結(jié)果不穩(wěn)定是一個(gè)研究熱點(diǎn)。一些解決的方法有將注意力機(jī)制由位置敏感改為相關(guān)位置敏感[62],采用蒸餾學(xué)習(xí)[56],增加時(shí)長控制和自適應(yīng)優(yōu)化策略[63]或者將改變注意力策略[64]以及應(yīng)用額外的注意力機(jī)制輔助學(xué)習(xí)[65-66]等。
現(xiàn)階段語音合成系統(tǒng)雖然可以實(shí)現(xiàn)高質(zhì)量的語音合成,但是難以控制合成語音的風(fēng)格:不同人會有不同風(fēng)格,同一個(gè)人在不同狀態(tài)下也會有不同的語音特點(diǎn)。目前常用的辦法有預(yù)先從語音中提出可以表征韻律變化的隱變量,將隱變量代入語音合成模型中[67-69]訓(xùn)練、引入新的文本特征[70]或者引入句法、語義結(jié)構(gòu)等信息[71]。
現(xiàn)有的語音合成系統(tǒng)都需要大量的語音文本數(shù)據(jù),但現(xiàn)實(shí)中這些數(shù)據(jù)往往很難獲得,所以如何能在較小的數(shù)據(jù)集上訓(xùn)練出高質(zhì)量語音合成模型是一個(gè)研究方向?,F(xiàn)有的方法有基于遷移學(xué)習(xí)[72]和半監(jiān)督學(xué)習(xí)方法[73]等。
合成的語音仔細(xì)識別仍可以區(qū)分出自然語言和合成語音,這是因?yàn)楹铣烧Z音過程中存在聲學(xué)模型不準(zhǔn)確、過度平滑以及聲碼器不準(zhǔn)確等問題。所以如何能降低這些問題對合成語音的影響是研究的一個(gè)方向,文獻(xiàn)[74-75]提出在合成語音過程中增加語音增強(qiáng)的模塊,比如聲學(xué)特征增強(qiáng)、語音增強(qiáng)等。
一句話中可能會包含多種語言,比如漢語和英語。這種跨語種的語音合成也是一個(gè)研究方向,一些做法是找到一種可以表示相關(guān)語種特征的矢量,然后將特征矢量嵌入語音合成模型[76]中訓(xùn)練。
基于深度學(xué)習(xí)的語音合成技術(shù)無論是在合成語音質(zhì)量上還是速度上都取得了重大的進(jìn)展。聲碼器是語音合成技術(shù)的基礎(chǔ),基于深度學(xué)習(xí)的聲碼器歷經(jīng)了自回歸式和并行式兩個(gè)階段。自回歸式可以生成高質(zhì)量的語音,但速度慢,并行式可以快速生成語音,但存在著模型較大,訓(xùn)練過程比較復(fù)雜等問題。聲學(xué)模型將文本轉(zhuǎn)化成中間表征,和聲碼器相似,聲學(xué)模型也經(jīng)歷了自回歸式和并行式兩個(gè)階段。端到端語音合成系統(tǒng)將聲學(xué)模型和聲碼器結(jié)合建模,直接建立起從文本到語音的合成,降低了語音合成研究對專業(yè)知識的要求,是目前研究較多的語音合成方法。
語音合成應(yīng)用場景豐富,不同場景對語音合成的要求也不盡相同。滿足在不同場景下的要求將是語音合成發(fā)展的一大考驗(yàn)。