声学似然度的计算

本文详细介绍了隐马尔科夫模型(HMM)在语音识别(ASR)领域的应用,包括使用前向算法计算声学似然度以及利用Viterbi算法进行解码,以寻找最可能的词序列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. forward algorithm

\quad一个HMM的Acoustic likelihood可以用前向算法(forward algorithm)来计算。给定一个HMM模型MMM,一个特征向量序列o1,o2,...oTo_1,o_2,...o_To1,o2,...oT,模型MMM能够生成OOO的似然度, 即声学似然度P(O∣M)P(O|M)P(OM)定义如下:
(1)P(O∣M)=∑SP(O,S∣M)=∑Sπs1bs1(o1)as1s2bs2(o2)...asT−1sTbsT(oT)\begin{aligned} P(O|M)&=\sum_{S}P(O,S|M) \\ &=\sum_{S}\pi_{s1}b_{s1}(o_1)a{s_1s_2}b_{s2}(o_2)...a_{s_{T-1}s_T}b_{s_T}(o_T)\tag{1} \end{aligned}P(OM)=SP(O,SM)=Sπs1bs1(o1)as1s2bs2(o2)...asT1sTbsT(oT)(1)
\quad其中SSS表示状态序列s1,s2,...sTs_1,s_2,...s_Ts1,s2,...sT,在ttt时刻的状态为sts_tst
\quad上面那个公式(1),是对所有可能产生观察序列的状态序列的转移概率和发射概率的和。然而枚举所有可能的假设需要很大的计算量。为了让这个求和效率更高一点,咱们可以用前向算法,一种递归的方式来进行计算。
(2)α(1,s)=πsbs(o1)α(t,s)=∑σ∈Sα(t−1,σ)aσsbsot\begin{aligned} \tag{2}\alpha(1,s)&=\pi_sb_s(o_1)\\ \alpha(t,s)&=\sum_{\sigma\in{S}}\alpha(t-1,\sigma)a_{\sigma s}b_s{o_t} \end{aligned}α(1,s)α(t,s)=πsbs(o1)=σSα(t1,σ)aσsbsot(2)
\quad其中,α(t,s)\alpha(t,s)α(t,s)表示的是在ttt时刻处于sss状态的前向概率。表示在ttt时刻,模型MMM输出o1,o2,...oto_1,o_2,...o_to1,o2,...ot,并且在ttt时刻到达sss状态的概率,即p(o1,o2,...,ot,st=s∣M)p(o_1,o_2,...,o_t,s_t=s|M)p(o1,o2,...,ot,st=sM)。所以最终输出o1,o2,...oTo_1,o_2,...o_To1,o2,...oT的概率为:
(3)p(O∣M)=∑s∈Fα(T,s)\begin{aligned} \tag{3}p(O|M)=\sum_{s\in{\mathcal{F}}}\alpha(T,s) \end{aligned}p(OM)=sFα(T,s)(3)

2. decode

