语音识别原理:从声波到文字

语音转文字把连续的声波转换成离散的词,而且按照一套固定的步骤完成。麦克风信号被采样成数字,数字被转换成声谱图,神经网络把声谱图映射成可能的文本,最后由格式化步骤让文本变得可读。每一个现代系统——手机键盘、会议记录工具、听写应用——都遵循这条流水线的某个版本。

对于“它怎么知道我说了什么”这个问题,简短的回答是:它并不知道,它是在估计。模型根据训练时见过的内容,为收到的声音输出概率最高的文本。仅这一点就能解释你在实际使用中注意到的大部分现象:为什么常见短语总能识别得很完美,为什么同事的姓氏却不行,为什么一段嘈杂的停顿会变成一句谁都没说过的话。

本文逐步拆解这条流水线,不涉及数学,也不涉及任何特定厂商的内部实现。

第 1 步:麦克风如何把声音变成数字?

声音是一种压力波。麦克风把它转换成电压,模数转换器(ADC)每秒对这个电压测量成千上万次。每一次测量就是一个采样点。

音乐通常以每秒 44,100 或 48,000 个采样点录制。语音识别很少需要这么多:承载语音的频率大多在 8 kHz 以下,所以大多数识别系统以每秒 16,000 个采样点(16 kHz)工作。例如 Whisper 的论文就写明,所有音频在进入后续处理之前都会先重采样到 16,000 Hz。电话音频常常只有 8 kHz,这也是电话录音更难转写的原因之一——有一部分语音信号从一开始就没有被采集到。

在这个阶段,没有词、没有字母,也没有静音检测,只有一长串数字:一分钟 16 kHz 的音频就是 960,000 个数字。

第 2 步:什么是声谱图?为什么不直接用原始波形?

原始波形告诉我们每个瞬间信号有多响,但区分不同语音的信息藏在频率里。“s”是一阵高频噪声;像“a”这样的元音则在较低频段有强而稳定的能量带。

所以识别系统会把音频切成相互重叠的短窗口——通常每个约 25 毫秒,每次平移 10 毫秒——并测量每个窗口在各个频率上的能量。把这些测量结果并排排列,就得到了声谱图:一条轴是时间,另一条轴是频率,亮度表示响度。

大多数系统使用对数梅尔声谱图(log-Mel spectrogram)。“梅尔”指的是频带按照人耳感知音高的方式排布——低频处密,高频处疏。“对数”则像耳朵一样压缩响度。Whisper 的初始模型在 25 ms 窗口、10 ms 步长上使用 80 个梅尔通道;large-v3 模型改为 128 个。无论哪种,一秒音频都会变成大约 100 列数字,比 16,000 个原始采样点紧凑得多,信息量也大得多。

第 3 步:模型如何把声音映射成词?

过去十五年里,变化最大的正是这一环节。

经典流水线:声学模型、发音词典、语言模型

几十年来,识别系统都由彼此独立的部件组成。声学模型估计每一帧中可能出现哪些语音(音素),发音词典列出每个词由哪些音素构成,语言模型则为词序列的合理程度打分。隐马尔可夫模型把这一切在时间上串联起来。2012 年前后,深度神经网络在这条流水线中取代了原有的高斯混合模型,显著降低了错误率——这个转折点通常以 Hinton 与来自四个研究团队的同事联合发表的论文为标志。

端到端模型

现代系统大多训练一个神经网络,直接从声谱图输出文本。主流设计有三种:

方法 如何对齐声音与文本 典型优势
CTC(Graves 等,2006) 每一帧输出一个标签或“空白”,再合并重复项 快速、简单,适合流式识别
Transducer,RNN-T(Graves,2012) 每一步决定是输出一个 token 还是读取下一帧 低延迟的流式识别
基于注意力的编码器-解码器 编码器读取整个片段,解码器逐个 token 写出文本 对完整语句准确率高

Whisper 属于第三种:一个 Transformer 编码器-解码器,每次读取 30 秒的片段并写出文本。流式转写——你还在说话,文字就已经出现——更倾向于前两种,因为它们能在句子结束之前就给出输出。

输出通常不是完整的词,而是子词 token:像“trans”“cript”“ion”这样的片段。这让模型能拼出从未整体见过的词,也正因如此,一个新的产品名可能会被识别成一串看似合理、实则错误的片段组合。

语言知识从哪里来

端到端模型没有独立的词典,但它仍然对哪些词序列更可能出现有很强的判断——这是从与训练音频配对的文本中学到的。规模在这里很重要:Whisper 的初始模型用 680,000 小时的标注音频训练,其中 117,000 小时覆盖英语之外的 96 种语言;large-v3 使用了 100 万小时的弱标注音频,外加 400 万小时的伪标注音频。训练数据中少见的语言和口音识别得更差,原因和少见的人名一样。

