端到端语音识别技术解析
1. 引言
传统的自动语音识别(ASR)系统构建方法,是通过贝叶斯定理将基本方程 $W^ = \arg\max_{W\in V^ } P(W|X)$ 拆分为声学模型、词典模型和语言模型。这种方法严重依赖条件独立假设,且不同模型需分别优化。
深度学习最初被引入统计框架时,是用其替代高斯混合模型,基于观测来预测语音状态。然而,DNN/HMM 混合模型存在缺陷,其各组件需单独训练,这种单独训练过程因缺乏模型间的误差传播,易导致次优结果,在 ASR 中表现为对噪声和说话人变化敏感。
端到端 ASR 应用深度学习,使模型能直接从数据中学习,而非依赖大量人工设计的特征。它直接优化 $P(W|X)$,而非将其拆分。端到端建模的输入 - 目标对只需语音和转录的语言表示,可能的表示形式有音素、三音素、字符、字符 n - 元组或单词。虽然单词是较明显的选择,但词汇量大,需要大的输出层以及训练集中每个单词的示例,导致准确率低于其他表示形式。近年来,端到端方法倾向于使用字符、字符 n - 元组和一些单词模型,这些数据对更易生成,减轻了创建音标词典时对语言知识的要求。联合优化特征提取和序列组件有诸多好处,如降低复杂度、加快处理速度和提高质量。
实现端到端 ASR 的关键是找到替代 HMM 来建模语音时间结构的方法,最常见的是连接主义时间分类(CTC)和注意力机制。
2. 连接主义时间分类(CTC)
DL - HMM 模型依赖语言单元与音频信号的对齐来训练 DNN 进行音素、音位变体或三音素状态分类。手动获取这些对齐对于大型数据集来说成本过高。CTC 提供了一种训练 RNN 直接标记未分割序列的方法。
给定声学特征输入 $X = [x_1, x_2, …, x_T]$ 和期望输出序列 $Y = [y_1, y_2, …, y_U]$,$X$ 与 $Y$ 的准确对齐未知,且 $X$ 和 $Y$ 的长度比存在变化,通常 $T \ll U$。简单的理论对齐方法存在问题,一是输入中的静音期可能无法与输出直接对齐,二是无法处理重复字符。
CTC 算法引入空白标记(blank token)作为空分隔符,解决了上述问题。空白标记在合并重复预测后被移除,允许重复序列和静音期。它不参与损失计算和解码,但能实现输入和输出的直接对齐,而无需强制分类到输出词汇表。
CTC 算法本身是“无对齐”的,但这些“伪对齐”用于计算可能对齐的概率。它产生所有可能 $Y$ 的输出分布,用于推断特定输出 $Y$ 的概率。条件概率 $P(Y|X)$ 通过对输入和输出之间所有可能的对齐求和来计算:
- 单个对齐 $\alpha_t$ 的条件概率定义为序列中每个状态的乘积:
- $P(\alpha|X) = \prod_{t = 1}^{T} P(\alpha_t|X)$
- 单个话语 $(X, Y)$ 的条件概率为所有对齐概率之和:
- $P(Y|X) = \sum_{A\in A_{X,Y}} \prod_{t = 1}^{T} P(\alpha_t|X)$
- 其中 $A_{X,Y}$ 是有效对齐的集合。
- CTC 的损失函数为:
- $L_{CTC}(X,Y) = -\log \sum_{a\in A_{X,Y}} \prod_{t = 1}^{T} P(a_t|X)$
CTC 假设每个时间步之间条件独立,即每个时间步的输出独立于之前的时间步。虽然这允许逐帧梯度传播,但限制了学习序列依赖的能力,使用语言模型可缓解部分问题。
2.1 端到端音素识别
CTC 在 TIMIT 音素识别任务上最初取得成功。各种用 CTC 训练的架构被探索,其中堆叠双向 LSTM 架构效果最佳。双向 RNN 能利用整个话语的上下文,而非仅前向上下文。训练网络时使用了权重噪声和早停两种正则化技术,对网络训练至关重要。
2.2 深度语音(Deep Speech)
深度语音(DS1)架构训练预测字符概率序列,直接从音频特征(频谱图)生成转录。该网络由三个全连接层、一个双向 LSTM 层(替代 HMM)和一个全连接输出 softmax 层组成。输入层依赖频谱图的帧,中间帧两侧各有 5 - 9 个上下文帧。
由于端到端映射到字符的复杂性,数据集大小是 DS1 成功的重要因素,使用了 9600 个说话人的 5000 小时数据。尽管数据集增大,正则化仍很关键,模型使用了 dropout 和数据增强技术。DS1 的 RNN 模型在训练过程中能学习轻量级字符级语言模型,即使没有语言模型也能生成“可读”的转录,错误通常是单词的语音拼写错误。
为了处理大数据集和架构的计算需求,使用了多 GPU 训练。采用了数据并行和模型并行两种并行方式:
-
数据并行
:在每个 GPU 上保留架构副本,将大训练批次拆分到不同 GPU 上,分别进行前向和反向传播,最后聚合梯度更新。它能随 GPU 数量接近线性扩展,但可能影响收敛速度。
-
模型并行
:将模型层拆分并分布到可用的 GPU 上。在 Deep Speech 架构中,通过沿时间维度将模型一分为二实现了模型并行。这些决策使模型能在 5000 小时音频上训练,并在两个嘈杂语音基准测试中取得了最先进的结果。
2.3 深度语音 2(Deep Speech 2)
Deep Speech 2(DS2)扩展了原始架构,进行基于字符的端到端语音识别,并在英语和普通话转录上验证了建模技术。DS2 对原始架构进行了许多改进和工程优化,速度比原始 Deep Speech 实现快 7 倍。
DS2 与 DS1 的主要区别在于深度增加。在 DS2 工作中,探索了多种架构,英语转录的最优 DS2 架构包含 11 层(3 个卷积层、7 个双向循环层和 1 个全连接层)。每层(除全连接层外)都加入了批量归一化,还加入了梯度裁剪以提高收敛性。整体架构约有 3500 万个参数。结合 n - 元语言模型后,单词错误率(WER)相对已有竞争力的 DS1 架构提高了 43.4%。
其他改进关键因素包括训练技术和进一步增大数据集大小。CTC 模型训练早期不稳定,采用训练课程,先选择较短话语,使模型在第一个 epoch 的早期受益于较小的梯度更新。DS2 中将数据集大小增加到 12000 小时,训练集大小每增加 10 倍,WER 降低 40%。
2.4 Wav2Letter
Wav2Letter 将端到端模型扩展到仅使用 CNN 的网络。它在 MFCC 和功率谱特征上使用全卷积网络,与其他端到端网络(如 Deep Speech 2)有竞争力,训练使用 CTC,速度显著提高,具备实时解码能力。
训练网络后,在输入和初始卷积层之间添加中间一维卷积层,将输入改为原始波形,旨在学习生成类似于最初使用的 MFCC 的特征。在原始波形上运行的端到端网络准确率略有下降,但能直接处理波形。
除了 CTC,还探索了一种新的序列损失函数——自动分割准则(ASG)。ASG 没有空白标签,节点上没有归一化分数,采用全局归一化而非帧级归一化。它引入额外字符处理重复字符。移除 RNN 使预测计算成本大大降低,允许流式转录。后续的 Wav2Letter++ 提高了 ASR 系统的速度,训练时间实现线性扩展(最多 64 个 GPU)。
2.5 CTC 的扩展
CTC 计算未对齐序列的伪对齐方法很优雅,但帧独立性假设存在缺点。有两种技术可缓解此假设:
-
Gram - CTC
:扩展 CTC 算法以解决固定字母表和固定目标分解问题。它学习预测字符 n - 元组而非单个字符,允许模型在给定时间步输出多个字符,能在一定程度上缓解帧独立性假设的影响。训练过程中尝试自动学习字符 n - 元组,但联合学习时训练不稳定,采用多任务学习联合优化 CTC 和 Gram - CTC 来解决。即使手动选择 n - 元组,在多个数据集上也有改进。
-
RNN 变换器(RNN Transducer)
:假设输入和输出序列之间存在局部单调对齐,通过加入两个 RNN 层建模不同时间步输出之间的依赖关系,缓解了 CTC 的条件独立性假设。其条件概率计算如下:
- $P_{RNN - T}(Y|X) = \sum_{a\in A_{X,Y}} P(a|h) = \sum_{a\in A_{X,Y}} \prod_{t = 1}^{T’} P(a_t|h_t, y_{1:u_{t - 1}})$
- 其中 $u_t$ 表示与输入时间步 $t$ 对齐的输出时间步,$T’$ 是包括预测空白标签数量的对齐序列长度,$y_{1:u}$ 是到时间步 $u$ 不包括空白的预测序列。训练 RNN - T 模型需要使用前向 - 后向算法计算梯度,在线语音识别中可使用单向 RNN 建模时间步之间的前向依赖关系。
3. 序列到序列(Seq - to - Seq)
序列到序列模型在机器翻译中的成功促使其应用于语音识别。其在语音识别中的一个显著优点是训练不依赖 CTC,从根本上缓解了 CTC 的帧独立性假设。但在语音识别中,输入和输出的时间步数量通常较多,使用单个隐藏状态表示整个话语来训练基本的序列到序列模型不可行。
以下是相关技术的对比表格:
| 技术 | 优点 | 缺点 | 应用场景 |
| ---- | ---- | ---- | ---- |
| CTC | 无需手动对齐,可处理未分割序列 | 帧独立性假设限制学习序列依赖 | 端到端音素识别、语音转录 |
| Deep Speech | 能学习轻量级字符级语言模型 | 数据集和计算需求大 | 语音转录 |
| Deep Speech 2 | 速度快,准确率高 | 架构复杂,参数多 | 多种语言语音转录 |
| Wav2Letter | 速度快,可实时解码 | 处理原始波形准确率略有下降 | 实时语音识别 |
| Gram - CTC | 缓解帧独立性假设影响 | 训练不稳定 | 语音识别中处理字符 n - 元组 |
| RNN 变换器 | 缓解条件独立性假设 | 训练计算复杂 | 语音识别中建模序列依赖 |
| Seq - to - Seq | 不依赖 CTC,缓解帧独立性假设 | 训练基本模型困难 | 语音识别 |
下面是 CTC 相关流程的 mermaid 流程图:
graph TD;
A[输入声学特征 X] --> B[引入空白标记进行伪对齐];
B --> C[计算所有可能对齐的概率];
C --> D[求和得到条件概率 P(Y|X)];
D --> E[计算 CTC 损失函数 L_CTC(X,Y)];
E --> F[计算梯度进行反向传播];
4. 注意力机制在语音识别中的应用
在端到端语音识别中,除了 CTC 外,注意力机制也是一种重要的技术,它能够帮助模型更好地捕捉输入序列和输出序列之间的关系。
4.1 注意力机制原理
注意力机制允许模型在生成输出的每个时间步,动态地关注输入序列的不同部分。在语音识别场景中,这意味着模型可以根据当前生成的内容,有针对性地从语音特征中提取相关信息。
假设输入序列为 $X = [x_1, x_2, …, x_T]$,输出序列为 $Y = [y_1, y_2, …, y_U]$。在生成输出 $y_t$ 时,注意力机制会计算一个注意力分布 $a_t = [a_{t1}, a_{t2}, …, a_{tT}]$,其中 $a_{ti}$ 表示在生成 $y_t$ 时对输入 $x_i$ 的关注程度。然后,通过加权求和得到一个上下文向量 $c_t$:
$c_t = \sum_{i = 1}^{T} a_{ti} x_i$
这个上下文向量 $c_t$ 会与之前的输出状态一起用于生成当前的输出 $y_t$。注意力分布 $a_{ti}$ 通常通过一个注意力函数计算得到,该函数会考虑当前的输出状态和输入序列。
4.2 注意力机制在 ASR 网络中的架构
常见的基于注意力机制的 ASR 网络架构通常包含编码器和解码器两部分:
-
编码器
:负责将输入的语音特征转换为一个隐藏表示序列。一般可以使用卷积神经网络(CNN)或循环神经网络(RNN)来实现。例如,使用 CNN 对语音频谱图进行特征提取,或者使用 RNN 建模语音的时间序列信息。
-
解码器
:根据编码器输出的隐藏表示序列和之前生成的输出,逐步生成转录文本。在解码器的每个时间步,使用注意力机制计算上下文向量,结合之前的输出状态生成当前的输出。
以下是一个简单的基于注意力机制的 ASR 网络架构示意图:
graph LR;
A[语音特征输入] --> B[编码器];
B --> C[隐藏表示序列];
D[之前输出状态] --> E[注意力机制];
C --> E;
E --> F[上下文向量];
F --> G[解码器];
D --> G;
G --> H[当前输出];
4.3 注意力机制的优势和挑战
-
优势
:
- 能够捕捉输入和输出之间的长距离依赖关系,比 CTC 更能处理复杂的序列关系。
- 可以根据不同的输出动态调整对输入的关注,提高了模型的灵活性和准确性。
-
挑战
:
- 计算复杂度较高,特别是在处理长序列时,需要更多的计算资源和时间。
- 训练过程相对复杂,需要合适的初始化和优化策略。
5. 多任务网络:结合 CTC 和注意力机制
为了充分发挥 CTC 和注意力机制的优势,一些研究提出了多任务网络,同时使用 CTC 和注意力机制进行训练。
5.1 多任务网络架构
多任务网络通常在同一个网络中同时计算 CTC 损失和注意力损失。网络的编码器部分可以共享,分别连接到 CTC 解码器和注意力解码器。在训练时,将两个损失函数相加作为总损失进行优化:
$L_{total} = \alpha L_{CTC} + (1 - \alpha) L_{attention}$
其中 $\alpha$ 是一个超参数,用于平衡 CTC 损失和注意力损失的权重。
以下是多任务网络的架构示意图:
graph LR;
A[语音特征输入] --> B[共享编码器];
B --> C[CTC 解码器];
B --> D[注意力解码器];
C --> E[CTC 损失];
D --> F[注意力损失];
E --> G[总损失计算];
F --> G;
5.2 多任务网络的优势
- 提高模型的鲁棒性 :CTC 和注意力机制可以从不同的角度学习语音和文本之间的映射关系,结合两者可以使模型更加鲁棒,减少对单一机制的依赖。
- 利用不同的信息 :CTC 可以提供全局的对齐信息,而注意力机制可以捕捉局部的依赖关系,两者结合可以充分利用不同类型的信息。
6. 推理阶段的解码技术
在推理阶段,需要从模型的输出中解码出最终的转录文本。对于 CTC 和注意力机制,有不同的解码技术。
6.1 CTC 解码技术
- 贪心解码 :在每个时间步选择概率最大的标签作为预测结果,然后合并重复的标签并移除空白标记。这种方法简单快速,但可能不是最优解。
- 束搜索解码 :维护一个候选列表(束),在每个时间步扩展束中的候选序列,选择概率最大的若干个序列继续扩展,最终选择概率最大的序列作为结果。束搜索可以找到更优的解,但计算复杂度较高。
6.2 注意力机制解码技术
- 贪心解码 :与 CTC 类似,在每个时间步选择概率最大的标签作为输出。
- 束搜索解码 :同样使用束搜索来找到更优的序列,但需要考虑注意力分布的影响。
6.3 结合语言模型的解码
为了提高解码的准确性,可以结合语言模型。语言模型可以提供单词或 n - 元组的上下文信息,帮助选择更合理的转录结果。在解码过程中,将语言模型的得分与模型输出的概率相结合,选择综合得分最高的序列。
以下是不同解码技术的对比表格:
| 解码技术 | 优点 | 缺点 | 适用场景 |
| ---- | ---- | ---- | ---- |
| CTC 贪心解码 | 简单快速 | 可能不是最优解 | 对速度要求高,对准确性要求相对较低的场景 |
| CTC 束搜索解码 | 能找到更优解 | 计算复杂度高 | 对准确性要求较高的场景 |
| 注意力机制贪心解码 | 简单快速 | 可能不是最优解 | 对速度要求高,对准确性要求相对较低的场景 |
| 注意力机制束搜索解码 | 能找到更优解 | 计算复杂度高,需考虑注意力分布 | 对准确性要求较高的场景 |
| 结合语言模型的解码 | 提高解码准确性 | 增加计算复杂度 | 对准确性要求极高的场景 |
7. 嵌入和无监督技术
在语音识别中,嵌入和无监督技术也有重要的应用。
7.1 嵌入技术
嵌入技术可以将离散的符号(如字符、单词)映射到连续的向量空间中,使得模型能够更好地处理这些符号。在语音识别中,可以使用字符嵌入或单词嵌入。例如,将每个字符映射到一个低维向量,模型可以学习这些向量之间的关系,从而提高对语音和文本的理解能力。
7.2 无监督技术
无监督技术可以在没有标注数据的情况下学习语音的特征和模式。例如,使用自编码器或变分自编码器对语音数据进行无监督学习,提取语音的潜在表示。这些潜在表示可以用于后续的有监督训练,提高模型的性能。
8. 案例研究:结合 CTC 和注意力网络
下面通过一个案例研究来展示如何结合 CTC 和注意力网络进行端到端语音识别。
假设我们有一个语音数据集,包含语音信号和对应的转录文本。我们构建一个多任务网络,同时使用 CTC 和注意力机制进行训练。
- 数据预处理 :将语音信号转换为频谱图或其他特征表示,对转录文本进行编码。
- 网络架构 :设计一个共享编码器,分别连接 CTC 解码器和注意力解码器。
- 训练过程 :使用上述的总损失函数进行优化,调整 $\alpha$ 参数平衡 CTC 损失和注意力损失。
- 推理过程 :在推理阶段,使用束搜索解码结合语言模型,得到最终的转录结果。
通过这个案例可以看到,结合 CTC 和注意力网络可以充分发挥两者的优势,提高语音识别的准确性和鲁棒性。
综上所述,端到端语音识别技术在近年来取得了很大的进展,从 CTC 到注意力机制,再到多任务网络和各种解码技术,不断地提高了语音识别的性能。未来,随着技术的不断发展,端到端语音识别有望在更多的场景中得到应用。
超级会员免费看
706

被折叠的 条评论
为什么被折叠?



