Alignment in HMM,CTC,RNN-T
李宏毅老师2020新课深度学习与人类语言处理课程主页:
http://speech.ee.ntu.edu.tw/~tlkagk/courses_DLHLP20.html
视频链接地址:
https://www.bilibili.com/video/BV1RE411g7rQ
课件ppt已上传至资源,可免费下载使用
前言
上两篇,我们都明晰了HMM、CTC、RNN-T的模型细节,但都遇到了同样的问题,那就是Encoder生成的hidden state(或HMM的state)与token间的长度不等,导致的alignment的问题。
在此,我们提出了4个问题:
- 问题1:怎么穷举所有可能的alignments?
- 问题2:怎么把所有的alignments加起来?
- 问题3:怎么做训练?HMM用的是GMM我们不管它。而CTC,RNN-T用的是gradient descent,我们该怎么计算将这些alignment加起来的偏微分?
- 问题4:怎么做Decoding呢?怎么最优化这个P(Y|X)呢?
I End-to-end model Review
让我们再回到今日这些End-to-end技术,其实今日这些端到端技术,都可以说在计算P(Y|X),(参见下图LAS),也就是说给定一些acoustic feature:x1 x2 x3 x4 ,生成 token sequence:a b 的概率。对于LAS、CTC、RNN-T我们不需要像HMM去构造state,取而代之直接使用我们讲过的token(详细请参见课程P3,Grapheme Phoneme Morpheme Word Bytes)。
1 LAS (Listen,Attend,and Spell)
我们在做语音辨识的时候,这些端到端系统,以LAS为例,我们都是在找一个Y使得P(Y|X)的几率最大。LAS可以想成是可以直接计算P(Y|X),参见上图,LAS的decoder部分,输入context vector c0,输出一个token的distribution,具体而言,目标Y是 a b,则计算第一个timestamp产生a 的几率p(a),再假设a已经被产生出来了,第二个distribution产生b的几率,接下来,假设a b都已经产生出来了,第三个distribution里面产生EOS的几率,把这些概率都乘起来就是我们要的P(Y|X)。即
P
(
Y
∣
X
)
=
p
(
a
∣
X
)
p
(
b
∣
a
,
X
)
p
(
E
O
S
∣
a
,
b
,
X
)
P(Y|X) = p(a|X) p(b|a,X) p(EOS|a,b,X)
P(Y∣X)=p(a∣X)p(b∣a,X)p(EOS∣a,b,X)
而在真正训练的时候,我们没有办法每一步都得到最优解,也因此我们使用beam search方法在每一步distribution中都保留Beam size个几率最大的路径,而我们在训练的时候就是在训练参数𝜃 ,使得给定X生成
Y
^
\hat{Y}
Y^与真正的Y的CrossEntropy越小越好,也就是P(Y|X)的几率越大越好。
2 CTC & RNN-T
同样,对于CTC和RNN-T来说,计算的目标是一样的,(具体的计算方法请参见P5),也有同样关键的问题,那就是alignment的问题。
具体而言,
同样对于给定acoustic feature:x1 x2 x3 x4 经过Encoder产生 h1 h2 h3 h4,要想通过h得到a b,我们就需要使用𝜙或重复a或b来构造alignment使得长度一样。如,h1->a,h2->𝜙,h3->b,h4->𝜙 alignment的正确方式有许多,只有这样我们才能计算P(Y|X),也因此我们将穷举所有可能的alignment的概率然后求和相加。
3 alignment problems in HMM,CTC,RNN-T
- 问题1:怎么穷举所有可能的alignments?
- 问题2:怎么把所有的alignments加起来?
- 问题3:怎么做训练?HMM用的是GMM我们不管它。而CTC,RNN-T用的是gradient descent,我们该怎么计算将这些alignment加起来的偏微分?
- 问题4:怎么做Decoding呢?怎么最优化这个P(Y|X)呢?
Q1 对于上述三种模型,怎么穷举所有正确的alignments
当然对于LAS没有这样的问题,但对于HMM、CTC、RNN-T这三者所需要做的alignments有相似的地方也有一些不同,在上图的例子里面,对于三个模型我们都假设acoustic feature由6个vector(T=6)组成,token sequence由3个token (N=3)c a t 组成,当然对于HMM来说我们要用state来当作真正的token,为了统一与便于理解,这里我们假设这里的token (c a t) 是形式化的state。
具体而言,
我们怎么把这 3个token 与 6个vector匹配到一起呢?
- HMM:它会把 state 重复 到等长
- CTC:它有两种方法,1 重复 2 加 𝜙 直到等长(最后转成语音信号时,会去重,再去掉𝜙)
- RNN-T:它会加 T 个 𝜙(在训练的时候,声音讯号经过encoder得到hidden state h后,每次decoder输出一个𝜙的时候,模型就会处理下一个h,故输入T个h,会依次输出T个𝜙,注意这里要反向想,我们是根据声音讯号来生成token的,和上图的alignment正好相反,还没懂请参照该系列P5的Model3 : RNN-T的 II )
(1)HMM的alignment穷举 :重复
横轴:acoustic features 纵轴:token
对于HMM,所有的alignment集合起来可以画在上图的表格中,HMM就是把c a t进行重复,让它长度变成T,参照上图,伪代码如下(真正代码大家想出来可以在留言区评论回答,我会更新到上面,简略为输入c a t ,输出长度为6且去重化简后结果仍为cat的alignment)。
For n=1 to N=3
output t_n 次 token_n
# 限制:t_1 + t_2 + ... + t_N = T = 6, t_n > 0
注:t_n > 0 代表每个token必须出现至少一次
我们会把c重复t_1次,把a重复t_2次,把t重复t_3次,且t_1 + t_2 + t_3 = 6 && t_n > 0,注意是大于0不是大于等于,也就是说每一个token都要至少出现一次。
而以上这些操作可以画在上图的表格里面,我们从起始点:红点出发,最终要走到终点:蓝点位置。在起始点,第一步一定要走↘(代表产生c),接下来每一步都有两个选择:
→走代表重复当前token,↘走代表产生下一个token。
而这条路径就是一个合法的alignment。
(2)CTC的alignment穷举 : 重复 或 加 𝜙 直到等长
横轴:acoustic features 间插入𝜙 纵轴:token
对于CTC,所有的alignment集合起来同样可以画在上图的表格中,但不同的是,CTC有两种选择:
(1)重复 或 (2)加 𝜙 ,直到等长,伪代码如下。
output 𝜙 c0次
For n=1 to N
output t_n次 token_n
output c_n次 𝜙
# 限制:t_1+t_2+t_3 + c_0 + c_1 + c_2 +... + c_N = T; t_n >0; c_n >=0
注:t_n > 0 代表每个token必须出现至少一次,c_n>=0代表每次可产生也可不产生𝜙
参照上图,我们从起始点:红点出发,最终可以走到终点:蓝点(无论哪一个)。在起始点,我们有两种选择↘或↘+↓,在𝜙点有→或↘,在token点有→、↘或↘+↓
对起始点:↘代表插入𝜙 ,↘+↓代表产生下一个token
对𝜙点:→代表重复𝜙 ,↘代表产生下一个token
对token点:→代表重复本次token,↘代表插入𝜙 ,↘+↓代表产生下一个token
同样这样的一条路径就是一个合法的alignment
但CTC注意的是,有特殊用例,token有连续两个一样的,如 s e e,则在第一个e的时候,就不能走↘+↓产生下一个token,因为如果直接这样生成,后处理后ee -> e 两个e就变成一个e了。故连续相同的token间必须生成𝜙来间隔区分。
(3)RNN-T的alignment穷举:加 T个𝜙
横轴:acoustic features 纵轴:token
对于RNN-T,所有的alignment集合起来同样可以画在上图的表格中,RNN-T要选择在哪里生成 𝜙,且生成𝜙的个数必须和encoder产生的h数目相等,为T,伪代码如下。
output 𝜙 c0次
For n=1 to N
output 1次 token_n
output c_n次 𝜙
# 限制:c_0+c_1+c_2+.. + c_N = T; c_N>0; c_n >=0 (for n=1 to N-1)
注:= T 代表生成𝜙的个数与h相等,
c_N>0代表对于最后一个token必须至少生成一个𝜙,
c_n>=0代表在第n(n<N)个token时可以生成𝜙也可以不生成𝜙
1 次 token_n 指 RNN-T不可重复token
参照上图,我们从起始点:左上蓝点出发,最终可以走到终点:右下点。在除了最后的token点,我们有两种选择→或↓,在最后的token点只有→
对非最后的token点:→代表插入𝜙 ,↓代表产生下一个token
对最后的token点:→代表插入𝜙
为什么对于最后的token点必须要有 插入𝜙 这一种选择呢,因为对每一个token点,模型是要输出一个𝜙 代表要处理下一个token了,故最后一个token是一定至少有一个𝜙的。
HMM、CTC、RNN-T
简略版可参见下图,如有问题请重新参看上面各模型的alignment,或留言提问。
剩下的问题会在下一篇中写到,所有的系列笔记都是完全匹配视频的分批版本的。