语音识别是怎么工作的:从声波到文字的四个环节
语音识别(ASR)是把一段音频信号转换成对应文字的技术,它在工程上不是单个模型从头干到尾,而是由音频前处理、特征提取、声学建模与解码、文本后处理四个环节接力完成的。
理解这四环节的意义很实际:当转写结果不对劲时,你能判断该去修哪一段。同样是”识别不准”,专有名词老是写错和整句话前几个字丢失,根本不是一个问题,修的地方也完全不同。
为什么不能把声音直接丢给模型
一段 16 kHz 采样的音频,每秒有 16000 个采样点。一分钟就是近百万个数字,而它对应的文字可能只有两百来个字。
这中间的信息密度差了三个数量级。更麻烦的是,同一句话由不同的人在不同的环境里说出来,波形长得完全不一样——音高不同、语速不同、背景噪声不同,但它们对应同一串文字。
所以整条链路真正在做的事情是:一层层地把与文字无关的信息剥掉,只留下决定”说了什么”的那部分。四个环节就是这个剥离过程的四个阶段。
第一环:音频前处理
这一环负责把五花八门的输入统一成模型认识的样子,通常包含三件事:
- 重采样。模型在什么采样率上训练,就得喂什么采样率。宽带语音的事实标准是 16 kHz;电话线路是 8 kHz 的窄带,高频信息本来就没被采集进来,这是信道决定的上限,后期再怎么处理也补不回来。
- 单声道化。多数识别模型只吃单声道,立体声要先混下来。
- 增益归一与静音处理。让音量落在合理范围,避免过小的信号被后续环节当成噪声。
要不要在这里做降噪,是个需要单独判断的问题。AEC(回声消除)必须放在最前面,因为它需要拿到”设备正在播放什么”这个参考信号,离开这个位置就无从对消。但降噪不一定是净收益——现代识别模型大多在带噪数据上训练过,有一定鲁棒性,而降噪算法用力过猛会损伤语音本身的谐波结构,反而让识别变差。这件事的详细取舍见降噪和回声消除,该放在 ASR 前面还是交给模型。
第二环:特征提取
这一环把波形变成模型真正吃的东西,标准做法是梅尔滤波器组特征(fbank)。
流程是:把音频按 25 毫秒左右的帧长切开、每次前进 10 毫秒(帧之间有重叠,避免边界处信息断裂),每帧做短时傅里叶变换得到频谱,再送进一组按梅尔刻度排布的滤波器,取对数。
两个”为什么”值得说清楚:
为什么要分帧——语音整体是非平稳信号,但在二三十毫秒的短窗内可以近似看作平稳,这样才能用傅里叶变换那套工具。
为什么用梅尔刻度——人耳对频率的分辨率不是线性的,低频听得细、高频听得粗。梅尔刻度模拟了这个特性,把频率轴按人的感知重新划分,低频区滤波器密、高频区滤波器疏。识别的目标是还原”人听到了什么”,所以按人耳的分辨率来分配精度,是合理的资源分配。
你可能还听过 MFCC,它是在 fbank 之后再做一次离散余弦变换。这一步的作用是让特征维度之间去相关,在 GMM-HMM 那个年代是刚需。到了神经网络时代,网络自己能处理维度间的相关性,多做一次变换反而丢信息,所以现在的主流是直接用 fbank。
第三环:声学建模与解码
这是把特征序列变成文字序列的一环,也是整条链路里最核心的部分。
难点在于对齐:一段特征有几百帧,对应的文字只有几十个字,模型并不知道哪几帧对应哪个字。围绕这个问题,端到端建模有三种主流范式:
- CTC:引入一个特殊的空白符号,允许模型对每一帧都输出点什么,再把重复和空白折叠掉。它假设各个输出之间条件独立,好处是天然适合流式。
- 注意力编码器-解码器(AED):解码时可以看到整段编码结果,精度好,但原生不适合流式——它要看到全部才能开始。
- RNN-T(Transducer):在 CTC 基础上加了预测网络和联合网络,既保留流式能力,又能建模输出之间的依赖,是当前流式识别的主流选择。
与之相对的是传统混合系统:声学模型、发音词典、语言模型三者分别训练,再用解码图串起来。它现在不是主流,但有一个至今仍然管用的优点——加新词只要改词典和语言模型,不用重训声学模型。在专名密集、词表频繁更新的场景,这个特性很有价值。两条路的完整对比见端到端 ASR 和传统混合系统,差别到底在哪。
第四环:文本后处理
模型吐出来的原始文本,离能用还差几步:
- ITN(逆文本规范化):把口语形式转成书面形式,“二零二五年”变成”2025 年”,“百分之三十”变成”30%”。
- 标点恢复:声学模型的输出通常没有标点,要由一个独立模型按序列标注的方式补上。
- 热词纠正:让专有名词更容易被正确识别。这里有个常见的概念混淆——关键词检测(KWS)和热词偏置不是一回事,前者是”听到某个词就触发动作”,后者是”让识别结果更倾向于出现某个词”,两者的模型和用途都不同。
- 时间戳输出:给字幕和跳转定位用。
这一环最容易被低估。很多人抱怨”识别不准”,实际错的是后处理——比如数字读法没转对,或者标点断错了句。
出错时,怎么判断是哪一环
| 症状 | 大概率出在 |
|---|---|
| 整句话开头几个字丢失 | 第一环的 VAD 断句,起始点切晚了 |
| 远场、嘈杂环境下整体崩坏 | 第一环,音频质量或降噪策略 |
| 专有名词、人名、产品名反复写错 | 第四环的热词,或第三环的语言模型 |
| 数字、日期、金额格式不对 | 第四环的 ITN |
| 长音频中间某段整体错乱 | 第一环的长音频切分,切在了语音中间 |
| 通篇没标点或断句离谱 | 第四环的标点恢复 |
| 换个说话人就明显变差 | 第三环,训练数据的口音覆盖 |
这张表的价值在于:先定位到环节,再决定要不要换模型。很多时候换模型解决不了的问题,改一下管道配置就好了。
常见问题
问:这四个环节是必须的吗?有没有一个模型全包的方案?
有,端到端的程度可以更高,比如把标点和 ITN 也交给同一个模型直接输出规范文本。但工业系统里保留分环节的结构仍然普遍,原因是可诊断、可单独优化、可针对业务替换其中一环。
问:流式识别的四个环节有什么不同?
主要差别在第三环和第四环。第三环要选支持流式的建模范式,第四环则面临一个矛盾——标点需要看到后文才能确定,但流式要求立刻输出,常见折中是先给无标点的结果,随后再修订。
问:识别准确率能到多少?
这个问题没法脱离场景回答。安静环境的朗读和嘈杂环境的多人自由交谈,难度天差地别。比起追问一个数字,更实际的做法是用自己的业务数据建测试集,并且知道准确率被高估的几种常见情况。
问:我该从哪一环开始优化?
先做测试集,再按上面那张表定位。没有测试集的优化都是凭感觉,改完也不知道是好了还是坏了。
相关阅读
- WER 怎么算:一个公式说清语音识别的准确率
- VAD 是什么:ASR 前面为什么总要挂个断句器
- 梅尔频谱和 fbank:ASR 的输入为什么不是原始波形
- 语音合成是怎么工作的:从文本到波形的三段流水线
- VAD 到 STT 到 LLM 到 TTS:四个线程、三道队列
本文讲的是语音识别领域的通用原理,不绑定某一个具体实现。 各家系统的环节划分、默认配置与能力边界差异很大,请以你所用系统的官方文档为准。 我们没有对文中提到的任何方案做过性能实测,因此不给准确率、速度一类的数字。