前提:将波形图转换成频率相关的频谱图,一般用一个长度为25ms的窗口从头开始,截取25ms的语音信息,称为第一帧,然后向后滑动10ms,再截取第二帧,依次类推,1秒的语音就被截成100帧,
接下来对每一帧的波形信号进行FFT(傅里叶)变成频谱图,
x轴为频率,y轴为强度,用不同颜色表示强度,全部叠加到一起可以得到对应的语谱图,颜色表示这些频率信号的强度。
根据人类发声和听觉的特性,还要对原始的频谱进行三角滤波、取对数,再经过DCT变换(该过程被称为MFCC特征提取),结果得到一个39维的特征向量。
一、LAS模型(Listen, Attend and Spell)
LAS模型是一种用于自动语音识别(ASR)任务的神经网络模型。ASR是一项技术,可以将语音信号转换为相应的文本表示。
LAS模型基于序列到序列(sequence-to-sequence)的架构,它首先使用注意力机制(Attention Mechanism)来对语音特征进行建模和对齐,然后通过一个解码器来生成相应的文字序列。
LAS模型在语音识别中被广泛应用,它能够分离出语音中的不同音素、发音和单词,并将其转化为文本。
1,listen(编译器)
表示了对输入音频进行特征提取的过程,取出杂音和噪音。它通常使用一种称为声学特征提取的技术来将音频转化为机器可以理解的表示。
编码器(Encoder)负责将输入的音频特征进行编码,并将其转化为一个高维的表示。这个编码器在声学特征序列上进行处理,以便为后续的解码过程提供更丰富和有信息的输入。
编码器的作用是对输入的音频特征序列进行建模,以捕捉其中的上下文和语义信息。它通常是一个循环神经网络(Recurrent Neural Network,RNN)或者卷积神经网络(Convolutional Neural Network,CNN)。这些神经网络通过逐帧处理输入的音频特征,将每个特征与前面的上下文信息进行整合,从而得到一个音频特征序列的高维表示。这个编码器的输出会传递给后续的注意力机制和解码器进行进一步处理。
编辑器可以用CNN和RNN,也可以是CNN+RNN,也可以用self-attention layers。
2,listen-down samping(下采样)
降低音频数据的采样率,以减少计算复杂度并提高模型的效率。
-
减小计算复杂度:下采样可以降低音频数据的采样率,从而减少模型的计算复杂度。较低的采样率意味着每秒钟会有更少的音频样本需要处理,减少了模型输入的数据量和计算工作量。
-
提高模型效率:较低的采样率可以加速模型的训练和推理过程。更快的处理速度可以使模型在实时语音识别等任务中更具可行性。
-
降低噪声和冗余:下采样可通过去除高频信号来降低噪声对模型的影响。高频信号通常包含噪声和冗余信息,对ASR的准确性有较小的贡献。因此,通过下采样可以提高模型对于语音信号的关注度。
因为一段声音讯号太长了,而且相邻向量间,带有重复的信息。(输入和输出成倍数关系)为了节省计算量,,我们可以用:
-
Pyramid RNN: 在每一层的RNN输出后,都做一个聚合操作。把两个向量加起来,变成一个向量。
-
Pooling Over time: 两个time step的向量,只选其中一个,输入到下一层。
-
Time-delay DNN: 是CNN常用的一个变形。通常CNN是计算一个窗口内每个元素的加权之和,而TDDNN则只计算第一个和最后一个元素。
-
Truncated self-attention: 是自注意力的一个变形。通常自注意力会对一个序列中每个元素都去注意,而Truncated的做法是只让当前元素去注意一个窗口内的元素。
3,attention(注意力机制)
根据当前解码器的状态,对输入的音频特征进行加权汇聚,以便在解码过程中更加关注与当前输出相关的音频信息。
注意力机制的使用可以提高模型的性能,特别是当输入序列很长或者包含重要信息分布在不同位置时。它允许解码器在每个时间步骤上动态地选择和集中注意力在输入序列的不同部分上。
步骤:
-
编码器产生的音频特征序列(h1)作为输入,同时传入注意力机制和解码器(z0)。
-
当前解码器的隐藏状态与编码器的音频特征进行比较,计算其相关性得分。这可以通过计算注意力权重来实现。
-
注意力权重表示解码器当前输出与编码器特征之间的关联程度。通常使用softmax函数对得分进行归一化,以确保权重和为1。
-
将注意力权重与音频特征相乘,得到加权的上下文信息表示(c0)。这相当于对音频特征进行加权平均,其中权重由注意力机制决定。
-
将加权的上下文信息与解码器的当前隐藏状态进行拼接,并输入解码器中生成下一个输出的计算。
-
上述步骤在每个时间步骤上迭代进行,以生成最终的解码结果。
4,Spell(解码)
这个归一化的分布向量(c0)和之前的(z0)会作为解码器RNN的输入,输出是隐层(z1),和一个对词表V中所有可能词预测的概率分布向量。我们取max就可以解码得到最可能的第一个token。 再拿(z1)与原编码器的隐层向量做注意力,得到一个新的注意力分布(c1)。它与(z^1)一同输入给RNN,同样的方式就能解码得到第二个token。