前向算法
假设 l 为原始的标注序列,现针对 l 进行如下修改:
每两个字母之间(此处不用考虑是否为重复字母)也插入一个blank
将修改后的序列标记为 l′ ,显然 l′ 的长度为 2∣l∣+1 ;反过来, ∣l∣=2∣l′∣ ,且 l 与 l′ 是一对一的关系,例如 l=Mary 则 l′=_M_a_r_y_ 。
CTC针对 l′ 的前缀计算路径的概率,既允许blank和非blank之间的转换,也允许相邻的不同之母之间的变化。对于一个标注序列 l ,我们定义前向变量 αt(s) 为满足以下条件的所有路径 π1:t 的概率之和:
B(π1:t)=l1:s/2 且 πt=ls′
根据前面的定义可知, l′ 的奇数位均为blank,偶数位均为 l 中对应字母 ls/2 ,注意这里 s 从 1 开始。比如, l=Mary 时, l′=_M_a_r_y ,那么 l1:3′=_M_ , l1:3/2=M ; l1:4′=_M_a , l1:4/2=Ma 。
后向算法