\quad在解码的时候,我们一般用 Viterbi 算法,Viterbi 算法通过下面的公式来得到最可能输出OOO的状态序列的似然度。
(4)P~(O∣M)=max⁡SP(O,S∣M)=max⁡Sπs1bs1(o1)as1s2bs2(o2)...asT−1sTbsT(oT)\begin{aligned} \tag{4}\tilde{P}(O|M)&=\max\limits_SP(O,S|M) \\ &=\max\limits_S\pi_{s1}b_{s1}(o_1)a_{s_1s_2}b_{s2}(o2)...a_{s_{T-1}s_T}b_{s_T}(o_T) \end{aligned}P~(OM)=SmaxP(O,SM)=Smaxπs1bs1(o1)as1s2bs2(o2)...asT1sTbsT(oT)(4)
\quad这个式子看起来和前向很像,区别就在于用求最大值替换了求和。两者的区别根源在于所要完成的任务的不同,公式(1)的目的是想要看输出是OOO的可能性有多大。而(4)的目的是求最有可能输出OOO的状态序列。那公式(2)也可以为解码所用。不过会有一些改动如下:
(5)α~(1,s)=πsbs(o1)α~(t,s)=max⁡σ∈Sα~(t−1,σ)aσsbsot\begin{aligned} \tag{5}\tilde{\alpha}(1,s)&=\pi_sb_s(o_1)\\ \tilde{\alpha}(t,s)&=\max\limits_{\sigma\in{S}}\tilde{\alpha}(t-1,\sigma)a_{\sigma s}b_s{o_t} \end{aligned}α~(1,s)α~(t,s)=πsbs(o1)=σSmaxα~(t1,σ)aσsbsot(5)
\quadα~(t,s)\tilde{\alpha}(t,s)α~(t,s)模型MMM沿着最有可能的状态输出o1,o2,...oto_1,o_2,...o_to1,o2,...ot,并且在ttt时刻到达sss。这个时候,每个时刻就只用考虑一个状态了。那最终的:
(6)p~(O∣M)=max⁡s∈Fα~(T,s)\begin{aligned} \tag{6}\tilde{p}(O|M)=\max\limits_{s\in{\mathcal{F}}}\tilde{\alpha}(T,s) \end{aligned}p~(OM)=sFmaxα~(T,s)(6)
\quad这个p~(O∣M)\tilde{p}(O|M)p~(OM)也叫做 Viterbi score。在每个时刻选择的状态,整个连接起来就形成了一条路径,我们管它叫 Viterbi path。

3. Viterbi algorithm for asr

