声学似然度的计算

1. forward algorithm

\quad 一个HMM的Acoustic likelihood可以用前向算法(forward algorithm)来计算。给定一个HMM模型 M M M,一个特征向量序列 o 1 , o 2 , . . . o T o_1,o_2,...o_T o1,o2,...oT,模型 M M M能够生成 O O O的似然度, 即声学似然度 P ( O ∣ M ) P(O|M) P(OM)定义如下:
(1) P ( O ∣ M ) = ∑ S P ( O , S ∣ M ) = ∑ S π s 1 b s 1 ( o 1 ) a s 1 s 2 b s 2 ( o 2 ) . . . a s T − 1 s T b s T ( o T ) \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 其中 S S S表示状态序列 s 1 , s 2 , . . . s T s_1,s_2,...s_T s1,s2,...sT,在 t t t时刻的状态为 s t s_t st
\quad 上面那个公式(1),是对所有可能产生观察序列的状态序列的转移概率和发射概率的和。然而枚举所有可能的假设需要很大的计算量。为了让这个求和效率更高一点,咱们可以用前向算法,一种递归的方式来进行计算。
(2) α ( 1 , s ) = π s b s ( o 1 ) α ( t , s ) = ∑ σ ∈ S α ( t − 1 , σ ) a σ s b s o t \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)表示的是在 t t t时刻处于 s s s状态的前向概率。表示在 t t t时刻,模型 M M M输出 o 1 , o 2 , . . . o t o_1,o_2,...o_t o1,o2,...ot,并且在 t t t时刻到达 s s s状态的概率,即 p ( o 1 , o 2 , . . . , o t , s t = s ∣ M ) p(o_1,o_2,...,o_t,s_t=s|M) p(o1,o2,...,ot,st=sM)。所以最终输出 o 1 , o 2 , . . . o T o_1,o_2,...o_T o1,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 算法通过下面的公式来得到最可能输出 O O O的状态序列的似然度。
(4) P ~ ( O ∣ M ) = max ⁡ S P ( O , S ∣ M ) = max ⁡ S π s 1 b s 1 ( o 1 ) a s 1 s 2 b s 2 ( o 2 ) . . . a s T − 1 s T b s T ( o T ) \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)的目的是想要看输出是 O O O的可能性有多大。而(4)的目的是求最有可能输出 O O O的状态序列。那公式(2)也可以为解码所用。不过会有一些改动如下:
(5) α ~ ( 1 , s ) = π s b s ( o 1 ) α ~ ( t , s ) = max ⁡ σ ∈ S α ~ ( t − 1 , σ ) a σ s b s o t \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)模型 M M M沿着最有可能的状态输出 o 1 , o 2 , . . . o t o_1,o_2,...o_t o1,o2,...ot,并且在 t t t时刻到达 s s s。这个时候,每个时刻就只用考虑一个状态了。那最终的:
(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 ∈ W P ( 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 ∈ W P ( O ∣ W ) P ( W ) P ( O ) = arg ⁡ max ⁡ W ∈ W P ( 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 假定每个句子假设 W W W是一个由 w 1 , w 2 , . . . , w M w w_1,w_2,...,w_{M_w} w1,w2,...,wMw组成的序列,那么 word-level的分数为:
(9) W ^ = arg ⁡ max ⁡ W ∈ W ∑ S ∈ S W P ( O , S ∣ W ) P ( W ) = arg ⁡ max ⁡ W ∈ W ∑ S ∈ S W ∏ 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 ) \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 ( o t τ , s t τ ∣ w ) P(o_t^\tau,s_t^\tau|w) P(otτ,stτw)表示的是 w w w沿着状态 s t , . . . , s τ s_t,...,s_{\tau} st,...,sτ生成 o t , . . . , o τ o_t,...,o_{\tau} ot,...,oτ的似然度。 S w S_w Sw表示是的 W W W可能的状态序列。 t m t_m tm表示的是词 w m w_m wm的结束帧,由状态序列 S S S决定。此处, t 0 = 0 t_0=0 t0=0
\quad 使用Viterbi算法进行解码的时候,最优的词序列 W ^ \hat{W} W^是由最有可能的状态序列生成的。具体计算如下:
(10) W ^ = arg ⁡ max ⁡ W ∈ W max ⁡ S ∈ S W P ( O , S ∣ W ) P ( W ) = arg ⁡ max ⁡ W ∈ W max ⁡ S ∈ S W ∏ 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 ⁡ W ∈ W max ⁡ T ∈ T W ∏ 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 ) \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 突然冒出来的 T W \mathcal{T_W} TW表示的是可能的结束帧序列的集合。 T ∈ T W T\in{\mathcal{T}_W} TTW是一个时间帧序列,这个序列和句子里面的没歌词是对应的,表示为: t 1 , . . . , t M W t_1,...,t_{M_W} t1,...,tMW。所以对于一个词序列的 Viterbi score ,可以通过 word-level 的 Viterbi Score 和对应的语言概率来累乘得到。
\quad 为了更加有效地找到 W ^ \hat{W} W^,避免枚举所有可能的 W W W,单个词的 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 : Q P:\mathcal{Q} PQ x Q \mathcal{Q} Q —>[0, 1] 状态转移概率函数;
  7. π \pi π —> [0, 1] 初始状态概率函数

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

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

Step 1: Initialization
\qquad for each grammar states p ∈ Q p\in \mathcal{Q} pQ,
\qquad\quad for each HMM state s ∈ S p s\in\mathcal{S_p} sSp,
(12) α ~ ( 0 , p , s ) = { π p if  p ∈ I  and  s = i p max ⁡ q ∈ Q α ~ ( 0 , q , f q ) P ( p ∣ q ) if  p ∉ I  and  s = i p 0 otherwise \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
\qquad For time frames: t = 1 , 2 , . . . , T t=1,2,...,T t=1,2,...,T
\qquad\quad Intra-word transition:
\qquad\qquad for each grammar states p ∈ Q p\in \mathcal{Q} pQ,
\qquad\qquad\qquad for each HMM state s ∈ S p − { i p , f p } s\in\mathcal{S_p-\{i_p,f_p\}} sSp{ip,fp},
a ~ ( t , p , s ) = max ⁡ σ ∈ ( S p − { i p , f p } ) \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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值