这篇继续是开发日志,正在开发一款iOS端的实时双语字幕APP,由于需要用到语音识别,了解了下语音识别任务的现状和主流方案,为后面方案选择做准备。

模块流程

graph LR A[捕获系统播放音频] --> B[语音识别ASR] B --> C[语言翻译] B --> D[双语字幕] C --> D

什么是ASR任务

ASR(Automatic Speech Recognition,自动语音识别)任务,指的是将连续的音频信号转换为对应的文本序列的过程。这是一种典型的序列到序列(Sequence-to-Sequence)的转换任务:

1
audio (连续信号)  →  text (离散 token)

从信号处理的角度来看,传统ASR需要解决以下核心问题:

  1. 声学建模:将音频特征映射到音素或字符
  2. 语言建模:捕捉词汇之间的概率关系
  3. 对齐问题:音频帧与输出token之间的对齐

不过,在现代端到端深度学习方案中,这三个问题都被统一在一个神经网络中解决,不再需要独立的声学模型和语言模型。模型通过端到端训练自动学习如何从音频特征直接映射到文本输出。

与降噪任务的区别

在开发iOS双语字幕的过程中,我之前可能接触过降噪任务,这两者有本质区别:

维度降噪任务ASR任务
输入输出音频 → 音频音频 → 文本
任务类型信号回归序列到序列
评估指标SNR、PESQWER、CER
难点保留语音质量识别准确性
模型结构EncoderEncoder-Decoder

简单来说:

  • 降噪任务:输入一段有噪声的音频,输出干净的音频(同类转换)
  • ASR任务:输入音频,输出文字(跨模态转换)

ASR的难点在于它需要"理解"音频内容并转换为语义符号,而不是简单地处理信号波形。同时,ASR任务的输入和输出也不像降噪任务那样是一一对应的关系,还需要处理对齐问题。

目前主流的实现方案

主流的ASR实现方案主要有三种:CTC、RNN-T和基于Attention的Seq2Seq。

CTC (Connectionist Temporal Classification)

CTC是一种经典的对齐方法,核心思想是不需要显式的对齐标签,而是通过"blank"机制自动学习对齐。

CTC引入了空白符(blank)和折叠机制:

  • 重复的字符会被折叠(如 “aaabbb” → “ab”)
  • blank符号不产生任何输出
  • 通过动态规划计算所有可能路径的概率

Sequence Modeling With CTC 详细原理可参考这篇文章。

训练阶段就是使目标token序列路径的概率最大,而推理阶段就是搜索概率最大的token路径并输出,这里通常有两种方法:

方法描述
Greedy Search每一步都选择概率最大的token输出
Beam Search每一步保留top-N概率的token结果,输出token序列路径概率最大的结果

RNN-T (Recurrent Neural Network Transducer)

RNN-T是CTC的扩展,引入了一个额外的预测网络(Prediction Network)来建模输出token之间的依赖关系。

RNN-T由三部分组成:

  1. 编码器(Encoder):将音频特征转换为声学表征
  2. 预测网络(Prediction Network):基于已输出的token预测下一个token
  3. 联合网络(Joint Network):结合Encoder和Prediction的输出,预测下一个token

RNN-T在输出时,不仅会输入当前帧音频数据,还会输入历史输出作为参考

Seq2Seq with Attention

基于Attention机制的序列到序列模型是目前最流行的方案,被广泛用于Whisper、Paraformer等现代ASR系统。

原理

经典结构:

1
Encoder → Attention → Decoder → Output
  • Encoder:将音频特征编码为高维表征(通常使用Transformer或Conformer)
  • Attention:让Decoder在生成每个token时"关注"输入的不同部分
  • Decoder:自回归生成输出文本

优缺点

优点

  • 可以建模任意长度序列的依赖关系
  • 识别准确率高
  • 易于添加语言模型集成
  • 适合大规模预训练

缺点

  • 推理延迟较高(需要完整音频或较大chunk)
  • 流式识别实现复杂
  • 计算资源需求大

流式模型和非流式模型

流式(Streaming)和非流式(Offline)是ASR系统根据实时性要求的两种设计模式。

什么是非流式模型

非流式模型(Offline ASR)需要等待完整音频输入后才能开始识别

特点:

  • 输入:完整的音频文件或长音频段
  • 延迟:较高,需要等待音频结束
  • 准确率:通常较高,因为可以看到完整的上下文
  • 适用场景:视频字幕生成、会议转录、录音文件处理

什么是流式模型

流式模型(Streaming ASR)可以边接收音频输入边输出识别结果,实现实时识别。

