淘先锋技术网

首页 1 2 3 4 5 6 7

CTC: Connectionist Temporal Classification [Graves et al., ICML'06]

首先为了实现online的效果,CTC的encoder RNN 是单向的。

CTC的特点是它的token space引入了一个新的值 \phi (null)。原因是每一帧的声学特征往往所占的时间非常短,甚至远小于一个phoneme的长度,因此根据它输出的东西往往不能代表什么。\phi 就是用来代表那些无法单独识别的feature。 

具体地,和一般的seq2seq模型一样,encoder将声学特征转换为高阶的序列h,然后做一个transform和softmax后就输出一个token distribution。

CTC(x) = softmax(W\cdot Encoder(x))

这里的token space里还会包含之前定义的\phi

此时我们得到的输出序列的长度就等于输入序列的长度(T),要得到想要的识别结果,就得将重复的token合并,然后去除掉\phi。例如: 输出序列\phi\phid d \phi\phie \phie e\phi \phip p 就代表 deep。

接下来就是模型训练的问题:

由于我们对每一个声学特征都有对应的输出值并且引入了null值的概念,我们在训练的时候并不知道某个训练utterance文本确切的形式。例如: deep可以是 \phi\phid d \phi\phie \phie e\phi \phip p得到的,但也可以是 \phi d \phie \phi e\phip p得到的。这里解决的办法就是将所有可能的对齐方式(deep 和 T长度输出序列在token space上的对齐)都用到训练中来。其类似HMM模型中的前向后向算法(会在之后的笔记解释)。

 该模型显然有一个问题,前后timestep的输入输出是互相独立的,因此会有比较大的error rate

 RNN-T:RNN-Transducer

RNA(Recurrent Neural Aligner)

在介绍RNN-T之前,先理解RNA。对应CTC的前后文独立问题,RNA考虑到了前后的关联性。具体做法非常简单,将CTC的linear classifier层换成RNN结构就可以了。

 RNN-Transducer

在RNA一对一的基础上,我们会考虑有时输入的声学特征是否会对应多个token输出(比如“th”)。具体做法如下图,对一个声学特征会不停的copy本身输入到模型中,然后不停输出对应的token。直到模型认为这个声学特征对应的token都得到了,此时就输出null,相当于使用下一个声学特征。因此这里其实一定会输出T个null。

接下来RNN-T训练的过程结构又会有所不同。可以看到这里又引入了新的一个RNN网络,它只将除null以外的token作为输入,用以影响下一个timestep的RNN decode。这里一种理解可以把这个新增的RNN当作一个训练好的LM(因为都是有意义的token输入)。但更本质的理解是这样,因为RNN-T和CTC一样需要考虑所有的对齐方式做训练,这个网络就是为了这一点而存在的。(会在之后笔记解释) 

cover source: 语音识别ASR - HTK(HResults)计算字错率WER、句错率SER - debugger.wiki - debugger.wiki

ref: DLHLP 2020 Spring