语音识别的Token pass algorithm

Viterbi 算法是一种动态规划程序,用于获得给定模型 λ 和长度为 T 的观察序列 O 的最可能路径。
定义以状态 j 结束的长度为 t 的部分路径的可能性
在这里插入图片描述
然后,部分路径的似然可以表示为前面状态 x (t − 1) 的似然
在这里插入图片描述
Viterbi算法主要是用来确定最可能的状态序列。如果使用连续语音的复合模型,Viterbi 算法会隐含地产生最佳单词序列。如果不需要状态序列,为了恢复词模型,只需要记录从每个模型的最终状态进行外部转换的点。Viterbi算法允许time-synchronous时间同步操作。维特比算法的有效实现是token-passing。
为了保留最佳状态序列指针,必须存储指向最佳前驱的指针。这称为回溯信息 back-trace information ,恢复最佳状态序列的过程称为回溯 back-trace。对于解码,如果从不需要完整的状态对齐,则没有必要为每个状态存储回溯信息。相反,记录的只是当前模型的开始时间。
复合 HMM 的每个状态都持有一个标记。token q 有两个组成部分。token通过 HMM 传播
qj .prob 是对数似然值: φj (t)
qj.wlink 指向完整单词历史、所有前面的单词及其开始时间的指针。

算法

算法的伪代码

初始设置:
在每个模型的状态 1 中存储带有 q.prob = 0 的token
在所有其他状态下使用 q.prob = −∞(即 log 0)存储token

在循环中:

for (each frame: t = 1; t ≤ T ; t++ ){
	for (each model: m = 1; m ≤ M ; m++ ){
		for (each model state: j = 2; j < N ; j++ ){
			wordinternal_token_propagation
		}
		best_exit_token
	}
	exit_token_propagation
}

wordinternal_token_propagation
 - 在模型 m 中找到前一个状态 i
让qi .prob + log (aij ) 值最大
 - 将该token复制到状态 j
 - qj .prob += log (aij ) + log (bj (ot ))
best_exit_token
- 在模型 m 中找到前任状态 i
让qi .prob + log (aiN ) 值最大
- 将该token复制到状态 N
- qi .prob += log (aiN)

token的传播必须同时进行。算法完成后,持有状态 N 中token的模型可以以最高的可能性识去别未知语音。状态 1 和 N 的处理方式不同,因为它们是non-emitting状态,但允许将一组模型连接在一起

为了搜索最好的token、退出token传播和存储trace-back的信息,会用到exit_token_propagation

exit_token_propagation
- 找到模型 m,m在最终状态 N 中以最高概率持有token q。
- 创建一个单词链接记录WLR(会返回该token q 的副本,当前时间,关联单词的ID m)
- 然后更新token:
 q.start = t+1
 q.prob = q.prob + P
- 将 q 复制到所有模型的状态 1

这里的P是一个恒定的模型间对数转换概率(含惩罚),可以独立调整以控制错误率。

对于连续的语音

Token pass 方法的实用性在于可以自然地扩展到连续模型案例,因此算法可以扩展为

  • 在所有模型的最终状态中确定最好的那个token
  • 允许最好的token围绕循环传播到所有连接模型的状态 1
  • 存储生成该token的模型及其history

traceback 所需的信息会用链接列表中 word link records(WLR) 的形式存储
WLR w .q 是一个存在于最终节点中 q 的副本
w .time 当前时间
w .word 关联的词

上面的过程会在每个时间 t 生成一个新的 WLR。完整的 WLR 集用来表示识别中的traceback 信息。下图简单显示了带有关联词和词结束时间的 WLR 记录。
在这里插入图片描述
“*”表示句子的开头,红色箭头表示回溯信息。每当必须在单词之间做出决定时,都会创建每个 WLR(在连接的数字识别器的情况下,这是结束节点),绿色箭头显示了处理最后一帧语音数据后最有可能的词。这里识别出的句子是“SEVEN FOUR OH”

算法的计算成本

对于 W 个单词,N states/word(平均),对于每个时间帧(通常为 10ms)需要执行:
W × N 内部 token 传播W次外部 token 传播
每个内部传播都涉及:
输出概率计算每个状态 2 或 3 次添加和比较步骤

通常来说内部传播的执行时间由状态输出概率计算决定。例如,如果总共有 K 个输出分布,每个分布有 M 个高斯分布,向量大小为 V,则每帧需要 K × M × V × 2 次乘法/加法。对于复杂度相对较低的系统(K = 2000,M = 10,V = 39),这意味着每 10 毫秒帧大约有 150 万次乘法/加法运算,所以其实建模技术还是挺影响的(这段是老师说的我没懂)

结论是:声学建模会影响识别网络的构建,从而影响搜索空间。
而单音素是一种简单的声学模型,允许从音素模型构建单词模型。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值