【笔记】DLHLP - 李宏毅 - 4 - 语音识别 - Part 3 CTC, RNN-T and more

Connectionist Temporal Classification (CTC)

CTC可以用于线上实时地语音识别,编码器用的是单向的RNN,解码是用MLP来预测文字分布。
编码器将语音输入\(x^i\)编码成\(h^i\),MLP再对它乘上一个权重,接上Softmax,得到词表V大小的概率分布。
但有时候当前的语音输入可能并不能对应实际的文本token,所以预测要额外多一个为空的类别,表示模型不知道要输出什么。

CTC中没有使用下采样,所以输入和输出的序列长度都是T。
模型预测完后要进行后处理,一是把重复的token合并,二是把空类别去掉,得到最终的预测序列。

CTC的这种预测方式,会让它的数据标注变得很难,因为要确保刚好每个输入声音特征都对应一个正确的token。而标注语料的不足,会直接影响模型评测的表现。
此外,一个序列正确的标注方式又可以存着很多种,造成标注多标准问题。这也加大标注数据选择的困难。

由此采用的方法是穷举所有的可能的标注去训练。在数据集充足的情况下,CTC的效果还是不错的。

CTC模型的问题主要在,每个MLP的解码器工作是独立的。它可能会遇到一个奇怪的问题。
比如语音数据部分前三帧都在发音c,第一个隐层\(h^i\)解码出是c后,后面两个隐层就无须再解码出c了。
但由于它们是独立工作的,后面的解码部分不知道前面解码的是什么,所以第二个可能解码成空或c,第三个也可能解码成空或c。
但如果编码器是足够深的RNN,它也可能在编码过程中考虑这种前后关系的依赖,让第一个输出隐层包含更多关于c的信息,而后面两个隐层包含更多关于空类别的信息。

Recurrent Neural Aligner (RNA) and RNN Tansducer (RNN-T)

RNA:RNA是一个介于CTC和RNN-T的过渡模型,针对CTC独立解码问题,把MLP换成了RNN。

RNN-T:可以输出多个token。比如要输出th,CTC只能先输出t,然后在下一个时间点解码输出h,而RNN可以输入一个隐层,预测多个tokens。
不过,RNN-T与CTC一样会遇到训练数据难标注,标注多标准的问题。对此也是穷举所有可能的标注给模型训练。

RNN-T在解码过程中是如何确保输入一个隐层,输出多个token的呢?
输入一个\(h^t\),RNN-T会决定要产生一个"t"。这个"t"会被放到另一个RNN单元中,输出的隐层会放回RNN-T的解码器中作为隐层和之前的\(h^t\)输入,来产生新的输出"h"。
再反复一次,由于那一个RNN单元看到过"h"了,就会输出新的东西。这个新东西再与之前的\(h^t\)输入RNN-T,可能会得到一个空类别。
而后一个RNN单元会无视掉这个空类别,把之前输出的"h",与下一个隐层\(h^{t+1}\)输入到RNN-T得到的新输出"e"。

这里的另一个RNN实际上扮演的角色是一个语言模型LM。它只看token输出。我们可以用大量的文本语料去训练这个RNN,再和编码器一起去做训练。
这样一来,我们就能确保接上语言模型之后的RNN-T的输出不会有空类别,这样对训练数据的标注就会容易许多。

Neural Transducer

CTC,RNA和RNN-T都是每次只读一个声学特征,这样效率很低。
Neural Transducer做了一个改变,用注意力机制来允许模型一次能读很多个声学特征。

首先我们会让声学特征通过编码器产生隐层输出,再对一个窗口的小范围隐层做注意力后,再输出给解码的RNN。
若窗口大小内信息已经用完了,解码的RNN就会输出空类别。接下来我们再移动窗口,对下一个窗口内的隐层重复刚才的操作。

窗口大小要如何设计呢?
Neural Transducer做了实验发现,没有注意力时,窗口一长,结果就会烂掉。但用了注意力后,窗口大小又没那么重要。
它尝试了各种计算注意力的方法,有DOT-Attention和MLP-Attention,甚至还有LSTM-Attention(它把注意力权重读进LSTM中去,通过LSTM来考虑前一个时间步的注意力的位置)。

Monotonic Chunkwise Attention (MoChA)

MoChA能动态地调整移动窗口的距离。它用的是一个类似注意力机制的模块来做这个调整的操作。这个模块输入\(z^0\)和隐层\(h^1\),输出yes/no,表示要不要把窗口开头放在此处位置。
如果不要,就往右移动窗口,再检查下一个位置的隐层\(h^2\)。一旦确定放置窗口,就对窗口内的隐层向量做注意力,解码出的token不会包含空类别。

各模型的总结对比

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值