图 1 alpha矩阵大小
横坐标是声学特征,x1-x6一共有6帧语音,每一帧语音输出是一个v大小概率分布,v是token词典大小,现在假设token单位是字符,并且字典大小是三个字符,[%,c,a,t],所以v的大小是4。
前向概率计算参数包括两点:
- 1.所有声学特征输出概率分布矩阵y
- 2 已插入空白符的label序列, 大小为L
y 每列分别是 blank c a t 对应概率
array([[0.17914049, 0.27980623, 0.26827714, 0.27277615],
[0.23065626, 0.22605778, 0.26611104, 0.27717492],
[0.1742262 , 0.26031537, 0.27538571, 0.29007271],
[0.1955796 , 0.19450504, 0.28984316, 0.32007221],
[0.20306928, 0.2225706 , 0.27792999, 0.29643014],
[0.15339513, 0.24912987, 0.27953229, 0.3179427 ]])
label
labels = [0, 1, 0, 2, 0, 3, 0] # 0 for blank id, 1 for 'c' id, 2 for 'a' id, 3 for 't' id
前向概率需要计算一个alpha矩阵, 大小刚好为图1所示大小的转置,
初始化大小为T*L为0矩阵 alpha = np.zeros([T, L])
下面还原前向概率计算方式
- T1时刻,第一帧语音输出对齐的token有两种可能,也就是label前两个token, 可能是空(blank)或者c, 所以
alpha[0,0]= y[0, label[0]], # 空blank
alpha[0,1] = y[0, label[1]] # c 字符
对应代码为
alpha[0, 0] = y[0, labels[0]] #空的概率
alpha[0, 1] = y[0, labels[1]] #c的概率
alpha值
array([[0.17914049, 0.27980623, 0. , 0. , 0. ,
0. , 0. ],
[0. , 0