语音识别 ASR
ASR(Automatic Speech Recognition,自动语音识别)将语音转为文字,是语音助手、实时字幕、会议记录的技术基础。它是 语音与音频技术概览 中”耳朵”这一侧的核心,也是 NLP 应用的入口——转成文本后才能进入意图理解等后续环节。
ASR = 给 AI 装耳朵。 早期方法(HMM + GMM)把语音拆成一串音素,每个音素建一个统计模型,再用语言模型把音素拼成词句——像查音标字典。现代方法直接用 Transformer / Conformer 从波形端到端输出文字,模型自己学会”听”——像人一样整体理解一句话。
理解几个关键里程碑:
- CTC 损失(2006):解决了”音频 10 秒但文字只有 30 个字”的长度不对齐问题——允许模型输出空白帧,再折叠重复,实现自动对齐(下面单独展开)。
- RNN-T(2014):CTC 的升级版,增加了一个预测网络(prediction network),让模型在输出每个字符时能”看到”已经说过的文字,更适合流式实时识别。
- Whisper(2022):OpenAI 用 68 万小时多语言数据训练的 Transformer,一个模型搞定多语种识别、翻译、标点——证明了大规模弱监督学习的威力。
CTC 到底解决了什么问题?
Section titled “CTC 到底解决了什么问题?”ASR 有一个绕不开的工程难题:输入与输出的长度严重不匹配。一段音频以常用的 10ms 帧移(frame shift)提取特征时,每秒会产生约 100 个音频帧;而人正常说话每秒只说 3-5 个字。也就是说,一段 10 秒的语音会产出约 1000 个音频帧,但对应的文字可能只有 30 个字符。这 30 个字符散落在 1000 个帧里的哪些位置?传统的 HMM 方法需要人工标注每个音素的精确时间边界——标注成本极高。
CTC(Connectionist Temporal Classification,连接时序分类)用一个精巧的设计解决了这个问题。它引入两个机制:
- blank 符号:模型在每一帧既可以选择输出一个字符,也可以输出一个”空白”标记(blank),表示”这一帧没有有效字符”。这样,大量多余帧就被吸收成 blank,输出序列里只有少量字符帧。
- 折叠规则:最终把输出序列中的重复字符合并、blank 删除,得到真正的文本。例如
h-Blank-e-Blank-l-l-Blank-l-Blank-o→ 先合并连续相同的字符(ll→l)→ 再删 blank → 得到helo。
CTC 的妙处在于:不需要人工标注每个音素在音频中的时间位置,模型自己学习在哪几帧”说”字母、在哪些帧保持空白。这大大降低了数据标注成本。
不过 CTC 有一个关键假设:每一帧的输出是条件独立的,即模型输出第 N 个字符时并不参考前 N-1 个字符。这导致 CTC 可能输出”语法上说不通”的序列,因此实际系统中 CTC 徃往需要外部语言模型(Language Model, 用统计 n-gram 或神经 LM 做重评分)来纠正。RNN-T 正是为了从模型内部解决这一局限而提出的。
ASR 技术演进
Section titled “ASR 技术演进”从统计模型到端到端深度学习,每一代都在减少人工设计的中间步骤:
CTC 对齐直觉
Section titled “CTC 对齐直觉”音频帧数远多于输出字符,CTC 用”空白帧(blank)“和”重复折叠”来对齐:
声学模型的三代演进
Section titled “声学模型的三代演进”传统 ASR 把系统拆成三块:声学模型(音频 → 音素概率)、发音字典(音素 → 词)、语言模型(词 → 合理句子)。其中声学模型经历了从 GMM 到 DNN 再到端到端的演化,核心动机是”用更强的函数去逼近 P(音素 | 音频)”:
为什么传统方法要做音素级建模? 音素(phoneme)是语言中最小的发音单位,数量非常有限——英语约 40 个音素,汉语拼音有约 60 个声母韵母组合。相比直接对成千上万个汉字或词建模,对几十个音素建统计模型在计算上是可行的(1980s 的算力约束),然后用发音字典把音素拼回词。GMM(Gaussian Mixture Model,高斯混合模型)用一组高斯分布来拟合”这个音素长什么样”,但它本质上只能建模浅层的、线性的特征分布。
DNN-HMM 混合系统的革命性在于:保留 HMM 做时间对齐,但把 GMM 替换为深度神经网络——DNN 能学习非线性、层次化的特征,用同一份 MFCC/filterbank 输入,准确率大幅提升。2012 年微软发布的论文证明 DNN-HMM 把商业 ASR 的词错率降低了 30%,直接引爆了语音行业的深度学习革命。然而 DNN-HMM 仍然依赖发音字典和外部语言模型,管线复杂、错误会逐级累积——这就是端到端模型(CTC、RNN-T、Attention/Transformer)登场的动机。
RNN-T:为流式识别而生的 CTC 升级版
Section titled “RNN-T:为流式识别而生的 CTC 升级版”RNN-T(RNN Transducer,循环神经网络转导器)在 CTC 基础上增加了一个 prediction network(预测网络)。CTC 只看当前声学帧就决定输出什么,而 RNN-T 同时看”当前声学特征 + 已经输出的历史文字”,因此能避免输出前后矛盾的文本。
三个组件分工明确:
- Encoder(编码器):对音频做声学编码,类似于 CTC 的声学模型部分。
- Prediction Network(预测网络):对”已经输出的文本历史”建模,相当于内置了一个语言模型——这是 CTC 所没有的。
- Joint Network(联合网络):把声学向量和文本向量融合(通常做简单的相加 + 非线性),再投影到词表分布。
RNN-T 的关键优势是流式友好:模型每收到一段音频帧就可以增量地输出新字符,而不需要等到整段音频结束——这正是实时字幕、语音助手这类延迟敏感场景所需要的。这也是为什么 Google Pixel 的”实时字幕”、Android 的 Gboard 语音输入都采用 RNN-T 架构。相比之下,Whisper 用的 seq2seq + attention 通常需要看完整段音频才能给出结果,更适合离线场景。
Conformer:局部 + 全局建模的黄金组合
Section titled “Conformer:局部 + 全局建模的黄金组合”Conformer(Convolution-augmented Transformer,2020 年 Google 提出)是目前工业级 ASR 最主流的编码器架构。它结合了两种互补的能力:Transformer 的 self-attention 擅长建模长距离全局依赖(比如一个长句开头和结尾的呼应),CNN 的卷积层擅长捕捉局部模式(比如一个爆破音在几帧内的能量突变)。Conformer block 的结构是 FFN → Multi-Head Self-Attention → Convolution → FFN,相当于 Macaron-Net 风格的”夹心三明治”。
后来 NVIDIA 在 Canary-1B / Parakeet TDT 中采用的 FastConformer 进一步把卷积做成了 8 倍下采样的”因子化卷积”——前几层快速缩减序列长度(从 100 帧/秒 降到约 12.5 帧/秒),让后续 attention 层的计算量下降 8 倍,是工业部署的关键优化。
用 Whisper 做语音识别
Section titled “用 Whisper 做语音识别”import torch # 导入 PyTorchfrom transformers import pipeline
# 加载 Whisper 预训练模型(中文识别效果优秀)asr = pipeline("automatic-speech-recognition", model="openai/whisper-small")
# 传入音频文件路径(支持 wav/mp3,采样率自动重采样到 16kHz)result = asr("example.wav", generate_kwargs={"language": "chinese"})print("识别结果:", result["text"])
# 也可传入 numpy 数组(配合 librosa 加载任意音频)# y, sr = librosa.load("audio.wav", sr=16000)# result = asr({"raw": y, "sampling_rate": sr})💡 Whisper 模型下载后即可离线运行。
whisper-small约 5GB,追求效果可换whisper-large-v3,追求速度可用whisper-tiny。如果需要同时跑多个文件,可用 batched 推理库(如faster-whisper),在 GPU 上可提速 4-8 倍。
Whisper 完整流程:音频加载 → 特征提取 → 识别
Section titled “Whisper 完整流程:音频加载 → 特征提取 → 识别”# pip install transformers librosa torchimport numpy as npimport librosafrom transformers import pipeline
# 第一步:加载音频并统一采样率(Whisper 期望 16kHz 单声道)audio_path = "example.wav"y, sr = librosa.load(audio_path, sr=16000) # 自动重采样 + 混为单声道print(f"音频时长: {len(y) / sr:.1f} 秒")
# 第二步:提取声学特征(Mel 频谱是 Whisper 内部的模型输入,这里展示中间产物)mel = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=80, n_fft=400, hop_length=160)mel_db = librosa.power_to_db(mel, ref=np.max) # 转为分贝刻度print(f"Mel 频谱形状: {mel_db.shape}") # (80 个 Mel 频带, 时间帧数)
# 第三步:加载 Whisper 进行识别(内部流程:对数 Mel → Encoder → Decoder)asr = pipeline("automatic-speech-recognition", model="openai/whisper-small")result = asr({"raw": y, "sampling_rate": sr}, generate_kwargs={"language": "chinese"})print("识别结果:", result["text"])用 CER / WER 评估识别效果
Section titled “用 CER / WER 评估识别效果”# pip install jiwer — 语音识别标准评估库from jiwer import wer, cer
# 人工转写(gold 标准文本)与模型识别输出reference = "今天天气很好 我们出去散步"hypothesis = "今天天气很好 我们出去散步"
# 中文没有空格分词,直接按字符计算 CER(Character Error Rate,字符错误率)char_err = cer(reference, hypothesis)print(f"字符错误率 CER: {char_err * 100:.2f}%") # 0% 表示完全正确
# 英文场景则用整句按词计算 WER(Word Error Rate,词错率)# err = wer("the weather is nice today", "the weather is good today")💡 CER 与 WER 的选择:本质上都是编辑距离(Levenshtein distance)除以参考长度,区别只是”粒度”。
- WER(词错率)适合英文等用空格分词的语言:
"the cat sat"拆成 3 个词来比对,替换/删除/插入都以”词”为单位计数。优点是直观(一个错词 ≈ 一个口语错误),缺点是英文中错一个标点或一个功能词(“a/the”)也算一个错。- CER(字符错率)适合中文/日文等无空格分隔符的语言:直接按汉字比较,避免了”该用什么分词器”的争议,颗粒度也更细。业界报告中文 ASR 时普遍用 CER。
两者数值上不可直接换算——同样一句话 CER 通常显著低于 WER(因为错一个字只是错一个字,而错一个英文词可能被算作整个词都错)。测试集应覆盖多种口音、噪声和语速,单独一句话不能代表模型真实水平。
2024-2026 最新进展
Section titled “2024-2026 最新进展”Whisper 之后,ASR 领域进入了”专业化分工 + 语音原生大模型”两条路线并行的阶段。
路线一:更快、更准、更轻的专用 ASR
Section titled “路线一:更快、更准、更轻的专用 ASR”大规模通用模型(如 Whisper large-v3)虽强,但部署成本高。社区与工业界围绕”同等质量下更快更省”做了大量优化:
- Whisper large-v3-turbo(2024):OpenAI 在原 large-v3 基础上做了知识蒸馏(distillation),把 decoder 层数从 32 减到 4,推理速度提升约 8 倍,质量在多数任务上接近原版。这是目前”质量/速度”性价比最高的开源 Whisper 变体之一,适合 GPU 资源有限的实时场景。
- Distil-Whisper:HuggingFace 社区的蒸馏项目,将 Whisper decoder 压缩到原来的 1/2 到 1/3 大小,推理快约 6 倍,专门针对英语长音频转写优化。
- WhisperX:在 Whisper 之上增加了词级时间戳(word-level timestamp)对齐和说话人分离(speaker diarization),使得输出可以直接用于字幕制作、会议纪要——这两项功能是原生 Whisper 的弱项(Whisper 只给段级时间戳,不做说话人识别)。
- Moonshine(2024, Useful Sensors):专为边缘设备设计的超轻量 ASR,模型仅数十 MB 级别,可在树莓派、微控制器等算力极弱的设备上实时运行,目标是用”够用就行”的质量换取可在端侧离线部署的能力。
- NVIDIA Canary-1B / Parakeet TDT(2024):基于 FastConformer 编码器的工业级模型。Canary-1B 面向多语言(支持英/德/法/西 4 语种 ASR + 互译),Parakeet TDT 面向英语高精度转写。在 HuggingFace Open ASR Leaderboard 上多项指标超越 Whisper large-v3,并且因为用了 8 倍下采样的 FastConformer,推理速度也快得多——是目前工业部署的首选之一。
- Conformer / 分支预测器 RNN-T 的进一步演化:Parakeet TDT 的全称是”Token-and-Duration Transducer”,它在 RNN-T 框架下用一种 TDT(Token and Duration Transducer)解码机制——模型不仅预测下一个 token,还预测每个 token 会持续多少帧——进一步提升了流式场景下的延迟/质量权衡。
路线二:语音原生大模型
Section titled “路线二:语音原生大模型”另一条路线是直接把语音”喂”给大语言模型,让 LLM 既理解语音又输出文字(甚至做翻译、总结、情感分析):
- Voxtral(Meta 2025):基于 Mistral 大语言模型架构,把语音编码后直接作为 LLM 的输入 token,输出可以是转录文本,也可以是翻译、摘要、问答。一个模型同时承担 ASR + 语音翻译 + 语音问答,体现了”统一多模态大模型”取代专用 ASR 管线的趋势。
- 更广义地,2024-2025 年出现了 GPT-4o、Gemini 等原生多模态模型,它们内部并不一定走传统 ASR 路线,而是把语音视为一种与图像/文本并列的输入模态,由统一的 Transformer 直接处理。
这两条路线并不互斥:专用 ASR 在延迟、成本、可控性上仍有不可替代的优势(实时字幕、呼叫中心转写),而语音原生大模型在多任务理解和零样本能力上走得更远。未来的系统更可能是”专用 ASR 做前端 + LLM 做后端理解”的混合形态。
- 实时字幕:YouTube、B 站、Zoom 会议自动生成字幕,结合说话人分离可区分不同发言者(WhisperX 这类工具让”字幕 + 说话人标签 + 词级对齐”成为标配)。
- 会议记录:飞书妙记、Otter.ai 自动转写并总结会议要点,会后一键生成纪要;词级时间戳让用户可以跳到任意发言点回放。
- 语音助手:Siri、小爱同学、Google Assistant——“打电话给妈妈”首先经 ASR 转文本,再进入意图理解。流式 ASR(如 RNN-T)让助手能在你说完后立刻响应。
- 语音搜索:淘宝、微信搜索框旁的麦克风图标,让你不用打字就能搜索。
- 听写输入法:讯飞输入法、苹果听写,用 ASR 实现连续语音转文字,速度超过手打;端侧轻量模型(如 Moonshine)让听写可以完全离线运行,保护隐私。
- 呼叫中心质检:把客户来电实时转写,配合 NLP 做情绪检测、关键词检索,是客服质量监控的核心管线。
典型类库与工具
Section titled “典型类库与工具”| 类库 | 语言 | 说明 |
|---|---|---|
| OpenAI Whisper | Python | 开源多语言 ASR 模型,支持 99 种语言识别和翻译 |
| faster-whisper | Python | 基于 CTranslate2 的 Whisper 高速推理引擎,GPU 上可快 4-8 倍 |
| WhisperX | Python | 增加词级时间戳对齐与说话人分离的 Whisper 增强管线 |
| NVIDIA NeMo | Python | Canary-1B / Parakeet TDT / FastConformer 的官方框架,工业部署首选 |
| HuggingFace Transformers | Python | 提供 Wav2Vec2、Whisper 等预训练 ASR 模型,pipeline 接口极简 |
| ESPnet | Python | 端到端语音处理工具包,支持 Conformer、RNN-T 等前沿 ASR 架构 |
| Kaldi | C++/Shell | 经典 HMM 时代工业级 ASR 工具包,至今仍是许多系统的基座 |
| torchaudio | Python | PyTorch 官方音频库,提供 ASR 模型(如 Emformer)和数据增强 |
| SpeechRecognition | Python | 轻量库,统一封装 Google/Bing/IBM 等云端 ASR API |
| 术语 | 英文 | 解释 |
|---|---|---|
| 连接时序分类 | CTC (Connectionist Temporal Classification) | 解决输入输出长度不对齐的损失函数,通过 blank 符号和折叠规则实现自动对齐,无需帧级标注 |
| RNN-T | RNN Transducer | CTC 的升级版,由 Encoder + Prediction Network + Joint Network 组成,结合声学特征与历史文本,适合流式识别 |
| 预测网络 | Prediction Network | RNN-T 中对已输出文本历史建模的子网络,相当于内置语言模型 |
| 联合网络 | Joint Network | RNN-T 中融合声学向量与文本向量的组件,输出下一字符分布 |
| 音素 | Phoneme | 语言中最小的发音单位,英语约 40 个、汉语拼音约 60 个声韵母组合 |
| 声学模型 | Acoustic Model | 把音频特征映射到音素/字符概率的模型,传统 ASR 的核心组件 |
| GMM | Gaussian Mixture Model | 用一组高斯分布拟合音素特征分布的经典统计模型,HMM 时代的主力 |
| 语言模型重评分 | LM Rescoring | 用外部语言模型对 ASR 候选结果重新打分,提升语言流畅度 |
| 解码 | Decoding | 从模型输出概率中搜索最优文本的过程,常用 beam search |
| 词错率 | WER (Word Error Rate) | 英文 ASR 标准评估指标,按词计算编辑距离除以参考词数 |
| 字符错率 | CER (Character Error Rate) | 中文/日文等无空格语言的常用指标,按字符计算编辑距离 |
| 说话人分离 | Speaker Diarization | 判断”谁在什么时间说了什么”,会议转写的关键前置步骤 |
| 词级时间戳 | Word-level Timestamp | 为每个输出词标注精确起止时间,字幕制作和回放定位的基础 |
| 热词 | Hotword | 为提升特定词(如人名、产品名)识别率而配置的加权词表 |
| FastConformer | FastConformer | Conformer 的工业优化版,用因子化卷积做 8 倍下采样以大幅降低计算量 |
- CTC 损失函数:Graves, A., Fernández, S., Gomez, F., & Schmidhuber, J. (2006). Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurrent Neural Networks. ICML. —— 端到端 ASR 的奠基性工作。
- RNN-T:Graves, A. (2012). Sequence Transduction with Recurrent Neural Networks. ICML Representation Learning Workshop. —— RNN Transducer 的原始论文,首次提出 prediction network + joint network 的架构。
- DNN-HMM 混合系统:Dahl, G. et al. (2012). Context-Dependent Pre-Trained Deep Neural Networks for Large-Vocabulary Speech Recognition. IEEE Trans. on Audio, Speech, and Language Processing. —— 微软的工作引爆了语音行业的深度学习革命。
- Whisper:Radford, A. et al. (2022). Robust Speech Recognition via Large-Scale Weak Supervision. OpenAI 技术报告。 —— 68 万小时多语言弱监督预训练,证明了大规模数据的威力。
- Wav2Vec2:Baevski, A. et al. (2020). wav2vec 2.0: A Framework for Self-Supervised Learning of Speech Representations. NeurIPS. —— 自监督语音预学习的里程碑。
- Conformer:Gulati, A. et al. (2020). Conformer: Convolution-augmented Transformer for Speech Recognition. Interspeech. —— 结合 CNN 局部建模与 Transformer 全局建模的主流 ASR 架构。
- Whisper large-v3-turbo:OpenAI (2024). Whisper large-v3-turbo 模型卡。 —— 8 倍加速、质量接近 large-v3 的蒸馏版本。
- NVIDIA Canary-1B:Mdhaffar, A. et al. (2024). Canary-1B: A Multilingual Model for Automatic Speech Recognition and Translation. NVIDIA 技术报告。 —— FastConformer 工业级多语言 ASR。
- Moonshine:Useful Sensors (2024). Moonshine: Fast and Accurate On-device Speech Recognition. —— 面向边缘设备的超轻量 ASR。
- Voxtral:Maiti, S. et al. (2025). Voxtral: Efficient Language Model for Speech Understanding. Meta AI. —— 基于大语言模型架构的多语言语音理解模型。
- 延伸路线:ASR 的”对口”任务是 语音合成 TTS,两者构成语音交互闭环。