想象你走进一家老字号川菜馆,服务员老王三步并作两步迎上来。你操着老家口音说:“来个鱼香肉丝,多放辣。”老王耳朵一竖,听清了“鱼香肉丝”四个字的音,脑子里立刻浮现出菜单上那道红油发亮的菜;再结合“多放辣”三个字,他在心里默写下“鱼香肉丝(加辣)”。从听到写,整件事不到一秒。 老王厉害在哪?他不光耳朵好使,还懂菜单、懂搭配、懂顾客口音。这恰好对应语音识别系统的两大核心:声学模型负责“听音辨词”,语言模型负责“按语境选词”。老王把你的话变成订单的过程,就是一套完整的语音识别系统架构。 这篇教程将带你拆解这套架构:从声波变成电信号,再到特征、声学模型、语言模型、解码搜索,最后输出文字。每个环节正对应老王点单流程中“听清—辨析—预判—落笔”的一个动作。看完你会发现,再复杂的 AI 系统,底层逻辑也不过是把我们与生俱来的沟通本能拆成了可计算的步骤。
掌握语音识别架构的四大模块(前端、声学模型、语言模型、解码器)及其调优方法,是音频 AI 工程师落地智能客服、字幕生成、语音助手等场景的核心技能。
可视化演示
动态演示语音识别系统架构的核心机制,通过开始/执行/监控/完成四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
语音识别系统架构:ASR系 ASR系统架构概述 声学模型原理与实现 核心机制可视化 语音识别系统架构整体架构与关键组件
ASR基础概念
老王上岗第一天的第一课,不是记菜名,而是练“耳功”。店长让他站在大堂角落,闭眼分辨哪个声音是顾客在点菜,哪个是隔壁桌碰杯,哪个是厨房传出的爆炒声。他得先搞明白什么是“有效说话声”,才有资格谈听懂。这正是语音识别的基础——先把语音识别任务本身定义清楚,再解决信号采集和特征表达的问题。
从技术上讲,语音识别(ASR,Automatic Speech Recognition)的任务可以一句话概括:把输入的语音信号转成对应的文本序列。听起来简单,但机器拿到的原始信号是一长串电压高低起伏的波形,必须经过三个步骤才能变成模型能消化的素材:采样(把连续波形按固定间隔取值)、量化(把振幅离散成整数刻度)、特征提取(从一小段波形中提炼出最能代表发音特点的向量)。
其中最经典的特征是 MFCC(梅尔频率倒谱系数)。它模拟人耳对频率的非线性感知,把每一帧语音(通常 25ms)从时域变换到频域,再压缩成 13 到 40 维的向量。之所以不做全波形匹配,是因为人耳真正关心的是“哪些频率分量强”,而非每个采样点的精确值。
老王听完第一课笑了:“原来我不是靠耳朵记住每个字的音,而是先在大脑里把声音拆成高低频零件,再拼出意义。”ASR 的第一步,正是这种“先拆解、再理解”的思路——只有拿到干净、有区分度的特征,后面的模型才有好材料可用。
- 输入序列 $x[n]$代表第 $n$ 个采样点的声音振幅,$n = 0, 1, \ldots, N-1$,是一帧语音的数字表示。
- 频率索引 $k$表示要考察的第 $k$ 个频率分量,$k$ 越大对应的频率越高。
- 旋转因子 $e^{-j 2\pi kn / N}$这是一个在复平面上的旋转操作,用于“试探”当前频率是否存在于信号中。
- 求和累加把每个采样点乘以旋转因子后全部加起来,匹配的频率成分会被放大,不匹配的会相互抵消。
- 输出 $X[k]$得到第 $k$ 个频率分量的强度,拼起来就是这一帧语音的频谱。
系统架构总览
老王点单的真实流程是这样的:先竖起耳朵捕捉声波(前端),再分辨出“鱼、香、肉、丝”几个音(声学),然后根据菜单常识把音组合成“鱼香肉丝”这道菜(语言),最后动笔写在订单上(解码)。一个完整的 ASR 系统就是把这四个动作串成一条流水线。
整个架构分为四层:前端信号处理、声学模型、语言模型和解码器。前端负责把原始波形切分成帧并提取特征;声学模型负责回答“这段特征像哪个音”;语言模型负责回答“这些词按什么顺序排列更像人话”;解码器则拿着前两者给出的分数,搜索出一条最优的文本路径。
这套架构可以用贝叶斯公式优雅地统一起来。设观测到的语音特征序列为 $O$,我们想找的文本为 $W$,语音识别的目标就是在所有可能的 $W$ 中,找出使得“声学匹配度 $\times$ 语言通顺度”最大的那一句:
四层架构各司其职,缺一不可。前端听得清,声学辨得准,语言猜得对,解码选得优——就像老王点单,耳朵、大脑、菜单记忆和手,任何一环掉链子,订单都会出错。理解了这张总览图,后面每一节都是往这个框架里填充细节。
- 观测序列 $O$麦克风采集并经过特征提取后的声学特征序列。
- 候选文本 $W$一个可能被说出的词序列,比如“鱼香肉丝”或“鱼香肉丝加辣”。
- 声学模型 $P(O \mid W)$给定文本 $W$ 时,产生观测 $O$ 的概率。它衡量发音与特征的匹配度。
- 语言模型 $P(W)$文本 $W$ 本身出现的先验概率。它衡量句子的通顺程度。
- 取最大值 $\arg\max_{W}$遍历所有候选 $W$,选择“声学匹配 $\times$ 语言通顺”乘积最大的那一项作为最终结果。
声学模型设计
老王从“听清”到“听懂”,靠的是几个月里反复听各种口音的顾客,并在记错后不断被纠正。他逐渐学会:四川人说“鱼香肉丝”时“肉”字带点卷舌,东北人可能说得更直;但这些差异都能归到几个关键的发音状态上。声学模型干的就是这件事——把连续的语音流对应到有限的发音单元上。
声学模型的核心任务是计算 $P(O|W)$,即给定文本时产生当前声学特征的概率。它通常对音素级别的单元建模。经典方案是 HMM(隐马尔可夫模型)+ 神经网络 的组合:HMM 负责描述音素随时间的转移过程,神经网络负责计算每个状态产生当前帧特征的概率。
HMM 假设每个音素可以拆成几个隐状态(比如“起点—中间—收尾”),状态之间按转移概率跳转,每个状态按发射概率产生观测。给定一段观测 $O_{1:T}$,它的总概率是所有可能状态序列概率之和:
在实际训练中,神经网络(DNN/Transformer)负责替代传统的发射概率计算,从特征中直接预测每个状态的得分;再配合 CTC 或注意力机制解决“语音帧与音素如何对齐”的难题。老王的“辨音功力”就是这些模型参数——听过的口音越多,参数拟合得越好,遇到新顾客时就越从容。
- 隐状态序列 $q_{1T}$:$q_t$ 表示第 $t$ 帧所处的音素状态,它是隐藏的,我们看不到,只能通过观测推测。
- 初始概率 $\pi_{q_1}$整个序列从状态 $q_1$ 开始的概率。
- 发射概率 $b_{q_t}(O_t)$状态 $q_t$ 产生观测 $O_t$ 的概率,由神经网络打分。
- 转移概率 $a_{q_{t-1} q_t}$从状态 $q_{t-1}$ 跳到状态 $q_t$ 的转移概率,刻画了发音随时间推进的节奏。
- 外层求和对所有可能的状态路径求和,得到整段观测的总概率。
语言模型机制
老王之所以能在嘈杂的大堂里快速下单,很大程度靠的是对菜单的熟悉:顾客刚说出“鱼香”两个字,他心里已经预判后面多半是“肉丝”或“茄子”。这种“对搭配的预判”,就是语言模型在做的事。
语言模型计算的是 $P(W)$,即一段文本本身出现的先验概率。最经典的实现是 N-gram 模型:它基于马尔可夫假设,认为当前词只与前面 $n-1$ 个词有关。比如二元模型(bigram)只看前一个词,三元模型(trigram)看前两个词。整个句子的概率就是每个词条件概率的连乘:
除了统计 N-gram,现代系统还使用神经网络语言模型,它用向量表示词并按上下文动态预测,泛化能力更强。工程上还需要设计合理的词汇表——词表太小会频繁遇到未登录词,太大则模型臃肿;同时用平滑技术(如 Kneser-Ney 平滑)给没有出现过的组合留一个很小的概率,防止“零概率”直接杀死整条路径。
老王的“菜单知识”让他在听不清时也能猜对搭配:声音的“鱼香”够了,后面是“肉丝”还是“肉丝儿”,语言模型帮他补齐。这也是为什么在真实系统中,语言模型常常能弥补声学模型的不足。
- 词序列 $w_1, \ldots, w_m$一句话包含的 $m$ 个词。
- 条件概率 $P(w_i \mid w_{i-1}, \ldots, w_{i-n+1})$在前 $n-1$ 个词出现的条件下,当前词为 $w_i$ 的概率。
- 马尔可夫假设只依赖最近的 $n-1$ 个词,而不是整句历史。
- 连乘把所有词的条件概率相乘,得到整句概率。
解码搜索策略
老王记性有限,面对一长串点单,他不可能把每一种可能的菜品组合都在脑中过一遍。他的策略是:手上只同时端着两三份“候选订单”,每听到一个新词就更新一遍,保留最像的那几份,直到最后确定一份。这就是解码器的工作方式。
解码器要解决的问题是:声学模型和语言模型给出了无数条可能的词路径,如何高效地找出得分最高的一条?Viterbi 算法是经典解法,它用动态规划逐帧递推,在状态空间中保留到达每个状态的最优路径。递推公式如下:
Viterbi 保证找到全局最优,但当词表很大时计算量惊人。Beam 搜索 则是一种折中:每一步只保留分数最高的前 $K$ 条假设($K$ 称为波束宽度),大大压缩搜索空间。更精细的系统还会构建词图(lattice),把多条候选路径保存成图结构,供后续重打分再挑选一次。另外,热词注入可以在解码时给指定词临时加权重,比如把“鱼香肉丝”设为热词,就能显著降低它被识别成“鱼香肉四”的概率。
Beam 宽度就像老王手上端盘子的数量:端得太少容易漏掉正确答案,端得太多脑子转不过来。实际工程中,$K$ 取值通常根据算力和准确率目标在 4 到 16 之间权衡。
- $\delta_t(j)$到第 $t$ 帧为止、处于状态 $j$ 的累积最优分数。
- 取最大值 $\max_i$对上一帧所有状态 $i$ 计算转移后的分数,取最大者。
- 转移概率 $a_{ij}$从状态 $i$ 转到状态 $j$ 的代价。
- 发射概率 $b_j(O_t)$当前状态 $j$ 产生观测 $O_t$ 的分数。
- 回溯最优路径从最后一帧的最大分数状态开始,沿记录的反向指针回溯,得到完整状态序列。
工程实现要点
饭店里从来不是安静的环境:后厨爆炒声、小孩哭闹、隔壁桌高声谈笑。老王必须学会判断什么时候该听、什么时候不该听,还要懂得在嘈杂中抓住顾客的说话内容。这些“实战经验”,对应到 ASR 工程中就是端点检测、噪声鲁棒性和流式识别等关键问题。
VAD(语音活动检测) 是工程第一道关卡,它负责判断一段信号里哪些是有效语音、哪些是静音或噪声。常用做法是计算信号的信噪比(SNR),当语音能量远大于噪声能量时判定为“有人说话”:
工程上还有几件大事:流式识别要求模型只能看历史帧,必须使用因果卷积或单向 Transformer,并采用分块解码在说话同时逐步输出文字;远场噪声则需要麦克风阵列波束成形和降噪增强;资源部署上,云端追求高精度可上大模型,端侧就要量化、剪枝和控制内存占用。老王的“实战经验”靠的是一整套耳塞、顺风耳和后厨广播系统——工程实现从来不只是模型本身,而是让模型在真实环境中稳定发挥的整套配套。
- $P_{\text{signal}}$有效语音信号的功率,通常通过短时能量或频谱能量估算。
- $P_{\text{noise}}$环境噪声的功率,常用无声段的统计均值来估计。
- 对数运算 $10\log_{10}$把巨大的功率比值压缩成线性可读的分贝值。
- 阈值判断设置 $\text{SNR} > \theta$ 时判定为语音段,否则判定为噪声段。
性能评估调优
店长每个月会给老王算一笔账:把老王写下的订单与顾客实际说的内容逐字比对,统计写错、漏写、多写的菜名数,再除以总菜名数,得到一个“错菜率”。这个数值越低,说明老王这一个月表现越好。语音识别领域也有这样一个金标准——WER(词错率)。
除了 WER,工程上还要看延迟指标:RTF(实时率)表示处理 1 秒音频所需的时间,小于 1 才能实时;首字延迟则决定语音助手的“响应快不快”。数据增强(加噪、变速、混响)能显著提升模型在真实环境的鲁棒性。最关键的还有领域适配——把通用模型用目标场景(医疗、法律、餐厅)的数据微调,往往比盲目堆参数更见效。
调优不是一味“加大锅”,而是按场景匹配数据、模型与资源。老王在老字号干得风生水起,是因为他在这个店的菜单、顾客口音和后厨环境下反复打磨过。ASR 系统想要在真实业务中出彩,同样需要这样一轮轮的度量、发现短板、定向优化。
- $N$参考文本(即顾客原话转成的标准文本)中的总词数。
- 替换 $S$识别结果把某个词换成了另一个词的数量。
- 删除 $D$参考文本中有、但识别结果漏掉的词数。
- 插入 $I$参考文本中没有、但识别结果多出来的词数。
- 归一化分母三类错误之和除以总词数,换算成百分比。
AI 应用场景
智能客服质检
阶段:语音转写 + 文本分析
解决的问题:传统质检靠人工抽查录音,一天几万通电话只能听千分之一,漏掉大量“态度差”“未核实身份”等红线问题。AI 先把全量通话实时转写成文本,再用关键词和情绪模型自动筛查,让质检覆盖率达到 100%。
具体案例:某银行客服中心每天处理 10 万通电话,部署 ASR 系统后,每通电话在挂机后 10 秒内生成带说话人角色的转写文本。系统自动标记“承诺收益”“辱骂客户”“未核对身份证号”等违规片段,质检员只需复核机器标注的高风险通话。
视频字幕自动生成
阶段:离线批处理识别 + 时间轴对齐
解决的问题:知识类视频博主每条口播视频长达 1 小时,人工加字幕需要 4-6 小时,成本高且经常错过发布黄金期。ASR 系统配合 VAD 切分和标点恢复,可以自动生成带时间轴的中文字幕。
具体案例:某头部教育机构将 500 小时课程视频批量送入 ASR 流水线,结合领域热词(如“Transformer”“注意力机制”)提升专有名词识别率,生成初稿字幕,再由编辑用 10 分钟校对完成发布。整体字幕生产效率提升 20 倍。
智能家居语音控制
阶段:远场唤醒 + 命令识别 + 热词注入
解决的问题:客厅里电视声、空调声、脚步声混杂,传统的“先录音再识别”方案延迟高且非常容易误唤醒。自研 ASR 系统通过麦克风阵列降噪和流式解码,实现“边说边响应”。
具体案例:某智能音箱品牌在固件中嵌入轻量级 ASR 模型,支持“关掉客厅灯”“空调调到 26 度”等指令。遇到用户口音导致的识别失败,运营团队通过热词注入和领域语言模型增量更新,两周内将常用指令的 Top-1 准确率从 82% 提升到 94%。
Python 演示
# -*- coding: utf-8 -*-"""迷你语音识别系统演示:餐厅点单场景 用音节序列模拟音频特征,通过声学模型(发音词典)与语言模型(bigram 搭配)在候选路径中解码出最合理的点单文本,演示 Viterbi 与 Beam 两种解码方式。"""import heapq class MiniASR: def __init__(self): # 发音词典:菜名 -> 音节序列(模拟声学模型知识) self.dict_words = { "鱼香肉丝": ["yu", "xiang", "rou", "si"], "宫保鸡丁": ["gong", "bao", "ji", "ding"], "麻婆豆腐": ["ma", "po", "dou", "fu"], "米饭": ["mi", "fan"], "酸辣汤": ["suan", "la", "tang"], } # 语言模型:bigram 搭配加分 self.bigram = { "鱼香肉丝": {"米饭": 1.5, "酸辣汤": 0.8}, "宫保鸡丁": {"米饭": 1.2}, "麻婆豆腐": {"米饭": 1.0}, } def aco_score(self, word, phones): """声学模型打分:词典发音与实际音节逐一对齐""" seq = self.dict_words[word] if len(seq) != len(phones): return -100.0 return sum(1.0 if a == b else -0.5 for a, b in zip(seq, phones)) def decode_viterbi(self, phones): """Viterbi 解码:dp[i] 表示处理到第 i 个音节时的最优路径""" n = len(phones) dp = [(-1e9, []) for _ in range(n + 1)] dp[0] = (0.0, []) for i in range(n): score, path = dp[i] if score <= -1e8: continue for word, seq in self.dict_words.items(): j = i + len(seq) if j <= n and phones[i:j] == seq: add = self.aco_score(word, seq) if path: add += self.bigram.get(path[-1], {}).get(word, -0.3) if score + add > dp[j][0]: dp[j] = (score + add, path + [word]) return dp[n] def decode_beam(self, phones, beam_size=3): """Beam 搜索解码:逐层扩展并按分数保留 top-K 候选路径""" nodes = [(0.0, 0, [])] best = None while nodes: new_nodes = [] for score, pos, path in nodes: if pos == len(phones): if best is None or score > best[0]: best = (score, pos, path) continue for word, seq in self.dict_words.items(): if phones[pos:pos + len(seq)] == seq: add = self.aco_score(word, seq) if path: add += self.bigram.get(path[-1], {}).get(word, -0.3) new_nodes.append((score + add, pos + len(seq), path + [word])) if not new_nodes: break new_nodes.sort(key=lambda x: -x[0]) nodes = new_nodes[:beam_size] return best[0], best[2] if best else (0.0, []) def main(): asr = MiniASR() # 模拟输入音频:顾客说“鱼香肉丝 + 米饭” phones = ["yu", "xiang", "rou", "si", "mi", "fan"] score, words = asr.decode_viterbi(phones) print("Viterbi 解码结果:", " ".join(words), "得分:", round(score, 2)) score, words = asr.decode_beam(phones, beam_size=3) print("Beam 解码结果: ", " ".join(words), "得分:", round(score, 2)) if __name__ == "__main__": main()
phones = ["yu", "xiang", "rou", "si", "mi", "fan"]模拟麦克风输入的音节序列,相当于顾客说“鱼香肉丝,米饭”。dict_words发音词典,模拟声学模型“哪些音节拼成哪个词”的知识。add = self.aco_score(word, seq)声学模型打分:把词典发音与输入音节逐一比对,匹配得 1 分,不匹配扣 0.5 分。add += self.bigram.get(path[-1], {}).get(word, -0.3)语言模型加分:若前一个词与当前词有常见搭配(如“鱼香肉丝”后跟“米饭”),额外加分。if score + add > dp[j][0]: dp[j] = ...Viterbi 核心:只保留到达每个位置的最优路径。new_nodes.sort(key=lambda x: -x[0])Beam 搜索按分数降序排列候选。nodes = new_nodes[:beam_size]只保留分数最高的 K 条路径,控制搜索空间。
常见误区
误区“我只要把声学模型换成更大的 Transformer,识别率就会直线上升,训练数据多少无所谓。”
正解模型能力的发挥依赖数据匹配。老王再聪明,没听过四川口音也很难辨认“酸辣粉”。声学模型需要和场景匹配的数据(方言、噪声、麦克风类型)来训练,盲目堆参数只会导致过拟合和推理变慢,甚至在实际场景中不如一个小而专的模型。
为何常见:公开榜单上的大模型都用了海量匹配数据训练,人们只看到“大模型效果好”,忽略了数据与场景匹配才是关键,误把“大”当成了主要原因。
误区“反正语言模型就是算概率,直接加载一个开源的通用中文语言模型就行,不需要自己准备领域数据。”
正解通用 LM 在常见表达上表现尚可,但医疗、法律、餐厅菜单等垂直领域有大量独特术语和固定搭配。老王熟知菜单搭配,不代表他会背《刑法》条文。用领域语料微调或重训 LM,往往能让专名和习惯表达的错误率显著下降。
为何常见:通用模型在常见句子上表现不错,初看效果尚可;领域差异往往在批量评测时才暴露,容易被前期的小样本测试掩盖。
误区“训练出的模型 WER 已经低于 5%,上线肯定没问题,不用再大规模真机测试了。”
正解WER 是整体统计指标,会掩盖局部灾难。比如数字、英文名、生僻字可能错得离谱,而整体 WER 依然很好看;同时延迟、流式体验、噪声鲁棒性同样决定用户感受。老王平均准确率 99%,但每十单就把“二两”写成“两两”,后厨照样会崩溃。
为何常见:评测集往往来自干净语料,与真实噪声场景存在分布差异,导致离线 WER 乐观、线上表现打折。
误区“VAD 只是切一下语音段的辅助工具,随便设个能量阈值就行,不用仔细调。”
正解VAD 决定系统“听到什么”。在噪声环境下,阈值设太松会把咳嗽声当成语音,设太紧会把轻声细语直接丢掉。VAD 一旦不准,后面的声学模型和语言模型再好也白费——就像老王把隔壁桌的“买单”听进你这桌的订单里。
为何常见:VAD 实现简单、没有大模型那样的参数量,容易被工程师认为“不重要”,但实际上它是整条流水线的守门员。
误区“先把整段录音传上去识别,再把速度优化快一点,就能当流式识别用了。”
正解流式识别要求“边说边出”,模型只能依赖历史信息,必须使用因果结构和流式解码策略,与离线全局建模有本质区别。老王实时“跟读点单”和听完录音再慢慢誊写,是两种完全不同的功夫。
为何常见:很多人把“实时”理解为“速度快”,没意识到流式在算法结构上(因果约束、分块处理、局部重打分)有根本性变化。
面试题
Q1. 语音识别(ASR)的核心任务是什么?
- A.把声波转换成文本← 正确答案
- B.把文本合成为语音
- C.把人脸识别出来
- D.把视频压缩变小
答案:A。ASR 全称 Automatic Speech Recognition,目标是从输入的语音信号还原对应的文字。它对应老王“听声写单”的本职工作,而非 TTS(文本转语音)、人脸识别或视频压缩。
Q2. 语音进入电脑前,需要先把模拟信号变成数字信号,这个环节是?
- A.麦克风采样量化转数字← 正确答案
- B.直接把模拟信号交给 AI
- C.先把语音压缩成图片
- D.依赖语言模型即可识别
答案:A。电脑只能处理离散数字信号,必须通过 ADC(模数转换)把连续波形采样并量化。就像老王必须用耳朵这个“传感器”先接收声波,再交给大脑处理,AI 不能直接吃模拟波形。
Q3. MFCC 属于语音识别流程中的哪一层?
- A.特征提取层输出← 正确答案
- B.声学模型输出
- C.语言模型输出
- D.解码器最终输出
答案:A。MFCC(梅尔频率倒谱系数)是从波形中提炼出的声学特征向量,属于前端特征提取层。它把一帧语音变成十几到几十维的数字向量,供声学模型消费,类比老王把声音拆成“高低频零件”。
Q4. 在语音识别公式 $W^* = \arg\max_W P(W)P(O|W)$ 中,$P(W)$ 代表什么?
- A.语言模型概率← 正确答案
- B.声学模型概率
- C.特征提取概率
- D.解码器概率
答案:A。$P(W)$ 由语言模型计算,表示文本本身通顺与否的先验概率。老王听到“鱼香”就预判“肉丝”,靠的就是这种语言先验,它和声学模型 $P(O|W)$ 共同决定最终识别结果。
Q5. N-gram 语言模型的核心假设是什么?
- A.词只与其前面 n-1 个词相关← 正确答案
- B.词与所有历史词都相关
- C.语言模型不需要历史信息
- D.每个词的出现完全独立
答案:A。N-gram 基于马尔可夫假设,认为当前词只依赖于最近的 n-1 个历史词。这样就把整个句子的联合概率简化成局部条件概率的连乘,极大降低了统计和计算的复杂度。
Q6. Beam 搜索在解码时的主要作用是什么?
- A.每步保留前 K 个候选假设← 正确答案
- B.对所有路径做全量排序
- C.只保留一条最优路径
- D.随机选择一条可行路径
答案:A。Beam 搜索在每帧解码只保留得分最高的 K 条假设,兼顾精度与效率。全量排序代价太高,只留一条(贪心)容易漏掉全局最优,随机选择更是不可控。K 就像老王同时端着的候选订单份数。
Q7. WER(词错率)公式 $\frac{S+D+I}{N}$ 中的 $N$ 是什么?
- A.参考文本的总词数← 正确答案
- B.识别结果的总词数
- C.替换和插入的错误数
- D.删除和漏掉的词数
答案:A。$N$ 是参考文本(真实内容)中的总词数,作为归一化分母。替换、删除、插入三类错误之和除以 $N$ 得到错词率。选项 C 和 D 只是分子中的一部分,B 用识别结果做分母会导致指标失真。
Q8. 下列哪些方式可以有效提升特定领域(如餐饮点单)的 ASR 效果?
- A.用领域语料重训语言模型← 正确答案
- B.用领域音频做数据增强← 正确答案
- C.把声学模型参数直接翻倍
- D.在解码时注入领域热词← 正确答案
答案:ABD。领域适配最有效的手段是数据加先验:领域语料重训 LM、领域音频增强声学鲁棒性、热词注入提升专名召回。单纯加大声学模型参数而不补充领域数据,对领域错误帮助有限,还可能引入过拟合。
Q9. 关于 VAD 端点检测,下列说法正确的有哪些?
- A.VAD 用于找出有效语音段← 正确答案
- B.VAD 可以让噪声完全不进入系统
- C.VAD 不准确会严重拖累识别← 正确答案
- D.VAD 只用于离线录音任务
答案:AC。VAD 的作用是判断哪些区段包含有效语音,从而控制识别器何时开启。它不能“让噪声消失”,只能标记语音区间;识别器对 VAD 切出的边界非常敏感,切错了整句都会受影响。流式识别同样依赖 VAD,因此 D 错误。
Q10. 关于语音识别系统的工程部署,下列说法正确的有哪些?
- A.流式识别必须使用因果网络← 正确答案
- B.流式与离线可以共用同一套模型
- C.远场场景需要麦克风阵列降噪← 正确答案
- D.语言模型可以脱离声学模型独立完成识别
答案:AC。流式识别只能看到历史帧,必须使用因果卷积或单向 Transformer,与离线模型结构不同(B 错误)。远场环境下噪声和混响严重,需要麦克风阵列波束成形等增强手段。LM 负责给候选词打分,但必须与声学模型、解码器协同才能产出文本,无法独立完成识别(D 错误)。