Transformer 架构已显著推动了语音识别系统。循环神经网络 (RNNs) 按顺序处理数据,一次一个时间步,这会导致计算速度慢,并且在捕获非常长的音频序列中的依赖关系时通常表现不佳。为了克服这些局限性,Transformer 架构提供了一种替代方法。它最初用于机器翻译,完全移除了循环机制,转而仅仅依赖注意力机制。Transformer 的核心思想是自注意力。与 LAS 模型中的注意力机制不同,LAS 模型衡量编码器状态(音频)相对于当前解码器状态(文本)的重要性,而自注意力机制允许模型衡量同一序列内所有其他元素的重要性。对于 ASR 模型,这意味着在处理某个音频帧时,自注意力机制可以查看整个音频片段,以确定哪些其他帧对于构建该特定帧的丰富表示最为相关。这种对所有输入位置对之间关系进行建模的能力,使得模型能够比 RNN 更有效地捕获长距离语境。适用于语音的 Transformer 模型标准 Transformer 架构由一个编码器和一个解码器组成,两者均由多个相同层构成。对于 ASR,此结构经过调整以处理音频特征作为输入并生成文本作为输出。digraph G { rankdir=TB; splines=ortho; node [shape=box, style="filled,rounded", fontname="Helvetica"]; edge [fontname="Helvetica"]; subgraph cluster_input { label="输入处理"; style="filled,rounded"; color="#e9ecef"; audio_feat [label="对数梅尔频谱图", fillcolor="#a5d8ff"]; pos_enc [label="位置编码", fillcolor="#bac8ff"]; input_sum [label="+", shape=circle, style=filled, fillcolor="#ced4da", width=0.3]; audio_feat -> input_sum [label="帧 (T)"]; pos_enc -> input_sum; } subgraph cluster_encoder { label="编码器"; style="filled,rounded"; color="#e9ecef"; encoder_stack [label="编码器堆栈 (N 层)\n- 多头自注意力\n- 前馈网络", fillcolor="#96f2d7", shape=box, height=1.5]; } subgraph cluster_decoder { label="解码器"; style="filled,rounded"; color="#e9ecef"; decoder_stack [label="解码器堆栈 (M 层)\n- 掩码自注意力\n- 编码器-解码器注意力\n- 前馈网络", fillcolor="#fcc2d7", shape=box, height=1.5]; } subgraph cluster_output { label="输出生成"; style="filled,rounded"; color="#e9ecef"; output_tokens [label="<开始>", fillcolor="#ffec99"]; output_prob [label="Softmax\n(概率)", fillcolor="#ffd8a8"]; final_text [label="预测文本", shape=ellipse, style=filled, fillcolor="#ced4da"]; } input_sum -> encoder_stack [label="编码特征"]; encoder_stack -> decoder_stack [label="上下文向量"]; output_tokens -> decoder_stack [label="先前输出", style=dashed]; decoder_stack -> output_prob; output_prob -> final_text [label="Argmax/束搜索"]; output_prob -> decoder_stack [label="下一个输入标记", style=dashed]; }自动语音识别用 Transformer 模型的高级视图。各部分在语音处理中的协作方式如下:输入特征:模型接收一系列音频特征向量,如对数梅尔频谱帧,作为其输入。位置编码:由于自注意力机制同时处理所有输入,它没有固有的序列顺序感。为解决此问题,我们向输入特征添加位置编码。这些是向量,为模型提供关于每个音频帧位置或时间戳的信息。编码器:编码器用于创建输入音频的强大上下文表示。它由一系列相同层组成,每层包含一个多头自注意力模块和一个简单的前馈神经网络。自注意力模块帮助模型辨别音频中哪些部分对于理解其他部分最为重要。例如,它能学会将某个辅音的声学特征与后续元音跨越多个帧进行关联。解码器:解码器是自回归的,意味着它一次生成一个标记(例如,一个字符或一个词片段)的输出文本。它也由一系列层组成。每个解码器层有三个主要组成部分:掩码自注意力:此模块使得解码器能够关注输出序列中先前生成的标记。“掩码”防止其在训练时提前查看未来标记,这会是训练中的作弊行为。编码器-解码器注意力:这类似于 Seq2Seq 模型中的注意力。它使解码器在预测下一个标记时,能够聚焦于编码器输出(上下文感知的音频表示)中最相关部分。前馈网络:与编码器中一样,此网络提供额外的处理能力。优点与挑战Transformer 的主要优点是其可并行化能力。由于没有循环连接,编码器中所有时间步的计算可以同时进行,这显著加快了在 GPU 和 TPU 等现代硬件上的训练速度。这种并行特性,加上出色的长距离上下文建模能力,使得在许多 ASR 任务中获得了先进成绩。然而,Transformer 模型也面临挑战。它们的计算开销大,自注意力的开销随输入序列长度的平方增长($O(T^2)$,其中 $T$ 是帧的数量)。由于音频输入可能非常长,这会是一个严重的局限。它们也需要大量数据,通常需要非常大的数据集才能从头开始有效训练。实现方式概览虽然构建一个完整的 Transformer 超出本节范围,但了解核心组件在 PyTorch 等深度学习框架中的提供方式很有帮助。您无需从零开始构建自注意力机制。import torch import torch.nn as nn # 模型参数(示例值) feature_size = 80 # 用于对数梅尔频谱图 nhead = 8 # 注意力头的数量 num_encoder_layers = 6 num_decoder_layers = 6 dim_feedforward = 2048 dropout = 0.1 # 从 PyTorch 实例化一个标准 Transformer 模型 transformer_model = nn.Transformer( d_model=feature_size, nhead=nhead, num_encoder_layers=num_encoder_layers, num_decoder_layers=num_decoder_layers, dim_feedforward=dim_feedforward, dropout=dropout, batch_first=True # 对于 ASR 数据形状很重要 ) # 示例输入形状 # src = 源音频张量 (批量, 序列长度, 特征) # tgt = 目标文本张量 (批量, 目标长度, 特征) src = torch.rand((32, 500, feature_size)) # 32 个音频片段,每个长 500 帧 tgt = torch.rand((32, 50, feature_size)) # 32 个文本,每个长 50 个标记 # 模型返回解码器的输出 output = transformer_model(src, tgt) print(f"Input audio shape: {src.shape}") print(f"Input text shape: {tgt.shape}") print(f"Output shape: {output.shape}") # 预期输出: # Input audio shape: torch.Size([32, 500, 80]) # Input text shape: torch.Size([32, 50, 80]) # Output shape: torch.Size([32, 50, 80])此代码片段演示了如何在 PyTorch 中创建一个 nn.Transformer 模块。d_model 参数对应于输入的特征维度,您可以配置层数、注意力头数以及其他超参数。Transformer 架构为现代 ASR 系统提供了强大支持。下一节中,我们将考察 Conformer 模型,它通过重新引入卷积来增强 Transformer 模型,以更好地捕获局部音频模式。