本文主要內容為對Google 語音合成論文《Transfer Learning from Speaker Verification to Multispeaker Text-To-Speech Synthesis》的解讀。
這項技術可以基於目標說話人數秒的音頻數據實現對說話人的克隆,也即通過文本可以合成出具有說話人發音特點的任意語音。論文中提到的模型甚至可以適配目標說話人的語音從未出現在訓練樣本中的情況。那麼google是如何通過深度學習獲得如此神奇的能力呢?下文將對該論文中涉及到的核心技術細節展開討論。
系統架構
該系統由3個可獨立訓練模塊構成:
- 說話人特徵編碼器-speaker encoder :實現對目標說話人發音特徵提取。
- 合成器-synthesizer:實現文本到梅爾譜(mel spectrogram) Seq2Seq變換。
- 聲碼器-vcoder: 實現梅爾譜(mel spectrogram)到波形(Waveform)變化。
三個模塊的集成方案和如下圖所示:
Speaker Encoder的輸出Speaker embedding 與合成器的Encoder編碼單元輸出通過連接操作作為合成器Attention模塊每個時間步的輸入,從而通過持續影響Decoder的輸出最終達到個性化輸出波形的目標。
以下對每個模塊的功能及實現方式做簡要介紹。
1、說話人特徵編碼器 (Speaker Encoder)
說話人特徵編碼器具有鑑別特定說話人的功能。輸入為短時自適應語音信號,輸出為說話人在發音特徵向量空間中的特徵向量。該特徵編碼與語音對應的文本及背景噪音獨立,是對說話人發音特質的描述。說話人特徵編碼器為語音合成模塊提供個性化定製參考。
下面對speaker encoder的模型構造進行簡要分析:
Speaker Encoder 模型的功能是實現說話人鑑別(分類)。訓練數據是文本獨立的語音ID對(不需要進行文本標註,僅需要標出對應說話人ID)。
Speaker Encoder的網絡結構如下圖所示:
網絡由3個LSTM層構成。每層LSTM包含768個cell,後接仿射層(Projection,通常目的是減少計算量和特徵降維)變換到256維。最終的Embeding由該說話人最後一幀在神經網絡運算結束後通過對最後一層在每個時間步的輸出進行平均和L2 Norm生成。
網絡輸入:將任意長度的語音信息轉化為40維的log-mel幀序列。
網絡輸出:固定長度的d-vecor (Embedding向量)。
訓練目標:同一個說話人不同語音輸入對應的輸出的餘弦距離小,不同說話人語音間的餘弦距離儘可能大。
前向階段處理流程:將輸入語音按照800ms的window 進行切分形成一系列的window,兩個相鄰window間有50%的重疊(overlapped),不同window作為獨立輸入計算神經網絡輸出。最後對所有輸出進行平均和正則化從而產生embedding輸出。
2、合成器 (Synthesizer)
論文所採用的合成器是對Tacotron2的擴展,屬於序列到序列(sequence-to-sequence)合成網絡。Google在論文中所採用的方法是通過將speaker embedding 與下圖中最底的Encoder的輸出(Bidrectional LSTM輸出)進行連接作為Location Sensitive Attention每個時間步的輸入,從而通過持續影響合成器decoder輸出而得到最終的個性化梅爾譜(MEL Spectrogram)。Tacotron2的網絡結構如下圖所示,具體工作可參考Google論文:《NATURAL TTS SYNTHESIS BY CONDITIONING WAVENET ON MEL SPECTROGRAM PREDICTIONS》,本人也將在後續文章中對該模型結構進行詳細解讀,歡迎關注頭條號:深度視野,通過訂閱持續獲得最新分享。
個性化合成效果可以查看論文作者給出的合成示例,如下圖所示:
上圖左側三列為參考目標說話人的5秒參考發音的Mel譜,三行代表三個不同的發音者。注意這裡不同說話人參考音對應的文本可以是不同的,該參考音通過speaker encoder 可以快速提取 speaker embedding也即說話人發音特徵。右側則顯示了依賴不同說話人在相同文本“this is a big red apple”下的個性化合成效果。可以從圖中看到
依據不同說話人,合成Mel譜具有顯著差異。訓練涉及到的一些細節:
tacotron2輸入為文本(text)字符序列轉換為對應的音素或者字母的Embedding序列。目標聲譜特徵(spctrogram features) 以50ms作為一幀(一個時間窗),12.5ms作為幀移(為了不丟失語音信息,幀會存在overlap)。從窗口信息中提取80維fbank特徵經過log域動態壓縮輸出作為神經網絡groud truth。
3、神經網絡聲碼器 (Neural Vocoder)
WaveNet具有良好的合成性能,論文聲碼器採用sample-by-sample的自迴歸WaveNet。通過該聲碼器將合成器產生的梅爾譜轉化為時域的waveforms。
論文中WaveNet的結構為包含30層Dilated CNN。下圖為一個基本的WaveNet構造,與本文結構一致但僅僅包含3個隱藏層。
推理和零樣本用戶自適應
預測階段(訓練完後文本轉語音個性化合成階段),模型使用目標說話人的任意語音(該語音不需要與輸入文本一樣)通過speaker encoder模塊提取發音特徵(speaker embedding vector)。由於speaker encoder僅基於音頻進行說話人特徵提取和推斷, 所以允許對訓練集中未出現的用戶進行發音特徵提取。在實踐中通常幾秒鐘的說話人語音數據就足以刻畫該目標說話人,通過合成器產生目標說話人適配的合成語音,所以該模型結構在大多數情況下能夠良好適配全新用戶,在這些情況下模型不能產生與目標說話人完全一致的發音,但發音往往會偏向於與該用戶發音特徵相似的用戶(speaker encoding 的輸出在歐氏空間能夠通過餘弦距離度量發音者的相似性)。
附錄:
1、餘弦距離(cos distance)
設向量a和向量b則a•b=|a||b|cos,|a|和|b|分別為兩向量的模,cos即為兩向量的餘弦值,所以cos=a•b/|a||b|
2、L2正則化 (L2 Normlization)
將一組數變成0-1之間。
分子為xi,分母為將下圖中p帶入2計算所得。通過對每個xi進行變換結果便是L2 Norm。
轉載聲明:
本文為頭條號作者
深度視野整理發佈,任何個人或組織未經授權不得轉載。違規轉載將追究法律責任。