第二章 文獻回顧
2.2 基於隱藏式馬可夫模型之語音合成
2.2.3 隱藏式馬可夫模型於語音參數之建模
2.2.3.1 隱藏式馬可夫模型與頻譜參數建模
隱藏式馬可夫模型對於語音頻譜的建模可以視為一個有限狀態機(Finite
22
State Machine)在時間單位(如:音框(Frame))上的狀態轉移。在每次的狀態轉移,
皆有一個決策會決定狀態的轉移目標(其目標狀態包含自己),轉移後會根據目前 狀態之機率密度函數(Probability Density Function, pdf)產生一個向量,如圖(五)所 表示:
圖(五):隱藏式馬可夫模型圖示
其中,q 為目前之狀態,t 為目前之時間點,則每個狀態 q 在時間點 t 下的觀察 點𝑜𝑡,其機率𝑏𝑞(𝑜𝑡)通常以多變量高斯密度函數(Multivariate Gaussian Density
Function)表達,如式(17):
𝑏𝑞(𝑜𝑡) = ∑ 𝑐𝑞𝑚𝒩(𝑜𝑡, 𝜇𝑞𝑚, Σ𝑞𝑚)
𝑀
𝑚=1
= ∑ 𝑐𝑞𝑚 1 (2𝜋)𝐷2|Σ𝑞|
1 2
exp{−1
2(𝑜𝑡− 𝜇𝑞𝑚)′Σ𝑞𝑚−1(𝑜𝑡− 𝜇𝑞𝑚)}
𝑀
𝑚=1
(17)
其中𝑐𝑞𝑚、𝜇𝑞𝑚、Σ𝑞𝑚分別為第𝑞個狀態之第 m 個混和權重、𝐷-維度的平均值向量 以及𝐷 × 𝐷維的共變異(Covariance)矩陣。
同時為了方便表示完整的參數集合,我們通常會使用較為簡潔的方式來表
23
達隱藏式馬可夫模型之參數:
𝜆 = (𝐴, 𝐵, 𝜋) (18)
其中𝜆為一隱藏式馬可夫模型,𝐴, 𝐵, 𝜋分別為狀態轉移機率A = {𝑎𝑖𝑗}𝑖,𝑗=1𝑁 、狀態之 機率分布B = {𝑏𝑖(∙)}𝑖=1𝑁 以及起始狀態機率π = {𝜋𝑗}𝑗=1𝑁 ,且𝜋在左至右(left-to-right) 模型中具有下式之特性:
𝜋 = {0, 𝑖 ≠ 1
1, 𝑖 = 1 (19)
在隱藏式馬可 夫 模型當 中 我們使 用 前向後 向演算法 (Forward-Backward Algorithm)[65]來計算𝑃(𝑂|𝜆),即求取給予隱藏式馬可夫模型𝜆,其觀察序列𝑂 = (𝑜1, 𝑜2, ⋯ , 𝑜𝑇)之機率。
前向演算法(Forward Algorithm)
我們首先定義一個前向變數(Forward Variable)𝛼𝑡(𝑖)為給予一個隱藏式馬可 夫模型𝜆,從時間 1 至時間 t 之觀察序列,且時間在 t 的狀態 i 的機率
𝛼𝑡(𝑖) = 𝑃(𝑜1, 𝑜2, ⋯ , 𝑜𝑡, 𝑞𝑡 = 𝑖|𝜆) (20) 我們可依下面幾步驟求得其解:
(1.) 起始
𝛼1(𝑖) = 𝜋𝑖𝑏𝑖(𝑜1), 1 ≤ 𝑖 ≤ 𝑁 (21) (2.) 疊代
𝛼𝑡+1(𝑗) = [∑ 𝛼𝑡(𝑖)𝑎𝑖𝑗
𝑁
𝑖=1
] 𝑏𝑗(𝑜𝑡+1), 1 ≤ 𝑡 ≤ 𝑇 − 1
1 ≤ 𝑗 ≤ 𝑁 (22) (3.) 結束
24
𝑃(𝑂|𝜆) = ∑ 𝛼𝑇(𝑖)
𝑁
𝑖=1
(23)
其中𝑎𝑖𝑗代表由狀態 i 轉移至狀態 j 的轉移機率。
後向演算法(Backward Algorithm)
與前向演算法相同,我們首先定義一個後向變數(Backward Variable) 𝛽𝑡(𝑖)為 給予一個隱藏式馬可夫模型𝜆與時間在 t 的狀態 i,從時間 t 至時間 T 之觀察序列 之機率為
𝛽𝑡(𝑖) = 𝑃(𝑜𝑡+1, 𝑜𝑡+2, ⋯ , 𝑜𝑇|𝑞𝑡= 𝑖, 𝜆) (24) 與前向演算法相同,我們可依下面步驟求解:
(1.) 起始
𝛽𝑇(𝑖) = 1, 1 ≤ 𝑖 ≤ 𝑁 (25) (2.) 疊代
𝛽𝑡(𝑗) = ∑ 𝑎𝑖𝑗𝑏𝑗(𝑜𝑡+1)𝛽𝑡+1(𝑗)
𝑁
𝑖=1
, 𝑡 = 𝑇 − 1, 𝑇 − 2, ⋯ ,1
1 ≤ 𝑖 ≤ 𝑁 (26) (3.) 結束
𝑃(𝑂|𝜆) = ∑ 𝛽1(𝑖)
𝑁
𝑖=1
(27)
從上述之前向後向演算法,我們可以求得給予一個隱藏式馬可夫模型λ,產 生其觀察序列 O 之機率,而我們現在則面臨了一個問題,要如何調整模型參數 集合(𝐴, 𝐵, 𝜋)使其產生的觀察序列集合機率值最大,即最大化下式:
25
log 𝑃(𝑂1, 𝑂2, ⋯ , 𝑂𝐿|𝜆) (28) 其中我們假設共有 L 句資訓練資來訓練模型,而 S 為模型所有可能的狀態序列。
因 為 我 們 無 法 獲 得 其 聯 合 機 率 (Joint Probability) 的 封 閉 型 態 解 (Closed-Form
Solution),如式(29):
log 𝑃(𝑂1, 𝑂2, ⋯ , 𝑂𝐿|𝜆) = log ∏ 𝑃(𝑂𝑙|𝜆)
𝐿
𝑙=1
= ∑ log 𝑃(𝑂𝑙|𝜆)
𝐿
𝑙=1
= ∑ log ∑ 𝑃(𝑆|𝜆)𝑃(𝑂𝑙|𝑆, 𝜆)
𝑎𝑙𝑙 𝑆 𝐿
𝑙=1
(29)
但是我們仍可以使用最大期望(Expectation-maximization, EM)算法[66,67]來 獲得其區間最大值(Local Maximum)。
首先,我們先定義一個變數𝜉𝑡(𝑖, 𝑗)為給定一個模型λ與觀察序列 O,其狀態
i 在時間 t 與狀態 j 在時間 t+1 之轉移機率,即
𝜉𝑡(𝑖, 𝑗) = 𝑃(𝑞𝑡 = 𝑖, 𝑞𝑡+1 = 𝑗|𝑂, 𝜆) (30) 藉由計算前向後向演算法所得之變數𝛼𝑡, 𝛽𝑡+1,我們可將式(28)改寫成:
𝜉𝑡(𝑖, 𝑗) = 𝑃(𝑞𝑡 = 𝑖, 𝑞𝑡+1 = 𝑗, 𝑂|𝜆) 𝑃(𝑂|𝜆)
= 𝛼𝑡(𝑖)𝑎𝑖𝑗𝑏𝑗(𝑜𝑡+1)𝛽𝑡+1(𝑗)
∑𝑁𝑚=1∑𝑁𝑛=1𝛼𝑡(𝑚)𝑎𝑚𝑛𝑏𝑛(𝑜𝑡+1)𝛽𝑡+1(𝑛)
(31)
因此我們便可以改寫給定一個模型λ與觀察序列 O,其狀態 i 在時間點 t 之 機率便可以如下式表示:
26
𝛾𝑡(𝑖) = 𝑃(𝑞𝑡 = 𝑖|𝑂, 𝜆)
= ∑ 𝑃(𝑞𝑡 = 𝑖, 𝑞𝑡+1= 𝑗|𝑂, 𝜆)
𝑁
𝑗=1
= ∑ 𝜉𝑡(𝑖, 𝑗)
𝑁
𝑗=1
(32)
因此,若我們加總時間點 1 至 T-1 之𝜉𝑡(𝑖, 𝑗),即同等於計算在觀察序列 O 中,從狀態 i 到狀態 j 之轉移次數期望值。
同理,若我們加總時間點 1 至 T-1 之𝛾𝑡(𝑖, 𝑗),即獲得在觀察序列 O 中,從 狀態 i 轉移出去之轉移次數期望值。
從上述兩點,我們可以合理的推算出模型參數(𝜋, 𝐴)之更新公式應為:
𝜋̅𝑖即為狀態 i 在時間點 t 為 1 的期望值,如式(33)。
𝑎̅𝑖𝑗即為狀態 i 轉移至狀態 j 之期望值與從狀態 i 轉移出去之期望值的比值,
如式(34)。
𝜋̅𝑖 = 𝛾1(𝑖) (33)
𝑎̅𝑖𝑗 = ∑𝑇−1𝑡=1𝜉𝑡(𝑖, 𝑗)
∑𝑇−1𝑡=1𝛾𝑡(𝑖) (34) 從式(17)中我們得知,每個狀態在不同時間點的觀察機率為一多變量高斯密 度函數,又模型參數 B 相同狀態下在不同時間之觀察機率,即𝐵 = 𝑏𝑖(∙),故將 B 以混和權重𝑐𝑗𝑚、平均值𝜇𝑗𝑚以及共變異矩陣Σ𝑗𝑚表示。
首先,我們先定義一個新的變數𝛾𝑡(𝑗, 𝑘),用其代表狀態 j 為第 k 個混和模型 在時間點 t 在表示為觀察點𝑜𝑡機率,即式(35):
27
𝛾𝑡(𝑗, 𝑘) = 𝑃(𝑞𝑡= 𝑗, 𝑚𝑡 = 𝑘|𝑂, 𝜆)
= 𝑃(𝑞𝑡 = 𝑗|𝑂, 𝜆)𝑃(𝑚𝑡 = 𝑘|𝑞𝑡 = 𝑗, 𝑂, 𝜆)
= 𝛾𝑡(𝑗)𝑃(𝑚𝑡 = 𝑘|𝑞𝑡= 𝑗, 𝑂, 𝜆)
= [ 𝛼𝑡(𝑗)𝛽𝑡(𝑗)
∑𝑁𝑠=1𝛼𝑡(𝑠)𝛽𝑡(𝑠)] [ 𝑐𝑗𝑘𝒩(𝑜𝑡; 𝜇𝑗𝑘, Σ𝑗𝑘)
∑𝑀𝑚=1𝑐𝑗𝑚𝒩(𝑜𝑡; 𝜇𝑗𝑚, Σ𝑗𝑚)]
(35)
因此,混和權重𝑐𝑗𝑚、平均值𝜇𝑗𝑚以及共變異數Σ𝑗𝑚便可以下列三式表示:
𝑐̅𝑗𝑘 = ∑𝑇𝑡=1𝛾𝑡(𝑗, 𝑘)
∑𝑇𝑡=1∑𝑀𝑚=1𝛾𝑡(𝑗, 𝑚) (36) 𝜇̅𝑗𝑘= ∑𝑇𝑡=1𝛾𝑡(𝑗, 𝑘) ∙ 𝑜𝑡
∑𝑇𝑡=1𝛾𝑡(𝑗, 𝑘) (37) Σ̅𝑗𝑘 =∑𝑇𝑡=1𝛾𝑡(𝑗, 𝑘)∙ (𝑜𝑡− 𝜇̅𝑗𝑘) ∙ (𝑜𝑡− 𝜇̅𝑗𝑘)′
∑𝑇𝑡=1𝛾𝑡(𝑗, 𝑘) (38)