好耶!
在做之前總要先知道你做這個能幹嘛吧
大部分的語音轉換系統都假設有並行訓練數據,就是兩個說話的人必須要說出相同句子的語音對,無法接受非並行數據的訓練,這樣在聲音轉換的任務上就出現了第一道門檻 - 資料蒐集與對齊的困難。
在少數幾個能處理非並行數據的現有算法中,能夠用於多對多轉換的算法就又更少了,但還是有像是 CycleGAN, StarGAN-VC 可以做到 (而且這兩篇還是同一個作者)。
而在 AutoVC (2019)出現以前,沒有任何語音轉換系統能夠執行零樣本轉換 (他們這樣宣稱),就是僅通過觀察一個沒聽過的人的少數話語就可以轉換成另一個人的聲音。
傳統的語音轉換 ( 例如:用 NMF 將頻譜分解為與說話人有關的和說話人無關的特徵 ) 的問題正被重新定位為風格轉換問題,將音質視為風格 (style),將說話的人視為領域 (domains)。
我們昨天做的 D_VECTOR 就是萃取出 "說話的人" 的資訊模型
我們假設語音是由以下隨機過程產生的。
說話的人身份 U 是從一群人 pU(·) 中抽取的隨機變量
內容是指語音和韻律信息
內容向量 Z = Z(1 : T) 是由聯合內容分佈 pZ(·) 得出的隨機過程。
在給定說話的人身份和內容的情況下,X(t) 就可以代表語音波形的一個樣本,或者語音頻譜圖的 1 幀
語音片段 X = X(1 : T) = pX(·|U, Z) 它表示了發出 Z 內容的說話人語音的分佈情況
接著,再假設大家講話的長度一樣
H(X|U = u) = hspeech = constant,
現在,假設兩組變量 (U1 , Z1 , X1) 和 (U2 , Z2 , X2) 是獨立且同分佈的隨機樣本則 (U1 , Z1 , X1) 屬於源說話的人,(U2 , Z2 , X2) 屬於目標說話的人。
# 理想的語音轉換器應該具有以下理想的性質
pXˆ1→2 (·|U2 = u2, Z1 = z1) = pX(·|U = u2, Z = z1)
當 U1 和 U2 都出現在訓練集中時,問題就是一個標準的多說話人轉換問題,已經有一些模型解決這個問題了。
當 U1 或 U2 不在訓練集中時,問題就變成了零樣本語音轉換問題,這就是 AutoVC 解決的困難。
今天我們了解到聲音轉換的困難,也知道非並行數據的解決辦法了,就是兩種,Feature Disentangle 跟直接硬轉,但硬轉的下場就是不能夠做零樣本轉換,接著就等明天讓我們更詳細的鑽研 AutoVC 吧!