尽管连接时序分类 (CTC) 提供了一种巧妙的方式来处理变长音频输入,且在训练时无需显式对齐,但它作出了一个强条件独立性假设:在给定输入音频的情况下,每个时间步的预测独立于其他预测。这会限制它表示输出文本序列内部固有依赖的能力。序列到序列 (Seq2Seq) 模型,特别是那些增强了注意力机制的模型,提供了一种直接解决这一限制的替代方法。这些模型最初在机器翻译中得到推广,并被证实对ASR(自动语音识别)非常有效,它们直接将声学特征输入序列 $X = (x_1, ..., x_T)$ 映射到字符或音素输出序列 $Y = (y_1, ..., y_U)$。编码器-解码器框架本质上,一个用于ASR的基于注意力机制的Seq2Seq模型由两个主要部分构成:一个编码器和一个解码器,它们通过注意力机制连接。digraph G { rankdir=LR; node [shape=box, style=rounded, fontname="Arial", fontsize=10, margin=0.2]; edge [fontname="Arial", fontsize=9]; subgraph cluster_input { label = "输入音频特征"; style = "dashed"; bgcolor="#e9ecef"; x1 [label="x_1"]; x2 [label="x_2"]; xT [label="...", shape=plaintext]; xt [label="x_t"]; } subgraph cluster_encoder { label = "编码器(例如,双向LSTM)"; style = "filled"; bgcolor="#a5d8ff"; enc1 [label="h_1"]; enc2 [label="h_2"]; encT [label="...", shape=plaintext]; enct [label="h_t"]; } subgraph cluster_decoder { label = "解码器(例如,LSTM)"; style = "filled"; bgcolor="#b2f2bb"; dec_start [label="<sos>", shape=ellipse]; dec1 [label="s_1"]; dec2 [label="s_2"]; decU [label="...", shape=plaintext]; decu [label="s_u"]; output1 [label="y_1", shape=ellipse]; output2 [label="y_2", shape=ellipse]; outputU [label="...", shape=plaintext]; outputu [label="y_u", shape=ellipse]; } subgraph cluster_attention { label = "注意力机制"; style = "filled"; bgcolor="#ffec99"; attn [label="计算上下文c_u\n(h_i的加权和)"]; } x1 -> enc1; x2 -> enc2; xt -> enct; enc1 -> attn [style=dotted, arrowhead=none]; enc2 -> attn [style=dotted, arrowhead=none]; enct -> attn [style=dotted, arrowhead=none]; dec_start -> dec1; dec1 -> dec2; dec2 -> decU; decu -> outputu; dec1 -> attn [label="查询 (s_1)"]; attn -> dec1 [label="上下文 c_1"]; dec1 -> output1; dec2 -> attn [label="查询 (s_2)"]; attn -> dec2 [label="上下文 c_2"]; dec2 -> output2; output1 -> dec2 [label="前一个输出 y_1"]; output2 -> decU; {rank=same; enc1; enc2; enct;} {rank=same; dec1; dec2; decu;} {rank=same; output1; output2; outputu;} }ASR中基于注意力机制的编码器-解码器模型的基本架构。编码器处理输入音频特征,注意力机制根据编码器输出和当前解码器状态计算上下文向量,解码器逐个生成输出序列中的词元。编码器: 该部分处理整个声学特征输入序列 ($x_1, ..., x_T$)。通常,它通过使用循环神经网络(如LSTM或GRU,常为双向以捕捉过去和未来帧的上下文)或甚至堆叠卷积层后接RNN来实现。编码器的作用是将输入特征转换为一系列更高层的表示,通常称为隐藏状态或注释 ($h_1, ..., h_T$)。每个 $h_t$ 理想情况下总结了输入音频中时间步 $t$ 周围的相关信息。 $$ h_t = \text{编码器}(x_1, ..., x_T)_t $$解码器: 该部分逐个生成输出文本序列 ($y_1, ..., y_U$)。它通常是一个自回归循环神经网络(LSTM/GRU)。在每个输出步 $u$,解码器接收前一个生成的词元 $y_{u-1}$ 及其自身的前一个隐藏状态 $s_{u-1}$ 作为输入。非常重要地,它还接收一个上下文向量 $c_u$,这个向量由注意力机制提供。基于这些输入,它更新其隐藏状态 $s_u$ 并预测词汇表(例如,字符、子词)中下一个输出词元 $y_u$ 的概率分布。 $$ s_u = \text{解码器RNN}(s_{u-1}, y_{u-1}, c_u) $$ $$ P(y_u | y_{<u}, X) = \text{softmax}(\text{输出层}(s_u, c_u)) $$注意力机制:关注相关音频早期Seq2Seq模型的定长上下文向量限制(编码器将整个输入总结成一个单一向量)对于语音等长序列来说是一个问题。注意力机制通过允许解码器在生成每个输出词元 $y_u$ 时动态地关注整个编码输入序列 ($h_1, ..., h_T$) 的不同部分来解决这一问题。在每个解码器步 $u$,注意力机制计算一个上下文向量 $c_u$,作为编码器隐藏状态 $h_t$ 的加权和:$$ c_u = \sum_{t=1}^{T} \alpha_{ut} h_t $$权重 $\alpha_{ut}$ 被称为注意力权重。它们决定了解码器在预测输出词元 $y_u$ 时,应如何“关注”编码器状态 $h_t$。这些权重是根据当前解码器状态 $s_{u-1}$(作为“查询”)与每个编码器隐藏状态 $h_t$(作为“键”)之间的相似度或对齐度计算的。计算对齐分数: 一个对齐模型 $e_{ut}$ 评估时间 $t$ 附近的输入与位置 $u$ 的输出匹配的程度。一个常见选择是加性注意力(Bahdanau风格): $$ e_{ut} = v_a^T \tanh(W_a s_{u-1} + V_a h_t + b_a) $$ 在这里,$v_a$, $W_a$, $V_a$ 和 $b_a$ 是注意力机制的可学习权重矩阵和偏置。另一个普遍采用的选择是点积注意力(Luong风格),如果维度匹配,其计算复杂度更低: $$ e_{ut} = s_{u-1}^T W_a h_t $$ 或者如果维度允许直接点积,也可以简单地表示为 $e_{ut} = s_{u-1}^T h_t$。将分数归一化为权重: 分数 $e_{ut}$ 使用softmax函数在所有输入时间步上进行归一化,以获得注意力权重 $\alpha_{ut}$。这些权重的和为1。 $$ \alpha_{ut} = \frac{\exp(e_{ut})}{\sum_{k=1}^{T} \exp(e_{uk})} $$计算上下文向量: 上下文向量 $c_u$ 按照前面所示的加权和计算。该向量提供了与生成输出词元 $y_u$ 特别相关的输入音频摘要。这种动态加权使得模型在预测字符 'c' 时,可以关注对应音素 /k/ 的音频片段;接着将关注点转移到 'a' 对应的 /\u00e6/ 片段;最后在转录单词 "cat" 时,转移到 't' 对应的 /t/ 片段。训练与推理训练: 基于注意力机制的模型通常采用最大似然估计进行端到端训练。目标是在给定输入音频的情况下,最大化正确输出序列的概率。损失函数通常是每个解码器步的交叉熵损失之和或平均值: $$ \mathcal{L} = - \sum_{u=1}^{U} \log P(y_u^* | y_{<u}^, X) $$ 其中 $y^$ 是真实序列。在训练期间,通常使用一种称为教师强制的技术。它不是将解码器自身在前一步的预测 ($y_{u-1}$) 作为当前步的输入,而是提供真实词元 ($y_{u-1}^*$)。这稳定了训练并加速了收敛,尽管它可能导致训练和推理条件之间出现不匹配(称为曝光偏差)。推理(解码): 在测试时生成输出序列需要逐个生成词元。由于真实值不可用,解码器使用自己先前预测的词元作为下一步的输入。找到最有可能的序列 $Y$ 需要在可能的输出序列空间中进行搜索。贪婪搜索: 在每个步 $u$,简单地根据模型的输出分布选择概率最高的词元 $y_u$。这种方法速度快但通常不是最优的。束搜索: 一种更有效的方法是束搜索。它在每一步维护固定数量($k$,即束宽)最有可能的部分假设(序列)。对于每个假设,它考察可能的下一个词元,计算扩展序列的概率,并只保留整体上最好的 $k$ 个序列用于下一步。这比贪婪搜索考察了搜索空间中更大的部分,通常会产生更好的结果,但代价是计算量增加。优点与缺点优点:灵活性: 能表示音频与文本之间复杂、非单调的对齐。上下文建模: 通过自回归解码器显式地表示输出序列中的依赖关系。端到端训练: 联合学习所有组件,可能带来更好的整体优化。先进性能: 在许多ASR基准测试中取得了优异的结果。缺点:计算成本: 注意力计算增加了额外开销,特别是对于长序列。顺序推理: 解码器的自回归性质意味着推理无法在输出词元上并行化,这使得它对于实时应用来说比CTC等非自回归模型更慢。对齐问题: 有时可能无法学习到有意义的对齐,尤其是在数据有限或序列非常长的情况下。注意力机制可能关注范围过广或过窄,或者失去跟踪。曝光偏差: 训练期间的教师强制与推理期间的自回归生成之间的差异可能导致性能下降。基于注意力机制的编码器-解码器模型代表了声学建模中的重要一步,它从具有强独立性假设的逐帧分类转向生成基于整个输入历史和音频输入相关部分的输出序列。尽管后续架构,如RNN转导器(将在下一部分讨论)和Transformer,提供了改进,特别是对于流式处理和并行化,但理解注意力机制是现代ASR的基本。