[2020] 語音生成 (零): 語音聲碼器, RNN 和 CNN 語音訊號生成模型

Yi-Chiao Wu (吳宜樵)
13 min readAug 1, 2020

--

這篇文章將回顧語音生成基礎知識 ,以及近期的 RNN 和 CNN 語音訊號生成模型 .如有興趣可參考影片或是英文(English)版本 .

語音合成 (Speech Synthesis)

語音合成是根據給定的文字或是聲音輸入去生成相對應的語音波形,其應用包括文字轉語音 (text-to-speech, TTS) 及語音純化 (speech enhancement) 等等.語音合成的核心在於控制不同的語音成份 (例:音高, 音色),而核心的技術稱為聲碼器 (Vocoder, [H. Dudley, 1939]).傳統的語音聲碼器像是 STRAIGHT [H. Kawahara+, 1999] 在分析語音時將語音編碼為語音特徵,而在合成時基於這些語音特徵解碼回原始語音波形.然而傳統的語音聲碼器中,採用了許多對於語音生成模型簡化的假設,進而造成生成的語音不自然,品質不佳等問題.因此,近期的語音生成研究著重於利用類神經網路 (Neural network, NN) 直接去 model 語音波型,避免過多的人為假設.

這篇文章將先回顧語音生成的基礎知識,接著介紹近期基於 recent recurrent neural network (RNN) 和 convolution neural network (CNN) 建模的語音生成模型.

關鍵字 — Speech synthesis, vocoder, RNN-based speech generation, CNN-based speech generation

語音訊號 (Speech Signal)

語音訊號是一個序列訊號 (sequential signal).由於語音訊號的取樣頻率 ( sampling rate) 非常高 (通常高於16 kHz),其時域解析度就非常高.這造成直接去 model 時域波形是相當困難的一件事,因為往往在一秒內語音生成模型就必須 model 超過 1 萬 6000 個取樣點以上.

語音訊號

聲碼器及聲源濾波模型 (Vocoder and Source-filter Model)

聲碼器 (聲音編碼器) 包含一編碼器 (Encoder) 將聲音編碼為語音特徵,以及一解碼器 (Decoder) 將語音特徵解碼回語音訊號.

聲碼器

聲源濾波模型 (source-filter model) [R. McAulay+, 1986] 是一個常見的聲音編碼器模型,其將語音生成的過程拆解為激勵訊號 (excitation signal) 以及頻譜濾波器 (spectral filter) 的旋積(convolution).激勵訊號模擬聲帶振動產生的訊號,頻譜濾波器模擬聲道的共鳴效應 (Resonance),而最後的高通濾波器 (high-pass filter) 則模擬嘴唇效應.因為語音含有聲帶有震動的濁音 (voiced)及聲帶無震動的清音 (unvoiced),在model 激勵訊號時亦須分開討論.濁音的激勵訊號為準週期 (quasi-periodic)訊號,清音的激勵訊號則類似白雜訊 (white noise).

聲源濾波模型

混合激勵聲碼器 (mixed excitation vocoder) 是一種廣泛被使用於語音合成的聲音編碼器 (例: STRAIGHT, WORLD [M. Morise+, 2016]).在語音特徵抽取階段,聲碼器首先抽取基頻訊號 (fundamental frequency, F0),接著基於 F0 抽取非週期程度 (aperiodicity, ap) 以及頻譜包絡線 (spectral envelope, sp).而在語音合成階段,聲碼器首先利用 F0,ap,和白雜訊產生相對應的激勵訊號,接著通過頻譜濾波器產生語音訊號.然而在此過程中原始相位資訊及部分細節由於模型的簡化而遭省略,這樣的資訊流失造成語音品質明顯的下降.

混合激勵聲碼器

RNN-based 語音生成 (Speech Generation)

由於傳統語音聲碼器模型過於簡化的缺點,近期語音生成研究著重於,如何利用類神經網路直接 model 語音波形,以避免許多人為簡化的假設.當我們想要 model 一序列訊號時,通常會直覺想到利用 Recurrent neural network (RNN).然而由於語音訊號的時域解析度非常高,代表其訊號點間的關聯性綿延地非常的長.RNN 在 model 這種超長的序列時,常會遭遇梯度消失或是爆炸的問題 (gradient vanishing/explosion).此外,由於 RNN 為自迴歸模型(autoregressive, AR),語音生成時為逐點生成,對於生成時域解析度非常高的訊號而言,生成時間將會非常的長,不利於一般語音生成的應用.

RNN

SampleRNN

SampleRNN [S. Mehri+, 2016] 是第一個利用 RNN 直接 model 語音時域訊號的模型,其將語音訊號點之間的關係利用如下的條件機率式表示.任意時間點 t 的訊號機率分布,是基於所有前面時間點的訊號所決定.

