新手語音入門(四): 傳統語音識別技術簡介 | 隱馬爾可夫鏈 | 聲學/語言模型 | WFST解碼
隱馬爾可夫鏈HMM模型自從1980年代被用于語音識別以來,一直都是實際語音識別系統的主流方法。
1. 聲學模型
1.1 隱馬爾可夫鏈模型HMM與聲學模型
根據上一篇博文中提到的,
P
(
X
∣
W
)
P(X|W)
P(X∣W)對應的是聲學模型,首先需要考慮的是,語音和文本的不定長關系使得二者的序列之間無法一一對應。隱馬爾可夫鏈模型正好可以解決這個問題。
圖1 隱馬爾可夫鏈模型(I、E表示開始和結束時間)
比如
P
(
X
│
W
)
=
P
(
x
1
,
x
2
,
x
3
∣
w
1
,
w
2
)
P(X│W)=P(x_1,x_2,x_3 |w_1,w_2)
P(X│W)=P(x1 ,x2 ,x3 ∣w1 ,w2 )可以表示成上面隱馬爾可夫鏈的形式,圖中
w
w
w是HMM的隱含狀態,
x
x
x是HMM的觀測值,隱含狀態數與觀測值數目不受彼此約束,這便解決了輸入輸出的不定長問題,并有:
P
(
X
│
W
)
=
P
(
w
1
)
P
(
x
1
∣
w
1
)
P
(
w
2
∣
w
1
)
P
(
x
2
∣
w
2
)
P
(
w
2
∣
w
2
)
P
(
x
3
∣
w
2
)
P(X│W)=P(w_1)P(x_1 |w_1)P(w_2 |w_1)P(x_2 |w_2)P(w_2 |w_2)P(x_3 |w_2)
P(X│W)=P(w1 )P(x1 ∣w1 )P(w2 ∣w1 )P(x2 ∣w2 )P(w2 ∣w2 )P(x3 ∣w2 )
其中,HMM的初始狀態概率
P
(
w
1
)
P(w_1)
P(w1 )和狀態轉移概率(
P
(
w
2
∣
w
1
)
P(w_2 |w_1)
P(w2 ∣w1 )、
P
(
w
2
∣
w
2
)
)
P(w_2 |w_2))
P(w2 ∣w2 ))可以用常規的統計方法從樣本總計算出來,主要的難點在于HMM發射概率(
P
(
x
1
∣
w
1
)
P(x_1 |w_1)
P(x1 ∣w1 )、
P
(
x
2
∣
w
2
)
P(x_2 |w_2)
P(x2 ∣w2 )和
P
(
x
3
∣
w
2
)
P(x_3 |w_2)
P(x3 ∣w2 ))的計算上,所以聲學模型問題進一步細化到HMM發射概率(Emission Probabolity)的學習上。
另外需要解決的一個問題是,文本的基本單位粒度大小。對于語音來說,幀的粒度可以通過調節處理窗口的寬窄來控制。對于文本,字詞級別的粒度過于寬泛籠統,因此如圖,我們將其分解:
圖2 Phone、Triphone、Senone三者之間的關系(#N、#
N
3
N^3
N3、#3
N
3
N^3
N3表示數量級)
字詞是由音素(Phone)組成的;音素的上下文不同,同一個音素就有了不同的變異體,比如
/
l
?
d
?
s
i
l
/
/l-d-sil/
/l?d?sil/與
/
u
?
d
?
l
/
/u-d-l/
/u?d?l/,我們將其記為三音素(Triphone)。
每個三因素又可以用一個獨立的三狀態HMM來建模,因此文本方面的基本單位編程微小的HMM狀態。由于很多三音素并未在語料中出現或數量不多,并且最終可以通過決策樹共享三音素的狀態,所以對于共有N個音素的語言,最終保留下來的三音素狀態數量遠小于
3
N
3
3N^3
3N3,一般為幾千個,一般把他們定義為Senones,而每一幀與每一個Senone的對應關系表示為三音素HMM的發射概率
P
(
x
i
∣
s
j
)
P(x_i |s_j)
P(xi ∣sj ),其中
s
j
s_j
sj 表示第
j
j
j個Senone,與之對應的幀(
x
i
x_i
xi )的跨度通常取為25ms,幀間步移常取10ms。其中Senone是借助數學模型定義出來的音素變種,沒有直接的聽覺感受。音素“/sil/”無實際發音,僅表示靜音、自間停頓或無意義的聲音,#
N
N
N是Phone的個數,#
N
3
N^3
N3、#3
N
3
N^3
N3分別是Triphone、Senone的可能數量級。
Sentence到Word,Word到Phone,Phone到Triphone,每個Triphone都用HMM建模,將所有相關的HMM按發音順序首尾相連組成的HMM長鏈則表示Sentence.
所有
P
(
X
∣
W
)
P(X|W)
P(X∣W)就是這條HMM長鏈產生觀測序列X的概率。因為Phone的個數是固定的,系統中所有的Triphone HMM所構成的基本集合也是固定的,不同
w
w
w對應的長鏈不同則在于長鏈所包含的Triphone不同,但他們所使用的字典是相同的。
用p表示Phone、c表示Triphone,可知一個p可以對應多個c,
P
(
X
∣
W
)
P(X|W)
P(X∣W)有類似如下的轉換關系:
P
(
X
│
W
)
=
P
(
x
1
,
…
,
x
t
│
w
1
,
…
,
w
l
)
,
w
1
=
p
1
,
p
2
,
…
=
P
(
x
1
,
…
,
x
t
│
p
1
,
…
,
p
m
)
,
p
1
=
c
1
,
p
2
=
c
2
,
p
3
=
c
3
,
…
=
P
(
x
1
,
…
,
x
t
│
c
1
,
…
,
c
m
)
,
c
1
=
s
1
,
s
2
,
s
3
,
…
=
P
(
x
1
,
…
,
x
t
│
s
1
,
…
,
s
o
)
,
o
>
n
=
m
>
l
P(X│W)=P(x_1,…,x_t│w_1,…,w_l ),w_1={p_1,p_2,…} \\ = P(x_1,…,x_t│p_1,…,p_m ),p_1=c_1,p_2=c_2,p_3=c_3,… \\ = P(x_1,…,x_t│c_1,…,c_m ),c_1={s_1,s_2,s_3,…} \\ = P(x_1,…,x_t│s_1,…,s_o ),o>n=m>l
P(X│W)=P(x1 ,…,xt │w1 ,…,wl ),w1 =p1 ,p2 ,…=P(x1 ,…,xt │p1 ,…,pm ),p1 =c1 ,p2 =c2 ,p3 =c3 ,…=P(x1 ,…,xt │c1 ,…,cm ),c1 =s1 ,s2 ,s3 ,…=P(x1 ,…,xt │s1 ,…,so ),o>n=m>l
根據上式,雖然聲學建模的粒度細化了,但是問題仍是給定HMM,求產生某個觀測序列的概率,只是HMM更長一些而已,歸根結底仍需要對發射概率
P
(
x
i
∣
s
j
)
P(x_i|s_j)
P(xi ∣sj )建模。
總結:語音識別聲學模型的設計正是一個從大到小、從宏觀到微觀的拆解過程,而語音識別的解碼則是將過程逆轉:從Frame到Senone,從Senone到Triphone,再到Phone,最后到Word直至Sentence.
1.2 GMM-HMM模型
根據上文,HMM中的發射概率
P
(
x
i
∣
s
j
)
P(x_i|s_j)
P(xi ∣sj )的建模直接影響聲學模型的好壞。
高斯混合模型(Gaussion Mixture Model,GMM)是最常用的統計模型,給定充分的子高斯數,GMM可以擬和任意的概率分布,所以GMM成為首選的發射概率模型。
每個GMM對應一個Senone,并用各自的概率密度函數(Probability Density Function,PDF)表示。
下圖表示單個三音素的GMM-HMM結構:
圖3 一個三音素的GMM-HMM結構
GMM把每幀看成空間中一個孤立的點,點與點之間沒有依賴關系,所以GMM忽略了語音信號中的時序信息,并且幀內各維度相關性較小的MFCC(Mel Frequency Cepstral Coeffcient)特征更有利于GMM建模。
GMM訓練完成后,通過比對每個PDF,可以求出發射概率
P
(
x
i
∣
s
j
)
P(x_i|s_j)
P(xi ∣sj ),結合HMM的初始狀態概率、狀態轉移概率,通過HMM計算公式計算得到
P
(
X
∣
W
)
P(X|W)
P(X∣W)。
1.3 DNN-HMM模型
GMM是生成式模型(generative Model), 著重刻畫數據的內在分布,可以直接求解
P
(
x
i
∣
s
j
)
P(x_i|s_j)
P(xi ∣sj ),而
P
(
x
i
∣
s
j
)
=
P
(
s
i
∣
x
j
)
P
(
x
j
)
/
P
(
s
j
)
P(x_i|s_j) = P(s_i|x_j)P(x_j)/P(s_j)
P(xi ∣sj )=P(si ∣xj )P(xj )/P(sj ),因為
P
(
x
j
)
P(x_j)
P(xj )省去不算,
P
(
s
j
)
P(s_j)
P(sj )可通過常規統計方法求出,問題被進一步歸結為求取
P
(
s
i
∣
x
j
)
P(s_i|x_j)
P(si ∣xj ),這是典型的分類問題,也是判別式模型最擅長的,其中深度神經網絡的表現最為突出。其中
P
(
s
i
∣
x
j
)
P(s_i|x_j)
P(si ∣xj )是似然概率(Likelihood),P(s_j)是先驗概率,P(s_i|x_j)是后驗概率。
DNN用于分類問題,屬于監督學習,需要準備標簽。由于語音訓練集往往是語音與整條文本之間的對應關系,并未明確指出幀級別的標簽。因此還需要使用額外的算法對數據集打標簽,選擇的方法是上文的GMM。GMM擅長捕捉已知數據間的內在關系,打出來的標簽具有較高的可信度。下圖展示了基本的DNN-HMM聲學模型結構,語音特征作為DNN的輸入,DNN的輸出則用于計算HMM的發射概率。
圖4 DNN-HMM經典結構
相較于GMM-HMM結構,DNN-HMM與之唯一的不同是結構中的發射概率是由DNN而非GMM求出的。
2. 語言模型
語言模型要解決的問題是如何計算P(W),常用的方法基于n元語法(n-gram Grammer)或RNN。
2.1 N-gram語言模型
語言模型是典型的自回歸模型(Autoregressive Model),給定次序列
W
=
[
w
1
,
w
2
,
…
w
m
]
W=[w_1,w_2,…w_m]
W=[w1 ,w2 ,…wm ],其概率表示為
P
(
W
)
=
P
(
w
1
,
w
2
,
…
,
w
m
)
=
∏
i
=
1
m
P
(
w
i
∣
w
1
,
w
2
…
,
w
i
?
1
)
∝
∏
i
=
1
m
P
(
w
i
∣
w
i
?
n
+
1
,
w
i
?
n
+
2
,
…
,
w
i
?
1
)
P(W)=P(w_1,w_2,…,w_m) \\ = ∏_{i=1}^mP(w_i | w_1,w_2…,w_{i-1}) \\ ∝ ∏_{i=1}^mP(w_i | w_{i-n+1},w_{i-n+2},…,w_{i-1})
P(W)=P(w1 ,w2 ,…,wm )=i=1∏m P(wi ∣w1 ,w2 …,wi?1 )∝i=1∏m P(wi ∣wi?n+1 ,wi?n+2 ,…,wi?1 )
上式做出了“遠親不如近鄰”假設,即所謂的n-gram模型,它假設當前詞的出現概率只與該詞之前n-1個詞相關,且該式中各因子需要從一定數量的文本語料中統計計算出來,此過程即是語言模型的訓練過程,且需要列出所有可能的
P
(
w
i
∣
w
i
?
n
+
1
,
…
,
w
i
?
1
)
P(w_i |w_{i-n+1},…,w_{i-1})
P(wi ∣wi?n+1 ,…,wi?1 )。
計算過程可以簡化為計算語料中相應詞串出現的比例關系,即
P
(
w
i
│
w
i
?
n
+
1
,
w
i
?
n
+
1
,
…
,
w
i
?
1
)
=
c
o
u
n
t
(
w
i
?
n
+
1
,
w
i
?
n
+
2
,
…
,
w
i
)
c
o
u
n
t
(
w
i
?
n
+
1
,
w
i
?
n
+
2
,
…
,
w
i
?
1
)
P(w_i│w_{i-n+1},w_{i-n+1},…,w_{i-1} )= \frac {count(w_{i-n+1},w_{i-n+2},…,w_i)}{count(w_{i-n+1},w_{i-n+2},…,w_{i-1})}
P(wi │wi?n+1 ,wi?n+1 ,…,wi?1 )=count(wi?n+1 ,wi?n+2 ,…,wi?1 )count(wi?n+1 ,wi?n+2 ,…,wi )
其中count表示詞串在語料中出現的次數,由于訓練語料不足或詞串不常見等因素導致某些詞串未在訓練文本中出現,可以使用平滑算法處理。
2.2 RNN語言模型
可以由上述概率計算公式的子式看出,當前的結果依賴于之前的信息,因此可以天然使用單向循環神經網絡進行建模。
常規做法是,利用句子中的歷史詞匯來預測當前詞。
圖5 RNN語言模型基本結構
如圖5所示,為RNN語言模型的基本結構,其輸出層往往較寬,每個輸出節點對應一個詞,整個輸出層涵蓋了語言模型所使用的詞表,故其訓練本質上也是訓練器訓練,每個節點的輸出表示產生該節點詞的概率,即
P
(
w
i
∣
w
i
?
n
+
1
,
…
,
w
i
?
1
)
P(w_i |w_{i-n+1},…,w_{i-1})
P(wi ∣wi?n+1 ,…,wi?1 ),根據公式可以求出
P
(
W
)
P(W)
P(W)。
3. 解碼器
我們語音識別最終目的是選擇使得
P
(
W
∣
X
)
=
P
(
X
∣
W
)
P
(
W
)
P(W|X)=P(X|W)P(W)
P(W∣X)=P(X∣W)P(W)最大的
W
W
W,所以解碼本質上式一個搜索問題,并可借助加權有限狀態轉換機(Weighted Finite State Transducer, WFST)統一進行最優路徑搜索。
WFST由狀態節點和邊組成,且邊上有對應的輸入、輸出符號及權重,形式為
x
:
y
/
w
x:y/w
x:y/w,表示該邊的輸入符號為x,輸出符號為y,權重為w,權重可以定義為概率(越大越好)、懲罰(越小越好)等,從起始到結束狀態上的所有權重通常累加起來,記為該路徑的分數,一條完整的路徑必須從起始時間到結束時間。
圖6 語言模型的WFST示例
上圖是語言模型表示為WFST的示例。句子由詞組成,對于n-gram LM,可以將其表示為WFST,并記為G。可以看出G的輸入符號和輸出符號是相同的,均為詞,其后的權重由語言模型中的概率值轉換而來,據此圖可知,句子“using data is better”的得分為1+0.66+0.5+0.7=2.86, 句子“using intuition is worse”的得分為1+0.33+1+0.3=2.63。
圖7 發音詞典WFST示例
上圖是發音詞典表示成WFST的示例。因為詞是由音素組成,可以將其表示為WFST,并記為L。圖中的ε是個占位符,表示沒有輸入或輸出。根據此圖,單詞“data=/dey t ax/”的得分為1+0.5+0.3+1=2.8,而單詞“dew=/d uw/”的得分為1+1=2,如果將權重定義為懲罰,則“dew”的可能性更大。
以此類推,定義輸入Triphone、輸出為Phone的WFST為C,定義輸入為Senone、輸出為Triphone的WFST為H,至此,我們得到4個WFST,即H、C、L、G。因為前者是輸出是后者的輸入,所有可以將他們融合成一個WFST,這樣就可以實現從Senone到Triphone(H)、Triphone到Phone?、Phone到Word(L)、Word到Sentence(G),這就是解碼圖(Decoding Graph)。
最終解碼時,只需要GMM或DNN,就可以利用HCLG進行解碼了,給定語音特征序列X,可以通過GMM或DNN計算出
P
(
s
i
∣
x
j
)
P(s_i|x_j)
P(si ∣xj ),借助于HCLG,
P
(
W
∣
X
)
∝
P
(
X
∣
W
)
P
(
W
)
P(W|X)∝P(X|W)P(W)
P(W∣X)∝P(X∣W)P(W)的計算將變得簡單,即將W路徑上的權重相加(假設為懲罰),再減去個狀態針對輸入的發射概率得到的最終得分,該得分越小,說明該語音X轉錄為W的可能性越大。
參考:
語音識別基本法 - 清華大學語音和語言技術中心[PDF]
AI EI企業智能 EI智能體 SIS 語音通話
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。