学习笔记(LSA,CTC,RNN-T,)

本文详细介绍了LSA(Listen,Attend,andSpell)中的关键技术,包括语音信号处理的encoder实现、下采样策略、注意力机制(如Dot-product和AdditiveAttention)、以及CTC、RNN-T和NeuralTransducer等模型在语音识别中的应用。文章还讨论了如何通过BeamSearch和MoCHA解决解码过程中的挑战。
摘要由CSDN通过智能技术生成

LSA(Listen,Attend,and Spell)

Listen

下图中encoder将语言的噪音移除,只提取与语音识别相关的内容。

 encoder可以用RNN、CNN、self-attention Layers等方法来实现

 下采样

       为了减少计算量和处理复杂性,同时保留关键的语音特征采用下采样对输入进行处理。下采样是指降低信号的采样率,即减少每秒钟采集的样本数。如下图中左边使用了Pyramind RNN进行下采样,第二层数据为四个,第三层又将前一层相邻两个输入合并最终,四个输入被下采样为两个输入。右图使用Polling over time实现下采样,第三层是将前一层中相邻两个数据选择其中一个作为输出,最终四个数据也变为了两个数据。

       其余常见的还有TDNN和Trucated self-attention。其中TDNN,会只考虑其中几个向量从而节约了时间。Truncated Self-attention会给某一变量一个范围,该范围内所有数据都会考虑,范围外的忽略。

Attention

attention操作如下

下图中,经过encoder后的数据相当于一个资料库,关键字z需要与资料库进行match函数的运输得到a

其中match可以用Dot-product Attetion实现,如下图将输入变量h和z分别成W^{h}W^{z},得到两个新结果,将两个新结果做点积得到a,可以看到,点积主要作用就是计算z和h的相似度。

另一种attention方式为additivate attention,如下图如下图将输入变量h和z分别成W^{h}W^{z},得到两个新结果,将两个新结果相加后经过tanh函数得到w,w经过一个线性变换得到a。

以上是两种常用的计算attention的方式

attention的步骤如下图,input输入到encoder中会得到 h,h和z计算又得到a,对a进行softmax转换,使所有a加起来等于 1,将softmax得到的a和encoder得到的h进行相乘求和得到c。之后c会被当做decoder的input。

Spell

得到c后我们将进行LAS下面的步骤spell,c作为decoder 的输入,c根据hidden state最终得到Distribution。Distribution给每一个tokens一个几率,最后选择概率最大的作为输出,每个单词的字母是一个个输出的。

 当后面的字母要输出时会使用到前一个的输出,如下图。最终得到EOS表明decoder结束,前面所得到的的输出就是最终结果

 Beam Search

Beam Search更像决策树,每次分支都选择几率大的叫做Greedy Decoding,如下图中红色路径。但是Greedy Decoding最终不一定能找到几率最大的结果,如下图绿色路径才能找到最终输出最大 的结果。

 Beam Search可以解决上面的问题,Beam Search每次都会保留两个最好的路径。最开始只有A和B所有将两个都保留下来。之后根据始发位置得到的路径AA,AB,BA,BB选择分数 最好的两个路径进行保留,后面以此类推,最终选择最大的作为最终输出。

 之后就是训练,训练的最终结果就是系统要将输入的语音音频所对应的单词输出。在训练过程中假如每个音频都被标注好该音频所对应的单词,训练的目的就是要使Distribution出现该单词的概率越大越好。训练时不会将前一个的输出直接作为后一个的输入,而是直接输入当前单词前一个单词(单词已知)。

 将正确答案放在训练中叫做teacher forching,若将训练中前一个的输出作为后一个的输入,前期时因为模型还没训练起来,很容易出错,随着模型的不断训练最终可能会得到正确的输出,但是该正确的输出与前面错误的输出相反,可能会造成模型崩溃

 因此为了避免上述情况发生,需要将正确数值直接用在训练中

 attention放在decoder中有两种方法如下图,左图是将z经过attention得到c,得到的c又是下一个的输入。右图并没有将c保留到下一次输入,而是立即使用得到结果。

 对于attention来说,每次的attention都应该考虑过去的attention。

 CTC

ctc只需要encoder得到h,之后将h放到classifier中,去决定该h属于哪个tokens。ctc输入T个声音特征那么就要输出T个tokens。输出的tokens中包含一个\Phi(相当于null),当没有计算出结果时用\Phi表示,将重复的token进行合并,并将\Phi进行移除。 

CTC处理的规则如下图

 CTC的训练中给定的label比输出小,不能实现一一对应,因此需要自己制造合适的label,如下图,将“好棒”制造合适的label。

 那么面对上面这么多label序列,我们选哪个用于训练呢,CTC会使用全部序列进行训练。

对于CTC的classifiter,可以将其想成decoder。如下图当两个输出c中间加了一个\Phi时,按照CTC的规则会输出两个c,但是要求不能两个c相邻,因此CTC的效果可能没有那么好。

RNN-T

RNA

RNA像是RNN-T和CTC之间的过渡,如下图是RAN的运作流程。CTC对语音特征的计算是独立的。而RNA每次classifier都会考虑前一个输出。

 目前为止,我们可以发现CTC和RAN都是输入一个输入就会得到一个token。有时可能需要输入一个输入得到多个token的情况。例如"th"是一个音但是有两个字符。RNN-T可以解决这个问题。

下图是RNN-T的过程图,输入一个输入,便会一直输出,知道model觉得输出满意为止。

观察下面输出我们可以看到当输出为\Phi时RNN-T便会进行下一个输入。当输入有T个时,输出\Phi  就有T个。

 那么RNN-T的训练也有同样的问题,例如“好棒”这个训练词组,输入有4个那么代表\Phi有四个,我们需要将四个\Phi  插入到“好棒”中。我们可以像下图插入\Phi

 我们并不知道哪中插入\Phi的方法是正确的,RNN-T和CTC一样,都是穷举所有可能进行训练。

在RNN-T中会另外使用一个RNN来考虑每一个应该输出的token是什么。如下图,另外训练了个RNN,若前面有输出的token,就将token输出到RNN中。下图中,输入h^{t},RNN-T决定输出t,将t放进RNN中,输出的结果输入到下一个RNN-T中,对下一个token输出产生影响。当RNN-T输出\Phi代表将要考虑下一个输入了,那么会将前一个输出放在下一个输入中。

 Neural Transducer

上述的CTC,RNN-T每次只能输入一个,Neural Transducer可以一次输入多个h,Neural Transducer的运作方式如下图,将一些h进行输入,将几个相关输入用一个window框起来,对这个windows进行attention后得到输出,知道输出\Phi,考虑下一个windoes的输入。

 MoCHA

Neural Transducer中使用window将几个相邻的输入一起考虑,那么 MoCHA可以将windows进行动态的移动。一开始h_{1}进来,根据z来判断window要不要放在h_{1}处,之后以此类推。找到要放windows的输入,之后对windows进行attention, MoCHA中一个windows只会输出一个token,其他token会根据windows的滑动陆续输出 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值