而為了解決 RNN 無法 model 長序列關聯性的弱點,SampleRNN 採用一階層式 (hierarchical) 的架構,讓每一層的 RNN layer 運作在不同的時域解析度上,進而讓神經網路既學到每個時間點的細節又學到長時間的關聯性.然而此多層的 RNN 架構跟自迴歸機制依然使得生成速度非常的慢.

SampleRNN

WaveRNN 和 LPCNet

WaveRNN [N. Kalchbrenner+, 2018] 和 LPCNet [J.-M. Valin+, 2018] 為兩個最早基於 RNN 實現實時 (real-time) 語音生成的模型.WaveRNN 採用不只回授過去訊號點,同時也輸入語音特徵 h 的方式,讓類神經網路在預測每個訊號點的機率分布時,能同時基於過去的訊號點以及語音特徵的資訊.

因為語音特徵是一個富含長序列關聯性的 prior 資訊 (每一幀語音特徵通常涵蓋 20 ms 以上的訊息),所以 WaveRNN 的實現只用了一層的 gated recurrent unit (GRU) 及一些特殊針對硬體加速的設計,就達到了實時生成的目標.

另一方面,由於傳統線性編碼 (Linear predictive coding, LPC) 的頻譜濾波器所需的運算量非常少,LPCNet 藉由讓類神經網路只 model 激勵訊號 (通常只含有極少的語者資訊),再經由傳統頻譜濾波器處理的方式,進一步減輕了類神經網路 model 頻譜以及語者資訊的負擔,使得模型訓練的難度下降以及生成的效率上升.總體而言,目前 RNN 語音生成模型的挑戰,主要在於模型的複雜度以及運算量的降低,以達到能夠實時生成語音的目標.因此近期的研究方向主要著重於如何讓有限能力的類神經網路只 model 最低限度的訊號 (例:激勵訊號).

CNN-based 語音生成 (Speech Generation)

此外許多基於 CNN 的語音生成的模型,也在近年內大量地被提出.由於 CNN 模型的架構是固定的,因此 CNN 只能 model 固定長度的關聯性.這關聯性的長度一般稱為 CNN 的感知域 (receptive field),因此 model 每個訊號點機率分布的條件機率式就改寫為

r 是感知域的長度.而這長度取決於堆疊的 CNN 層數以及 CNN kernel 的大小.為了 model 在時域有高解析度且訊號關聯性長的語音訊號,通常我們需要堆疊非常多層的 CNN 以及非常大的 kernel.然而這會消耗過多的運算以及空間資源.因此如何有效率地拓展感知域是 CNN 語音生成模型的一大挑戰.

WaveNet

WaveNet [A. Oord+, 2016] 是的第一個基於 CNN 達到接近自然語音品質的語音生成模型.而其中的關鍵在於 WaveNet 採用了 dilated convolution neural networks (DCNN) [F. Yu+, 2016] 去有效率地拓展其感知域長度.DCNN 與一般 CNN 的差別在於 kernel 中的取樣點 (sampling grid) 之間有空隙,也就是說DCNN 在每次卷積 (convolution) 運算時會跳過固定的間隔,而這間隔大小稱為 dilation size.以 kernel size = 2 舉例,如果 dilation size = 1,則與原本的 CNN 相同,取樣旁邊的第一個點以及本身的點.如果 dilation size = 2,則跳過旁邊的第一個點,取樣旁邊的第二個點以及本身的點.藉由堆疊有著不同 dilation size 的 DCNN,WaveNet 除了可有效率地拓展感知域外,還可以學習到多層次的語音資訊,如同前面所提到的 SampleRNN 一樣.然而由於 WaveNet 的模型依然非常龐大 (通常為 30 層 DCNNs),且其同樣採用自迴歸機制,因此生成一秒鐘的語音訊號需要超過一分鐘的時間,應用情境非常受限.

Dilated CNN

Flow-base 語音生成模型

為了解決 WaveNet 生成速度緩慢的問題,許多基於非自迴歸機制 (non-AR) 的 CNN 語音生成模型被提出來,例如採用 invertible autoregressive flow 的 parallel WaveNet [A. Oord+, 2017] 和 Clarinet [W. Ping+, 2019],或是採用 Glow 的 WaveGlow [R. Prenger+, 2019] 和 Flowavent [S. Kim+, 2019].這類 Flow-based 的語音生成模型採用一可雙向運算的模型.模型訓練時,在給定語音特徵的情況下,將語音訊號轉為白雜訊.而在語音生成時,同樣在給定語音特徵的情況下,令模型反向將白雜訊轉換為目標生成的語音訊號.然而由於模型必須是雙向的要求,大大的增加了 flow-based 模型訓練的難度以及模型的大小.