\quad在语音识别解码问题上,有几个总出现的公式
(7)W^=arg⁡max⁡W∈WP(W∣O)\begin{aligned} \tag{7}\hat{W}=\arg\max\limits_{W\in{\mathcal{W}}}P(W|O) \end{aligned}W^=argWWmaxP(WO)(7)
\quad根据贝叶斯公式:
(8)W^=arg⁡max⁡W∈WP(O∣W)P(W)P(O)=arg⁡max⁡W∈WP(O∣W)P(W)\begin{aligned} \tag{8}\hat{W}&=\arg\max\limits_{W\in{\mathcal{W}}}\frac{P(O|W)P(W)}{P(O)}\\ &=\arg\max\limits_{W\in{\mathcal{W}}}P(O|W)P(W) \end{aligned}W^=argWWmaxP(O)P(OW)P(W)=argWWmaxP(OW)P(W)(8)
\quad假定每个句子假设WWW是一个由w1,w2,...,wMww_1,w_2,...,w_{M_w}w1,w2,...,wMw组成的序列,那么 word-level的分数为:
(9)W^=arg⁡max⁡W∈W∑S∈SWP(O,S∣W)P(W)=arg⁡max⁡W∈W∑S∈SW∏m=1MWp(otm−1+1tm,stm−1+1tm∣wm)P(wm∣w1m−1)\begin{aligned} \tag{9}\hat{W}&=\arg\max\limits_{W\in{\mathcal{W}}}\sum_{S\in{S_W}}P(O,S|W)P(W)\\ &=\arg\max\limits_{W\in{\mathcal{W}}}\sum_{S\in{S_W}}\prod_{m=1}^{M_W}p(o_{t_{m-1}+1}^{t_m},s_{t_{m-1}+1}^{t_m}|w_m)P(w_m|w_{1}^{m-1}) \end{aligned}W^=argWWmaxSSWP(O,SW)P(W)=argWWmaxSSWm=1MWp(otm1+1tm,stm1+1tmwm)P(wmw1m1)(9)
\quad其中P(otτ,stτ∣w)P(o_t^\tau,s_t^\tau|w)P(otτ,stτw)表示的是www沿着状态st,...,sτs_t,...,s_{\tau}st,...,sτ生成ot,...,oτo_t,...,o_{\tau}ot,...,oτ的似然度。SwS_wSw表示是的WWW可能的状态序列。tmt_mtm表示的是词wmw_mwm的结束帧,由状态序列SSS决定。此处,t0=0t_0=0t0=0
\quad使用Viterbi算法进行解码的时候,最优的词序列W^\hat{W}W^是由最有可能的状态序列生成的。具体计算如下:
(10)W^=arg⁡max⁡W∈Wmax⁡S∈SWP(O,S∣W)P(W)=arg⁡max⁡W∈Wmax⁡S∈SW∏m=1MWp(otm−1+1tm,stm−1+1tm∣wm)P(wm∣w1m−1)=arg⁡max⁡W∈Wmax⁡T∈TW∏m=1MWp~(otm−1+1tm,stm−1+1tm∣wm)P(wm∣w1m−1)\begin{aligned} \tag{10}\hat{W}&=\arg\max\limits_{W\in{\mathcal{W}}}\max\limits_{S\in{S_W}}P(O,S|W)P(W)\\ &=\arg\max\limits_{W\in{\mathcal{W}}}\max\limits_{S\in{S_W}}\prod_{m=1}^{M_W}p(o_{t_{m-1}+1}^{t_m},s_{t_{m-1}+1}^{t_m}|w_m)P(w_m|w_{1}^{m-1})\\ &=\arg\max\limits_{W\in{\mathcal{W}}}\max\limits_{T\in{\mathcal{T}_W}}\prod_{m=1}^{M_W}\tilde{p}(o_{t_{m-1}+1}^{t_m},s_{t_{m-1}+1}^{t_m}|w_m)P(w_m|w_{1}^{m-1}) \end{aligned}W^=argWWmaxSSWmaxP(O,SW)P(W)=argWWmaxSSWmaxm=1MWp(otm1+1tm,stm1+1tmwm)P(wmw1m1)=argWWmaxTTWmaxm=1MWp~(otm1+1tm,stm1+1tmwm)P(wmw1m1)(10)
\quad突然冒出来的TW\mathcal{T_W}TW表示的是可能的结束帧序列的集合。T∈TWT\in{\mathcal{T}_W}TTW是一个时间帧序列,这个序列和句子里面的没歌词是对应的,表示为:t1,...,tMWt_1,...,t_{M_W}t1,...,tMW。所以对于一个词序列的 Viterbi score ,可以通过 word-level 的 Viterbi Score 和对应的语言概率来累乘得到。
\quad为了更加有效地找到W^\hat{W}W^,避免枚举所有可能的WWW,单个词的 Viterbi 算法可以通过在不同的词HMM之间引入词间状态转移来扩展一下。词间状态转移是通过类似于FSG(finite state grammer)来定义的。n-gram模型同样可以应用于此,因为n-gram可以当做是一个 probabilistic FSG(PFSG),只不过每一个状态转移之间加了一个概率而已。
\quad一个PFSG可以定义为一个七元组:
(11)G=(Q,V,E,I,F,P,π)\tag{11}G=(\mathcal{Q,V,E,I,F},P,\pi)G=(Q,V,E,I,F,P,π)(11)具体含义如下:

  1. Q\mathcal{Q}Q:状态集合;
  2. V\mathcal{V}V:词标签集合,比如词典;
  3. E\mathcal{E}E:状态转移集合;
  4. I\mathcal{I}I:初始状态集合;
  5. F\mathcal{F}F:结束状态集合;
  6. P:QP:\mathcal{Q}PQ x Q\mathcal{Q}Q —>[0, 1] 状态转移概率函数;
  7. π\piπ —> [0, 1] 初始状态概率函数

