赞
踩
使用单个序列到序列模型,直接将输入声学特征序列映射到文本。
输入特征
目前,端到端语音识别系统常用的输入特征是滤波器组频谱(filterbank,简称 fbank)。fbank 特征的处理过程包括以下几个步骤:
通常,一个 fbank 向量对应10毫秒的语音信号,因此一段十秒的语音可以生成大约1000个 fbank 向量来描述该语音。除了 fbank,梅尔频率倒谱系数(MFCC)以及原始波形(raw waveform)也在一些研究论文中被用作输入特征。然而,目前主流的方法仍然以 fbank 作为主要输入特征。
输出特征
端到端语音识别系统的输出可以是多种形式,包括:
该模型广泛应用于机器翻译和语音识别等任务。其主要优点在于输入和输出序列不需要等长,并且两者的长度都是可变的。
该模型采用了序列到序列(Sequence-to-Sequence,简称 seq2seq)结构,包含两个循环神经网络(RNN),分别用于编码和解码:
在传统的 seq2seq 模型中,编码器和解码器之间的信息传递依赖于编码器最后一个时刻的隐状态。这个隐状态被用作解码器的初始状态,从而指导生成输出序列。然而,这种方法存在明显的瓶颈:
为了缓解上述瓶颈问题,可以引入注意力机制(Attention)。注意力机制的核心思想是让解码器在生成每个输出时刻,可以动态地“关注”输入序列的不同部分,而不是仅仅依赖编码器的最后一个隐状态。具体而言:
通过注意力机制,seq2seq 模型能够更有效地处理长序列输入,使得输出的每一步可以只关注部分输入,提高翻译和识别的准确性和鲁棒性。
自注意力机制(Self-Attention)是一种在深度学习中广泛应用的技术,特别是在处理序列数据(如自然语言处理、语音识别等)方面。它的核心思想是让序列中的每个元素都能够关注序列中所有其他元素,从而捕捉到全局信息。下面是对自注意力机制的详细介绍:
自注意力机制的目的是为序列中的每个元素分配一个上下文向量,该向量是序列中所有其他元素的加权求和。具体步骤如下:
图片注释:K 和 V 一般是同一个向量或矩阵 , 当K、Q、V 是同一个向量或矩阵时,即是self-attention
查询(Query)、键(Key)和值(Value)向量:对于序列中的每个元素,通过线性变换生成查询向量 Q Q Q、键向量 K K K 和值向量 V V V。这三个向量用于计算注意力权重和最终的上下文表示。
计算注意力得分:通过计算查询向量
Q
Q
Q 和键向量
K
K
K 之间的点积,得到注意力得分。这些得分反映了序列中一个元素对其他元素的关注程度。
A
t
t
e
n
t
i
o
n
S
c
o
r
e
=
Q
⋅
K
T
Attention Score = Q \cdot K^T
AttentionScore=Q⋅KT
归一化注意力得分:将注意力得分通过 Softmax 函数归一化,使得得分总和为1,表示不同元素之间的权重分布。
A
t
t
e
n
t
i
o
n
W
e
i
g
h
t
s
=
Softmax
(
Q
⋅
K
T
)
Attention Weights= \text{Softmax}(Q \cdot K^T)
AttentionWeights=Softmax(Q⋅KT)
加权求和值向量:使用归一化后的注意力权重对值向量
V
V
V 进行加权求和,得到每个元素的上下文表示。
C
o
n
t
e
x
t
V
e
c
t
o
r
=
A
t
t
e
n
t
i
o
n
W
e
i
g
h
t
s
⋅
V
Context Vector=Attention Weights⋅V
ContextVector=AttentionWeights⋅V
以一个长度为 n n n 的序列为例,自注意力机制的计算过程如下:
Q = X W Q , K = X W K , V = X W V Q=XW_Q,K=XW_K,V=XW_V Q=XWQ,K=XWK,V=XWV
其中, W Q W_Q WQ、 W K W_K WK 和 W V W_V WV 是可训练的权重矩阵。
Attention Scores = Q K T d k \text{Attention Scores} = \frac{QK^T}{\sqrt{d_k}} Attention Scores=dk QKT
其中, d k d_k dk 是键向量的维度,用于缩放点积,防止值过大。
归一化:
Attention Weights
=
Softmax
(
Q
K
T
d
k
)
\text{Attention Weights} = \text{Softmax} \left( \frac{QK^T}{\sqrt{d_k}} \right)
Attention Weights=Softmax(dk
QKT)
加权求和:
C
o
n
t
e
x
t
V
e
c
t
o
r
s
=
A
t
t
e
n
t
i
o
n
W
e
i
g
h
t
s
⋅
V
Context Vectors=Attention Weights⋅V
ContextVectors=AttentionWeights⋅V
为了进一步增强模型的能力,自注意力机制通常采用多头注意力机制(Multi-Head Attention)。具体做法是将查询、键和值向量分成多个头(多个子空间),分别计算注意力,然后将这些头的输出拼接起来。
1.头的分割:将查询、键、值向量分成
h
h
h 个头。
Q
i
=
X
W
Q
i
,
K
i
=
X
W
K
i
,
V
i
=
X
W
V
i
for
i
=
1
,
…
,
h
Q_i = XW_{Q_i}, \quad K_i = XW_{K_i}, \quad V_i = XW_{V_i} \quad \text{for} \quad i = 1, \dots, h
Qi=XWQi,Ki=XWKi,Vi=XWVifori=1,…,h
2.每个头的注意力计算:
Attention Weights
i
=
Softmax
(
Q
i
K
i
T
d
k
)
\text{Attention Weights}_i = \text{Softmax} \left( \frac{Q_iK_i^T}{\sqrt{d_k}} \right)
Attention Weightsi=Softmax(dk
QiKiT)
Context Vectors i = Attention Weights i ⋅ V i \text{Context Vectors}_i = \text{Attention Weights}_i \cdot V_i Context Vectorsi=Attention Weightsi⋅Vi
3.拼接输出:将所有头的上下文向量拼接起来,进行线性变换。
Multi-Head Attention Output
=
Concat
(
Context Vectors
1
,
Context Vectors
2
,
…
,
Context Vectors
h
)
W
O
\text{Multi-Head Attention Output} = \\ \text{Concat}(\text{Context Vectors}_1, \text{Context Vectors}_2, \dots, \text{Context Vectors}_h)W_O
Multi-Head Attention Output=Concat(Context Vectors1,Context Vectors2,…,Context Vectorsh)WO
其中, W O W_O WO 是拼接后的线性变换矩阵。
详见:动手学深度学习(Pytorch版)代码实践 -注意力机制-Transformer_pytorch注意力机制代码实现-CSDN博客
如何把Transformer应用于 端到端语音识别呢?
No big deal , just change input.
Connectionist Temporal Classification (CTC)是一种专为处理序列到序列任务而设计的损失函数和解码方法,特别适用于输入和输出序列长度不对齐的情况,例如语音识别和手写字符识别。
CTC的核心思想是通过允许网络在每个时间步生成一个输出符号或特殊的空白符号(blank token),来解决输入和输出序列长度不一致的问题。最终的输出序列是通过移除所有空白符号和重复的符号得到的。
CTC损失函数计算输入序列与目标序列的对齐概率,允许多个可能的对齐方式。CTC通过动态规划计算所有可能对齐的总概率,从而优化模型参数。
CTC Loss
=
−
log
p
(
y
∣
x
)
\text{CTC Loss} = -\log p(y|x)
CTC Loss=−logp(y∣x)
其中, p ( y ∣ x ) p(y|x) p(y∣x) 表示给定输入序列 x x x 生成目标序列 y y y 的概率。
RNN-Transducer (Recurrent Neural Network Transducer) 是一种用于端到端序列到序列建模的神经网络架构,特别适合处理输入和输出序列长度不对齐的问题。它是对Connectionist Temporal Classification (CTC) 的扩展,结合了序列建模和对齐的功能。
RNN-Transducer由三个主要组件组成:
编码器(Encoder):编码器将输入序列(如语音特征)转换为隐藏状态表示。通常使用RNN、LSTM或GRU等循环神经网络来实现。
预测网络(Prediction Network):预测网络根据先前已生成的输出符号序列生成隐藏状态表示。这个网络通常也是一个RNN。
联合网络(Joint Network):联合网络结合编码器和预测网络的隐藏状态,生成每个时间步的输出概
流式语音识别:
与其他模型的对比:
端到端语音识别旨在简化传统ASR(Automatic Speech Recognition)的流程,通过将多个复杂的模块(如声学模型、语言模型、发音模型)整合到一个统一的神经网络中,从而简化训练和推理过程。
优点:天然支持流式语音识别,可以在每个时间步进行解码,适用于实时应用场景。
缺点:Loss计算不易实现,涉及复杂的动态规划算法;一般需要使用开源库来实现。
(Connectionist Temporal Classification)
优点:适用于输入与输出具有单调关系的任务,无需对齐标注,能够直接处理变长序列。
缺点:输出独立性假设,即每个时间步的输出是独立的,可能导致性能限制;通常需要语言模型(LM)来提高性能。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。