Flow-based 語音生成

GAN-based 語音生成模型

另一方面,基於對抗生成模型 (GAN) 的非自迴歸 CNN 語音生成模型 parallel WaveGAN (PWG) [R. Yamamoto+, 2020] 和 MelGAN [K. Kumar+, 2019] 則利用 GAN 大大地降低了模型的大小需求.然而訓練的不穩定性是 GAN 模型常見的問題,因此 PWG 引入了 multi-short-time-Fourier-transform (multi-STFT) loss 去大幅度降低 GAN 模型訓練的難度.由於 multi-STFT 是計算由不同語音窗長度 (frame length),語音窗重疊長度 (frame shift),以及 FFT 點數求得的多個頻譜特徵的 loss,因此 multi-STFT 很好地幫助類神經網路學到了多層次的語音資訊,藉由這樣的輔助使得 GAN 模型訓練穩定.另一方面,MelGAN 採用了另一個具有相同精神的實現方式.MelGAN 擁有多個 discriminator,且每個 discriminator 就如同 SampleRNN 裡的每一層 RNN 一般,運作在不同的時域解析度上.由此我們可以發現,讓類神經網路學習到多層次的語音資訊,是一個提升語音生成模型能力以及降低訓練難度的關鍵.

GAN-based 語音生成

聲碼器比較 (Vocoder Summarization)

總體而言,主流的聲碼器有兩個主要的分類 , 基於聲源濾波模型的,以及基於單一類神經網路的語音生成模型.基於聲源濾波模型的聲碼器包含 1. 激勵訊號生成,2. 頻譜濾波,兩個子模組.當生成語音時,聲碼器的輸入為語音特徵,輸出為語音波形.傳統的聲碼器兩個子模組皆為參數化 (parametric-based) 模型.而由於參數化模型的 model 能力有限,近期研究著重於利用類神經網路取代原本的參數化模型.例如採用自迴歸機制的 LPCNet 或是非自迴歸機制的 GlotGAN [B. Bollepalli+, 2017] 和 GELP [L. Juvela+, 2019],皆利用不同的類神經網路去實現激勵訊號生成模組.而 Neural source filter (NSF) [X. Wang+, 2019] 則是利用類神經網路去實現頻譜濾波模組.

基於聲源濾波模型的聲音編碼器

另一方面,基於單一類神經網路的語音生成模型,輸入可以是語音或文字特徵,而輸出同樣為語音波形.雖然採用自迴歸機制的模型 (例: WaveRNN 和 WaveNet) 或採用非自迴歸機制的模型 (例: parallel WaveNet 和 Clarinet) 皆在自然語音的生成上表現非常突出,然而由於其純 data-driven 的特性且模型缺少對於語音的 prior 知識,造成這些模型缺乏對各語音成份的控制能力.因此我們團隊提出一個名為 QP 的模型架構,為類神經網路引入音高的資訊,加強其對音高的控制能力.我們將其分別應用在 WaveNet 以及 PWG 模型上,提出了採用自迴歸機制的 QPNet 和採用非自迴歸機制的 QPPWG,如有興趣歡迎閱讀[2020] 語音生成 (壹) Quasi-Periodic 語音訊號生成模型

基於單一類神經網路的聲音編碼器

總結

對於 RNN 語音生成模型而言,優點為其回授的機制,理論上可以 model 任意訊號長度的關聯性.然而缺點則是,這種回授機制造成模型複雜度及大小必須非常的有限,如此才能達到實時語音生成.因此近期 RNN 語音生成模型的研究著重於.如何只用非常小且複雜度低的類神經網路,去產生最低限度的必要資訊 (例:激勵訊號).讓其他資訊藉由運算成本較低的方式 (例:傳統的頻譜濾波器) 補足.

而對於 CNN 語音生成模型而言,優點為採用非自迴歸機制的 CNN 可以平行運算,即使模型相當複雜依然可以實現實時語音生成.缺點則是 CNN 的網路架構為固定的,因此其 model 關聯性的能力受限於網路架構,無法動態地根據輸入的訊號去做調整.因此近期 CNN 語音生成模型的研究著重於,1. 開發採用非自迴歸機制的演算法 (例:flow-based, GAN-based),2. 開發新的機制去增加模型對於不同輸入訊號調適的能力 (例:QPNet, QPPWG).

如果對採用 QP structure 的 CNN-based 聲碼器有興趣,歡迎參考我的下一篇文章 ([2020] 語音生成 (壹) Quasi-Periodic 語音訊號生成模型).

--

--