状态 1 与状态 2 的转移概率 P(s2∣s1)P(s_2 \mid s_1)P(s2∣s1)
来源:从大量标注好的语音数据中统计
我们需要先准备一批 “语音 - 文本对齐” 的标注数据 —— 比如一段语音对应 “你好” 两个字,同时标注出每个音素(/n/ /i/ /h/ /a/)在语音中对应的时间区间。
统计步骤很简单:
- 把所有标注数据里的状态切换过程都列出来(比如从 /i/ 的中间状态 → /h/ 的开始状态、从 /h/ 的结束状态 → /a/ 的开始状态);
- 计算 “从状态 s1s_1s1 切换到 s2s_2s2 的次数” ÷ “所有从 s1s_1s1 出发的切换总次数”;
- 这个比值就是 转移概率 P(s2∣s1)P(s_2 \mid s_1)P(s2∣s1)。
状态state 与 语音特征observation
- 隐藏状态 state : “语音的一个声学状态”(比如对应音素 /a/ 的某个发音状态)。每个状态都有自己的 “特性”—— 比如 /a/ 的状态对应 “低频共振峰强、时长约 20ms” 的发音规律。
- 观测特征 observation:“从语音信号中提取的一帧特征”(比如 MFCC 特征,包含了频率、能量等信息)。
状态先验概率 P(state)P(\text{state})P(state)
- 在没有任何观测数据(语音特征) 的情况下,HMM 处于某个状态 s 的概率。它是基于训练数据统计得到的先验知识,和当前输入的语音无关。
- 先验概率 P(s)P(s)P(s) 的统计对象就是三音子状态
- 状态 s 就是三音子状态,而非单音素
具体例子
- cat 的三音子状态有 3 个:
- s1=(∅,/k/,/æ/)s_1 = (\emptyset, /k/, /æ/)s1=(∅,/k/,/æ/)
- s2=(/k/,/æ/,/t/)s_2 = (/k/, /æ/, /t/)s2=(/k/,/æ/,/t/)
- s3=(/æ/,/t/,∅)s_3 = (/æ/, /t/, \emptyset)s3=(/æ/,/t/,∅)
统计每个三音子状态在所有标注数据中出现的总次数,用单个状态的频次 ÷ 总频次,得到先验概率。
状态后验概率 P(state∣observation)P(\text{state}|\text{observation})P(state∣observation)
- DNN 训练完直接告诉你 “现在有了语音特征o,处于状态s的概率有多大” → 这就是 后验概率P(s∣o)P(s|o)P(s∣o)
- 是由果推因的概率(o 是 “果”,s 是 “因”)
- 输入一段语音特征 o 后,DNN 直接输出所有可能状态 s 的 P(s∣o)P(s \mid o)P(s∣o)
状态似然概率P(observation∣state)P(\text{observation}|\text{state})P(observation∣state)
-
HMM 解码时,想知道 “如果现在处于状态s,能生成语音特征o的概率有多大” → 这就是 似然概率P(o∣s)P(o|s)P(o∣s)。
-
即如果 HMM 现在处于音素 /a/ 的状态 → 生成当前这帧 MFCC 特征的概率有多大?
- 如果这帧特征的低频共振峰很强,和 /a/ 的发音规律匹配 → P(o∣s)P(o\mid s)P(o∣s)就大;
- 如果这帧特征的高频成分多,更像 /s/ 的发音规律 → P(o∣s)P(o\mid s)P(o∣s) 就小。
-
P(o∣s)P(o \mid s)P(o∣s) 描述 “状态 s 产生特征 o 的可能性
观测边缘概率 P(observation)P(\text{observation})P(observation)
语音观测特征 o 本身出现的概率
后验概率→伪似然值,替代 HMM 发射概率
HMM 的解码过程依赖状态发射概率 P(observation∣state)P(\text{observation}|\text{state})P(observation∣state)(给定状态下生成该观测的概率),但 DNN 输出的是后验概率 P(state∣observation)P(\text{state}|\text{observation})P(state∣observation)。
根据贝叶斯公式:
P(state∣observation)=P(observation∣state)⋅P(state)P(observation)P(\text{state}|\text{observation})=\frac{P(\text{observation}|\text{state})\cdot P(\text{state})}{P(\text{observation})}P(state∣observation)=P(observation)P(observation∣state)⋅P(state)
变形可得:
P(observation∣state)=P(state∣observation)⋅P(observation)P(state)P(\text{observation}|\text{state})=\frac{P(\text{state}|\text{observation})\cdot P(\text{observation})}{P(\text{state})}P(observation∣state)=P(state)P(state∣observation)⋅P(observation)
其中 P(observation)P(\text{observation})P(observation)是观测的边缘概率,对所有状态都是相同的常数,在解码时可忽略。因此:
P^(observation∣state)∝P(state∣observation)P(state)\hat{P}(\text{observation}|\text{state}) \propto \frac{P(\text{state}|\text{observation})}{P(\text{state})}P^(observation∣state)∝P(state)P(state∣observation)
这个与发射概率成正比的值,就是伪似然值。
伪似然值不是真实的似然概率,但它和真实的 P(o∣s)P(o\mid s)P(o∣s) 是正相关的。
伪似然值完美适配 HMM 的解码逻辑,让 DNN 的输出能直接融入 HMM 的状态转移与概率计算,实现 “DNN 特征建模 + HMM 时序建模” 的高效结合。
一句话总结整个换算的目的
DNN 擅长直接学后验概率 P(s∣o)P(s\mid o)P(s∣o),但 HMM 解码需要似然概率 P(o∣s)P(o\mid s)P(o∣s);通过除以先验概率 P(s)P(s)P(s) 得到伪似然值,既绕过了计算复杂的 P(o)P(o)P(o),又完美适配了 HMM 的解码逻辑。
举个例子
假设语音观测特征 o 对应两个可能的 HMM 状态 s1s_1s1(音素 /a/)和 s2s_2s2(音素 /b/):
- DNN 输出后验概率:P(s1∣o)=0.8P(s_1\mid o)=0.8P(s1∣o)=0.8,P(s2∣o)=0.2P(s_2\mid o)=0.2P(s2∣o)=0.2
- 统计得到先验概率:P(s1)=0.3,P(s_1)=0.3,P(s1)=0.3,P(s_2)=0.7$
- 计算伪似然值:
- P^(o∣s1)∝0.8/0.3≈2.67\hat{P}(o\mid s_1) \propto 0.8/0.3 ≈ 2.67P^(o∣s1)∝0.8/0.3≈2.67
- P^(o∣s2)∝0.2/0.7≈0.29\hat{P}(o\mid s_2) \propto 0.2/0.7 ≈ 0.29P^(o∣s2)∝0.2/0.7≈0.29
HMM 解码时会认为:状态 s1s_1s1 生成观测 o 的概率远高于 s2s_2s2,因此更可能是音素 /a/ —— 这个结论和用真实似然概率计算的结果完全一致。
1万+

被折叠的 条评论
为什么被折叠?