特点:

  • 输入:连续的音频流(通常是短片段,如30ms一帧)
  • 延迟:低,可以做到几百毫秒内输出
  • 准确率:通常略低于非流式,因为只有历史和部分未来上下文
  • 适用场景:实时语音对话、语音助手、直播字幕

技术实现差异

维度流式模型非流式模型
上下文有限上下文(lookahead)完整上下文
延迟低(<500ms)
准确率略低较高
模型复杂度较高(需处理分段)较低
内存占用较小较大

流式模型通常需要特殊设计,如:

  • Chunked Attention:将音频分成小块处理
  • CTC Prefix:使用CTC的前缀解码
  • Lookahead:只考虑有限的未来帧

自回归解码和非自回归解码

解码方式决定了模型如何生成输出文本。

自回归解码 (Autoregressive Decoding)

自回归解码是目前最主流的方式,特点是逐 token 生成,每个 token 的生成依赖之前所有生成的 token

1
2
3
4
5
6
输出: "hello world"
生成过程:
  1. 生成 "h"
  2. 基于 "h" 生成 "he"
  3. 基于 "he" 生成 "hel"
  4. ...

特点:

  • 优点:生成质量高,可以建模长期依赖
  • 缺点:串行生成,推理速度慢(O(n) 复杂度,n为输出长度)
  • 典型模型:Transformer Decoder、RNN-T

非自回归解码 (Non-autoregressive Decoding)

非自回归解码是一种并行生成方式,一次性输出整个序列。

1
2
3
输出: "hello world"
生成过程:
  1. 直接输出完整句子 "hello world"

特点:

  • 优点:并行生成,推理速度快(O(1) 复杂度)
  • 缺点:难以建模输出token之间的依赖,生成质量可能较低
  • 典型实现:CTC、FastCorrect、Mask-Predict

对比

维度自回归解码非自回归解码
生成方式串行,逐token并行,一次性输出
推理速度
生成质量略低
依赖关系建模token间依赖假设条件独立
典型模型RNN-T、Seq2SeqCTC、FastConformer

方案选择

OK,前面了解了这么多,都是为了后续实现最小原型产品,选择语音识别方案做准备,目标不是要训练一个SOTA模型,因此这里暂时只是粗浅的了解。

根据需求分析:

  • 目标设备:iOS移动端(资源有限)
  • 语言支持:多语言
  • 实时性:实时输入音频,实时输出文字

选择优先级

  1. 首先能跑:模型大小和计算量必须在移动端可承受范围内
  2. 然后多语言:需要支持多种语言识别
  3. 最后准确率:在功能可用后再优化性能

优先级一:模型能在移动端跑起来

参数量选择

移动端资源有限,模型参数量直接决定了能否运行。这里暂时没有明确的数值界限,实际运行起来再看,后面也可以用量化技术缩小模型体积。

量化技术:INT8量化可将模型体积缩小约4倍,准确率损失通常<5%;INT4可进一步缩小到1/8,但准确率下降更明显。

架构选择

架构计算量内存占用移动端适用性
Transformer Encoder★★★★☆
Conformer中高★★★★☆
RNN/LSTM★★★☆☆

建议:选择Encoder-only或轻量级的Conformer结构,参数量控制在50M以内。

优先级二:支持多语言

确认模型能在移动端运行后,需要考虑多语言支持能力。

不同模型架构的多语言能力

模型架构多语言支持说明
端到端Seq2Seq★★★★★训练时使用多语言数据,自然支持多语言
RNN-T★★★☆☆可支持,但需要针对性训练多语言版本
CTC★★☆☆☆通常针对单一语言,多语言版本较少

结论

需要支持多语言时,优先选择端到端Seq2Seq架构,这类模型的预训练版本通常已支持数十到上百种语言。

优先级三:实时性要求

实时字幕要求模型能够在接收音频的同时输出文字。

流式 vs 非流式

类型延迟实现难度实时字幕适用性
流式模型<500ms★★★★★
非流式模型>1s★★☆☆☆

折中方案:使用非流式模型时,可通过"分块处理"策略模拟流式效果:

  • 将音频切分为固定长度的chunk(如1秒)
  • 逐块识别并拼接结果
  • 通过缓存历史上下文减少误差

解码方式

解码方式延迟实现复杂度实时性
非自回归(Greedy)简单★★★★★
非自回归(Beam Search)★★★★☆
自回归复杂★★☆☆☆

建议:实时场景优先选择非自回归解码(Greedy),延迟最低。

总结

核心理念:先完成端到端流程验证,再根据实际体验进行针对性优化。移动端ASR是一个迭代过程,不必追求一步到位。

后续我会记录在iOS端的具体实现过程,各位道友记得点赞追番哦。

各位道友记得一键三连