第 4 步:解码——选出最终文本

神经网络并不只输出一个答案。在每一步,它都会为每一个可能的 token 给出一个概率。解码就是寻找整体最优序列的过程:贪心解码每次取概率最高的 token,而束搜索(beam search)会同时保留多个候选句子,最后选出最好的完整句子。

词汇提示也是在这里起作用。很多引擎接受预期术语列表或一段简短的文本提示;例如 OpenAI 的 Whisper 提示指南中,就展示了一个列出产品名和公司名、用来引导拼写的提示。提示能把概率推向这些词,但救不了模型确实听不清的音频。

第 5 步:标点与格式化

原始识别输出往往看起来像“so the meeting is at three thirty on march fifth”。把它变成“So the meeting is at 3:30 on March 5th.”是另一项独立的工作:

有些模型(包括 Whisper)因为训练用的转写文本本身带标点,学会了直接输出带标点的文本。另一些则在识别之后再运行一个专门的模型。无论哪种,格式错误和识别错误都是两类不同的错误:词可能全对,文本却依然难以阅读。

语音转文字为什么会出错?

了解了流水线,典型错误就变得可以预测:

  1. 少见词输给常见词。 一个姓氏、一个内部项目代号或一个全新的工具,听起来像某个更常见的东西,而更常见的那个会胜出。直接的解决办法是词汇提示。
  2. 丢失的信号无法恢复。 房间另一头的笔记本麦克风、8 kHz 的电话音频,或者两个人同时说话,都会在模型看到之前就抹掉信息。
  3. 生成式模型可能产生幻觉。 逐个 token 写文本的解码器,有时会在静音或噪声期间写出通顺的句子。2024 年 FAccT 论文 Careless Whisper 在其检查的 Whisper 转写中,约有 1% 发现了完全虚构的短语或句子。识别前去除静音可以减少这种情况。
  4. 谁在说话是另一个问题。 语音识别产出的是词;把词分配给说话人属于说话人分离(speaker diarization),那是另一个模型,有它自己的错误。

准确率通常用词错误率(WER)来报告:替换、删除和插入的总数,除以实际说出的词数。它适合在同一段音频上比较不同系统,但不同厂商的数字无法直接比较:测试录音不同,决定“3:30”和“three thirty”是否算同一内容的规范化规则也不同。

选择工具时这意味着什么

就日常使用而言,从这条流水线可以得出几条实用结论:

在 Speak-Y 中,听写支持 67+ 种语言并自动加标点;会议模式在本地录制通话,不需要机器人加入,按说话人转写,并默认把转写保存在你的设备上——无机器人录制的利弊,在如何录制会议而不让机器人加入一文中有详细讨论。有了转写之后,下一个问题是怎么用它们:本地 MCP 服务器能让 Claude 或 Cursor 等 AI 助手搜索并读取这些转写,其原理在什么是 MCP 服务器一文中从头讲起。

FAQ

用一段话概括,语音转文字是怎么工作的?

麦克风把空气压力的变化转换成一串数字,语音识别通常用每秒 16,000 个采样点。软件把信号切成相互重叠的短片段,转换成声谱图——一张显示每个时刻哪些频率更响的图。神经网络读取声谱图,预测最可能的词或子词序列,最后一步再加上标点、大小写和数字格式。

什么是声谱图?语音识别为什么要用它?

声谱图展示声音的能量随时间在各个频率上的分布。语音识别通常使用对数梅尔声谱图,它按照人耳听觉的方式来排布频率。例如 OpenAI 的 Whisper 以 25 毫秒为窗口、10 毫秒为步长,计算 80 通道的对数梅尔声谱图,这样每秒音频会给模型提供 100 帧特征。

语音转文字为什么总把人名和专业术语识别错?

模型会为听到的声音挑选概率最高的文本,而概率来自训练数据。一个少见的姓氏或新的产品名在训练数据中很少出现,甚至从未出现,于是发音相近的常见词就会胜出。词汇提示有帮助:很多引擎接受预期术语列表或一段简短的文本提示,让输出偏向这些写法。

语音转文字会凭空编造没说过的话吗?

会。逐个 token 生成文本的模型,可能在静音或噪声期间写出通顺的句子。2024 年 FAccT 会议上的研究 Careless Whisper 发现,其样本中约 1% 的 Whisper 转写包含完全虚构的短语或句子。识别前去除静音、对重要转写进行复核,可以降低这种风险。

什么是词错误率(WER)?

词错误率(word error rate,WER)是衡量准确率的标准指标:替换、删除和插入的总数,除以参考转写中的词数。数值越低越好;如果系统插入了大量多余的词,它甚至可能超过 100%。只有在使用相同测试音频和相同文本规范化规则时,不同的 WER 数字才具有可比性。