\quad如果GGG是一个 bigram LM,那么每个词分配一个状态。假定pwp_wpw表示词www的状态,那么www的初始概率π(pw)\pi(p_w)π(pw)就等于unigram LM中的P(w)P(w)P(w)。词vvv到词www之间状态转移概P(pw∣pv)=P(w∣v)P(p_w|p_v)=P(w|v)P(pwpv)=P(wv)。如果是trigram LM,那么对应的就每个状态都是一个词对(Word pair),对应的状态转移概率就是 trigram LM 中的概率。
\quad给定一个输出序列o1,o2,...,oTo_1, o_2,...,o_To1,o2,...,oT以及一个gammar(我也不知道咋翻译这个……),grammar的每一个词都对应着一个词HMM,这个HMM包含着状态的词标签。
\quad当使用word HMM的时候,每一个模型都被扩展了,加了一个初始状态和终止状态。假定一个grammar 状态ppp的Word HMM为θp=(Sp,Yp,Ap,Bp,∏p,F)\theta_p=(\mathcal{S_p,Y_p,A_p,B_p,\prod_p,F})θp=(Sp,Yp,Ap,Bp,p,F),其中,Ap={aσs(p)∣σ∈Sp}\mathcal{A_p}= \{ a_{\sigma s}^{(p)}|\sigma \in \mathcal S_p \}Ap={aσs(p)σSp}为状态转移矩阵,Bp={bs(p)(o)∣s∈Sp,o∈Yp}\mathcal{B_p}=\{b_s^{(p)}(o)|s\in \mathcal S_p, o\in \mathcal Y_p\}Bp={bs(p)(o)sSp,oYp}为状态发射矩阵,∏p={πs(p)∣s∈Sp}\mathcal{\prod_p}=\{\pi_s^{(p)}|s\in \mathcal{S_p}\}p={πs(p)sSp}为初始状态。我们用ipi_pipfpf_pfp来表示初始和终止状态。
给定一个解码图,对于输入的utterance,可以用 one-pass viterbi algorithm 来得到最有可能的词序列。这个算法也被称为时间同步维特比搜索。下面详述这个过程。

\quadα~(t,p,s)\tilde\alpha(t,p,s)α~(t,p,s):在一个grammar state ppp (其实就是一句话中的一个词)中,直到ttt时刻,处于状态sss的某条路径的Viterbi score。
\quadB(t,p,s)B(t,p,s)B(t,p,s):a back pointer(回溯指针?……太难了太难了),来追踪在grammar state ppp 中,直到ttt时刻处于状态sss最可能的词序列的路径。B(t,p,s)B(t,p,s)B(t,p,s)有一对&lt;τ,q&gt;&lt;\tau,q&gt;<τ,q>,其中呢τ\tauτ表示与grammar state ppp 绑定的词的开始帧,qqq是在ppp之前的最有可能的 grammar state。如果 ppp 之前没有grammar state,那么q=0q=0q=0
在这个utterance的结束帧,我们可以通过back-tracking来找到最有可能的词序列。具体的就是用那个回溯指针来找。
\quad令 Adj(sss)表示状态 sss 的邻近状态列表。Woerd(ppp)表示 grammar state ppp的词标签。如果 ppp是个空状态,Word(ppp)返回ϵ\epsilonϵ,表示空字符串。

Step 1: Initialization
\qquad for each grammar states p∈Qp\in \mathcal{Q}pQ,
\qquad\quadfor each HMM state s∈Sps\in\mathcal{S_p}sSp,
(12)α~(0,p,s)={πpif p∈I and s=ipmax⁡q∈Qα~(0,q,fq)P(p∣q)if p∉I and s=ip0otherwise\tag{12}\tilde\alpha(0,p,s)=\begin{cases}\pi_p&amp;\text{if }p\in\mathcal{I}\text{ and }s=i_p\\ \max\limits_{q\in\mathcal{Q}}\tilde\alpha(0,q,f_q)P(p|q)&amp;\text{if }p\notin\mathcal{I}\text{ and }s=i_p\\ 0&amp;\text{otherwise} \end{cases}α~(0,p,s)=πpqQmaxα~(0,q,fq)P(pq)0if pI and s=ipif p/I and s=ipotherwise(12)
(13)B(0,p,s)=&lt;0,0&gt;\tag{13}B(0,p,s)=&lt;0,0&gt;B(0,p,s)=<0,0>(13)
Step 2: Time-synchronous processing
\qquadFor time frames: t=1,2,...,Tt=1,2,...,Tt=1,2,...,T
\qquad\quad Intra-word transition:
\qquad\qquad for each grammar states p∈Qp\in \mathcal{Q}pQ,
\qquad\qquad\qquadfor each HMM state s∈Sp−{ip,fp}s\in\mathcal{S_p-\{i_p,f_p\}}sSp{ip,fp},
a~(t,p,s)=max⁡σ∈(Sp−{ip,fp})\begin{aligned}\tilde{a}(t,p,s)&amp;=\max\limits_{\sigma\in(S_p-\{i_p,f_p\})} \end{aligned}a~(t,p,s)=σ(Sp{ip,fp})max

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值