老王在街角开了一家“语音识别餐厅”,招牌上写着“你说我听,下单立取”。客人进门说一句“来一碗小面”,后厨要的是白纸黑字的订单,于是老王搭起一整条流水线:门口的话筒把声音切成一小段一小段的“声音食材”;坐在中间的点单员(声学模型)负责把每段食材认成音素和字;后厨的大师傅(语言模型)根据“人话常识”纠正听岔的字;最后由传菜生(解码器)端出完整订单文本。老王这些年先后雇过几代点单员:老派的 HMM 老师傅、听力超群的 DNN-HMM 小张、不用逐帧标注的速记员小李,以及边听边写的同传高手小王。他们的名字,正是语音识别里三座绕不开的大山——DNN-HMM、CTC 与 RNN-T。这篇文章就带你走进老王的餐厅,看看这几代点单员各有什么绝活与软肋,以及什么场景该派谁上场。

岗位关联

掌握这三种声学模型的核心原理与差异,是进入语音识别行业、参与 ASR 系统选型与优化的必修课,能帮你快速判断在线实时识别与离线批量转写各自该用哪套方案。

目录
  1. 可视化演示
  2. 语音识别全景:一家语音餐厅的接单流程
  3. DNN-HMM混合模型:师傅喂坐标的秒表学徒
  4. CTC无对齐训练:听完再写的速记员
  5. RNN-T序列建模:边听边写的同传高手
  6. CTC解码优化:速记员的交卷技巧
  7. 三大模型对比:点单员选型大会
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

动态演示声学模型DNN CTC RN的核心机制,通过开始/执行/监控/完成四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

声学模型DNN CTC RN:声学模型 声学模型(DNN/CTC/RN 声学模型(DNN/CTC/RN 核心机制可视化 声学模型DNN CTC RN整体架构与关键组件

语音识别全景:一家语音餐厅的接单流程

老王很清楚,客人那句“来一碗小面”从声音变成订单,中间要过四道关。第一关是话筒,把连续的声音切成约 10 毫秒一小段的“声音食材”,每一段在数学上就是一个特征向量,也就是常说的特征帧;第二关是坐在前台的点单员——声学模型,他负责把每段食材辨认成“小”“面”之类的发音单元;第三关是后厨大师傅——语言模型,他熟悉菜单和说话习惯,听到“小面”不会误写成“下面”;第四关是传菜生——解码器,它把所有环节的得分汇总,端出最像客人原话的订单文本。

技术上看,这个流程可以概括成一句贝叶斯公式:识别系统要在所有可能的文本中,挑出“听起来最像”且“读起来最像人话”的那一句。声学模型管前者,给出音频与文本的匹配程度;语言模型管后者,给出文本本身的语言概率。两个分数相乘,就是候选句子的总分。

回到老王这家店,点单员听力越好(声学模型强),后厨越懂菜单(语言模型好),订单自然越准。后面几代的点单员,拼的就是“听力”和“训练成本”这对矛盾。

W^=arg⁡max⁡WP(W∣X)=arg⁡max⁡WP(X∣W)⋅P(W)\hat{W} = \mathop{\arg\max}_{W} P(W \mid X) = \mathop{\arg\max}_{W} P(X \mid W) \cdot P(W)
整个识别系统的目标,就是在声学模型和语言模型共同打分的所有句子里,挑出总分最高的一句。
  1. 目标文本 $\hat{W}$语音识别最终要输出的那句话,$\hat{W}$ 表示“最有把握的答案”,整个公式就是在找它。
    W^\hat{W}
  2. 后验概率 $P(W \mid X)$已知音频 $X$,模型判断文本 $W$ 有几分把握是客人真正说的那句。
    P(W∣X)P(W \mid X)
  3. 贝叶斯分解把后验拆成 $P(X \mid W)$ 与 $P(W)$ 相乘——“这句话听起来像什么”和“这句话像不像人话”。
    P(X∣W)⋅P(W)P(X \mid W) \cdot P(W)
  4. 取最大 $\mathop{\arg\max}$逐一给候选句子打分,总分最高的胜出,这就是解码器要做的事。
    arg⁡max⁡W\mathop{\arg\max}_{W}

DNN-HMM混合模型:师傅喂坐标的秒表学徒

老王的 HMM 老师傅有个怪癖:训练他的时候,必须由更资深的师傅拿着秒表,把每一帧声音都标上“这一秒念的是'小'的第一个状态,下一秒是第二个状态”,这种逐帧打坐标的过程叫强制对齐。没有坐标,学徒就完全抓瞎。因为 HMM 天生只会“按着时间格子走路”,每个格子里装什么音色,需要外部先告诉它。

后来老王发现,HMM 原本用来辨认音色的 GMM(高斯混合模型)耳朵不够灵,只能捕捉单点的音色。于是老王请来了听力超群的 DNN 神经网络替班:DNN 每次能把前后一摞特征帧同时看在眼里,直接判断“这一帧属于哪个音素状态”,准确率远胜 GMM。这就是 DNN-HMM 混合模型——HMM 负责时间节奏,DNN 负责音色判断,各管一摊。

不过这里有个关键的数学换算:DNN 输出的是“后验概率”(这帧像哪个状态),而 HMM 需要的是“发射概率”(这个状态产生这帧的可能性),两者要利用贝叶斯公式转换一下。

小张这位 DNN-HMM 点单员虽然耳朵灵光了,但上岗前依然得靠师傅逐帧喂坐标——标注一小时的音频要烧掉好几个小时的工时。老王看着账单直发愁:有没有一个不用“喂坐标”的点单员?

bj(ot)=P(sj∣ot)P(sj)b_j(o_t) = \frac{P(s_j \mid o_t)}{P(s_j)}
DNN 输出的置信度,要除以状态本身的出现频率,才能当作 HMM 的发射概率使用。
  1. 发射概率 $b_j(o_t)$HMM 的“耳朵”,表示时刻 $t$ 的特征 $o_t$ 由音素状态 $s_j$ 发出来的概率。
    bj(ot)b_j(o_t)
  2. 后验概率 $P(s_j \mid o_t)$DNN 听到 $o_t$ 后,给出的“属于状态 $s_j$”的置信度,这是神经网络的直接输出。
    P(sj∣ot)P(s_j \mid o_t)
  3. 先验概率 $P(s_j)$状态 $s_j$ 在全部训练数据中出现的频率,是个可以提前统计好的常数。
    P(sj)P(s_j)
  4. 相除的含义状态出现得越频繁,DNN 越倾向选它;除以先验后,把这种偏好剔除,剩下的才是 HMM 真正要的“声音证据”。
    P(sj∣ot)P(sj)\frac{P(s_j \mid o_t)}{P(s_j)}

CTC无对齐训练:听完再写的速记员

老王雇来的速记员小李,解决了“喂坐标”的烦恼。小李的训练只需要两样东西:整句音频和整句文本,不需要任何人告诉他“这一帧是哪个音素”。他的秘诀是“先写一串,再删重叠”:每一帧他可以写任意字符,包括一个特殊的占位符——空白符号(blank)。听不准的时候就写空白;一个字拖得长,就连续写好几遍;交卷前,把相邻重复的字符合并、把空白删掉,最终文本就出来了。

举个例子,模型在六帧上写出了 k、a、空白、a、空白、t,折叠后就是 kat。如果客人说的是“谢谢”这样的叠字,中间必须隔一个空白符号,否则两个“谢”会被合并成一个。这个“写了再删”的过程叫路径折叠,它让 CTC 摆脱了逐帧对齐:训练时不再需要一个确定的坐标答案,而是把所有能折叠成目标文本的路径概率统统加起来。

小李帮老王省下了天价的标注费,但缺点是要等客人把整句话说完才能动笔——离线整句识别。而且交卷时怎么写也有讲究,这个留到后面专门讲。真正能让老王“边听边下单”的,还得看下一位高手。

LCTC=−ln⁡∑π∈B−1(l)∏t=1Tpt(πt∣X)\mathcal{L}_{\text{CTC}} = -\ln \sum_{\pi \in \mathcal{B}^{-1}(l)} \prod_{t=1}^{T} p_t(\pi_t \mid X)
CTC 的损失函数做的事情是:把所有“折叠后等于目标文本”的路径概率加起来,再取负对数,作为要最小化的损失。
  1. 路径 $\pi$模型在 $T$ 帧上每帧选一个符号,连起来就是一条草稿路径,就像小李写下的一串潦草速记。
    pt(πt∣X)p_t(\pi_t \mid X)
  2. 连乘 $\prod$把每一帧选符号的概率相乘,得到整条路径的概率——好比连续抛硬币的结果一起算总概率。
    ∏t=1Tpt(πt∣X)\prod_{t=1}^{T} p_t(\pi_t \mid X)
  3. 求和 $\sum$ 与 $\mathcal{B}^{-1}(l)$把所有折叠后恰好等于目标文本 $l$ 的路径都找出来,概率全部相加,这就是 CTC 的“隐式对齐”。
    ∑π∈B−1(l)\sum_{\pi \in \mathcal{B}^{-1}(l)}
  4. 负对数 $-\ln$把概率转成损失值,概率越大损失越小,梯度下降就能顺畅更新参数。
    −ln⁡(⋅)-\ln(\cdot)

RNN-T序列建模:边听边写的同传高手

同传高手小王是老王最后的王牌。他边听客人说话边飞快写订单,客人话音刚落,菜单已经端出。他的秘密在于,每听完一小段声音,他心里有两个小人同时开会:一个叫“预测网络”,根据已经写下的内容,预测下一个最可能出现的字;另一个叫“联合网络”,把刚听到的声音信息与预测的字符信息揉在一起,当场拍板:“现在就写出这个字”还是“再听一会儿”。这个“写或不写”的决策,正是 RNN-T 能够流式输出的核心。

技术实现上,RNN-T 有两条并行的输入流:编码器逐帧读入声音,输出声学表示 $E_t$;预测网络逐个读入已输出的文本,输出文本表示 $P_u$。两条流在联合网络中相加、激活、再映射到词表(含空白符号)的概率分布。对每个时刻,模型要么吐出一个真实字符,要么输出空白表示“继续听”。

老王乐坏了:有了小王,实时字幕、语音助手这些“边说边显示”的活儿终于有人能接。不过小王也不是没代价——他训练时胃口大,需要的数据和算力都比小李多。四位点单员到底怎么排班?先看小李“交卷”的优化,再开选型大会。

p(yu∣X,y1:u−1)=Softmax(W⋅tanh⁡(Et+Pu+b))p(y_u \mid X, y_{1:u-1}) = \text{Softmax}\bigl(W \cdot \tanh(E_t + P_u + b)\bigr)
RNN-T 在每个时间步都做一次“输出还是等待”的软性决策,这让它天然具备边说边写的流式能力。
  1. 编码器输出 $E_t$代表“刚刚听到的第 $t$ 帧声音”被提炼出的信息向量。
    EtE_t
  2. 预测网络输出 $P_u$代表“已经写下的前 $u-1$ 个字”被编码成的语言趋势向量。
    PuP_u
  3. 联合融合 $E_t + P_u$把“听到的”和“想写的”相加,经过 $\tanh$ 激活和线性变换 $W$,让两种信息互相校准。
    W⋅tanh⁡(Et+Pu+b)W \cdot \tanh(E_t + P_u + b)
  4. Softmax 决策输出词表加空白上的概率分布,概率最大的位置决定“写这个字”还是“继续听”。
    Softmax(⋅)\text{Softmax}(\cdot)

CTC解码优化:速记员的交卷技巧

小李虽然训练省心,但如果“交卷”时太老实,准确率会吃亏。最简单的交卷方式是贪心解码:每一帧都选概率最大的符号,全部选完再做路径折叠,得到唯一的答案。这法子快,但容易“一错到底”——某一帧听走神了,整句就歪了。更稳妥的是束搜索:手里同时攥着 K 份草稿,每处理一帧,就把 K 份草稿各自扩展、打分,只留下总分最高的 K 份,最后挑最好的那份交卷。

束搜索还有个升级版:把后厨大师傅(语言模型)请来一起打分。客人说“来一碗小面”,耳朵再灵也可能听成“下面”,但语言模型知道“一碗小面”才是人话。于是解码的总分变成声学得分加语言模型得分,再乘一个权重系数来控制后厨的发言权;同时还会加一个“长度奖励”,防止模型为了求稳输出过短的句子。

这一套“草稿扩展 + 后厨打分”的组合拳,让 CTC 在离线批量转写里性价比极高。而 RNN-T 因为自带“预测网络”这个小型语言模型,对外部依赖少一些。现在,选型大会正式开场。

Y∗=arg⁡max⁡Y[log⁡PCTC(Y∣X)+λlog⁡PLM(Y)+γ∣Y∣]Y^{*} = \mathop{\arg\max}_{Y} \bigl[ \log P_{\text{CTC}}(Y \mid X) + \lambda \log P_{\text{LM}}(Y) + \gamma \lvert Y \rvert \bigr]
CTC 解码时,声学模型负责“像不像这句话的声音”,语言模型负责“像不像人话”,长度奖励负责“别偷懒”。
  1. 声学得分 $\log P_{\text{CTC}}(Y \mid X)$速记员小李对候选文本 $Y$ 的原始打分,取对数方便加减。
    log⁡PCTC(Y∣X)\log P_{\text{CTC}}(Y \mid X)
  2. 语言模型得分 $\lambda \log P_{\text{LM}}(Y)$后厨大师傅的常识打分,权重 $\lambda$ 控制他的纠错力度。
    λlog⁡PLM(Y)\lambda \log P_{\text{LM}}(Y)
  3. 长度奖励 $\gamma \lvert Y \rvert$$\lvert Y \rvert$ 是文本长度,$\gamma$ 让模型敢多说几个字,避免输出过短。
    γ∣Y∣\gamma \lvert Y \rvert
  4. 取最大 $\mathop{\arg\max}_{Y}$在全部候选里挑总分最高的一句作为最终订单。
    arg⁡max⁡Y[⋅]\mathop{\arg\max}_{Y}[\cdot]

三大模型对比:点单员选型大会

年底老王把几位点单员聚在一起评比,比的是四个硬指标:训练标注成本、响应速度(是否流式)、资源占用和最终精度。HMM 老师傅代表传统 GMM-HMM,小张代表 DNN-HMM,小李代表 CTC,小王代表 RNN-T。老王的结论很干脆:没有最好的点单员,只有最合适的排班表。

技术对比可以这样概括:DNN-HMM 最成熟,离线大数据量任务稳定,但必须做帧级强制对齐,训练链路长;CTC 训练最简单,不需要对齐标注,离线配合语言模型束搜索就能达到不错的精度,缺点是整句等待;RNN-T 端到端、天然流式,实时交互场景首屈一指,但训练数据量和算力门槛最高,部署也更重。工程上衡量实时能力常用 RTF(实时率)指标。

老王最终拍板:批量录音转写用 CTC + 语言模型,实时语音助手用 RNN-T,老系统平稳运行继续用 DNN-HMM。三代点单员各就各位,餐厅的生意越做越红火。你下一次遇到的语音识别需求,也不妨按这个思路来选型。

RTF=T处理T音频\text{RTF} = \frac{T_{\text{处理}}}{T_{\text{音频}}}
RTF 是模型处理一段音频所花时间与音频本身时长的比值,小于 1 才称得上“实时”。
  1. 音频时长 $T_{\text{音频}}$客人说话的原始时长,比如 10 秒。
    T音频T_{\text{音频}}
  2. 处理耗时 $T_{\text{处理}}$模型把这段音频转成文字实际花掉的时间。
    T处理T_{\text{处理}}
  3. 比值定义两者相除就是实时率,等于 1 表示“跟说话一样快”。
    RTF=T处理T音频\text{RTF} = \frac{T_{\text{处理}}}{T_{\text{音频}}}
  4. 工程标准在线服务通常要求 RTF 远小于 1,留足余量给网络传输和并发,这也是流式 RNN-T 受青睐的原因。
    RTF≪1\text{RTF} \ll 1

AI 应用场景

会议直播实时字幕

阶段:模型推理与在线服务

解决的问题:传统离线模型必须等整句话说完才开始出字,直播字幕和语音助手的首字延迟动辄两三秒,交互体验很差;RNN-T 边听边出字,首字延迟可以压到几百毫秒,符合“边说边显示”的刚需。

具体案例:某视频会议软件的实时字幕功能,主持人说“今天我们来聊一下项目进度”,字幕几乎同步逐字弹出,而旧版离线方案要等整句结束才一次性刷新字幕。工程上用 RNN-T 流式解码 + 预测网络内置语言规律,无需外部语言模型即可保持流畅。

客服录音批量转写

阶段:训练与离线解码

解决的问题:银行客服质检、访谈纪要等离线任务音频长、词表相对固定,用 CTC 训练不需要逐帧对齐标注,配合语言模型束搜索就能在数小时音频上取得高精度,成本远低于逐帧标注的 DNN-HMM 方案。

具体案例:某银行把客服通话录音批量转写成结构化文本,用于质检和舆情分析。管线采用 CTC 声学模型 + n-gram 语言模型,解码时用束搜索融合语言模型得分并加入长度奖励,转写准确率比纯贪心解码提升约 8 个百分点。

智能电视语音点歌

阶段:端侧部署与实时交互

解决的问题:智能电视算力有限,需要小模型低延迟识别;端上采用轻量 RNN-T 或 DNN-HMM 混合方案,兼顾实时性与资源占用。RNN-T 的流式特性让用户边说边看到候选词,交互更自然。

具体案例:用户对电视说“播放刘德华的忘情水”,端侧 RNN-T 流式识别在用户说完“播放”时就开始返回候选,同时结合电视端词表(歌名集合)做纠偏,最终准确命中点歌指令,全程无明显卡顿。

Python 演示

python67 行
# -*- coding: utf-8 -*-"""CTC 最小实现:路径折叠、前向算法、贪婪解码"""import numpy as np BLANK = 0TXT = {1: '小', 2: '面'} def ctc_collapse(path):    """路径折叠:合并相邻重复符号并删除空白,对应 B 映射"""    prev, out = None, []    for symbol in path:        if symbol != prev:            if symbol != BLANK:                out.append(symbol)            prev = symbol    return out def extend_labels(labels):    """给标签序列首尾与相邻处插入空白,得到扩展序列"""    ext = [BLANK]    for label in labels:        ext.append(label)        ext.append(BLANK)    return ext def ctc_forward(probs, labels):    """前向算法:累加所有能折叠成 labels 的路径概率"""    T, _ = probs.shape    ext = extend_labels(labels)    S = len(ext)    alpha = np.zeros((T, S))    alpha[0, 0] = probs[0, BLANK]    if S > 1:        alpha[0, 1] = probs[0, ext[1]]    for t in range(1, T):        for s in range(S):            total = alpha[t - 1, s]            if s >= 1:                total += alpha[t - 1, s - 1]            if s >= 2 and (ext[s] == BLANK or ext[s] == ext[s - 2]):                total += alpha[t - 1, s - 2]            alpha[t, s] = total * probs[t, ext[s]]    return alpha, ext def greedy_decode(probs):    """每帧取概率最大的符号,再做路径折叠"""    best_frames = np.argmax(probs, axis=1).tolist()    return ctc_collapse(best_frames), best_frames def to_text(ids):    """把符号 id 序列还原成可读文本"""    return ''.join(TXT.get(i, '_') for i in ids) def main():    np.random.seed(7)    labels = [1, 2]  # 1 -> 小, 2 -> 面    probs = np.random.rand(5, 3)    probs = probs / probs.sum(axis=1, keepdims=True)    alpha, ext = ctc_forward(probs, labels)    total = alpha[-1, -1] + alpha[-1, -2]    print("扩展序列(0=空白):", ext)    print("P(小面|X) = %.4f" % total)    best, frames = greedy_decode(probs)    print("逐帧贪心路径:", frames, "->", to_text(best)) if __name__ == "__main__":    main()
目的:用 NumPy 从零实现 CTC 的路径折叠、前向算法和贪婪解码,直观演示“无对齐训练”的概率计算过程。
  1. ctc_collapse(path)核心折叠规则:合并相邻重复、删除空白,对应文中“小李先写一串再删重叠”的比喻。
  2. extend_labels(labels)在标签首尾与相邻处插入空白,得到 CTC 前向算法的扩展序列,这解释了“谢谢”必须靠空白隔开的原因。
  3. total = alpha[-1, -1] + alpha[-1, -2]最终概率是扩展序列最后两个节点的概率之和。
  4. greedy_decode(probs)每帧取最大概率符号再折叠,对应文中“贪心交卷”的朴素解码方式。

常见误区

误区学 CTC 时看到“无需对齐”,以为训练完全不用标注,丢给模型一段音频它就能自己学会识字。

正解CTC 省掉的是“帧级逐时间戳对齐”,也就是不再需要告诉模型“第 3 秒是'小'、第 5 秒是'面'”;但它依然需要整句级别的文本标签“小面”作为监督信号。训练时模型是在所有能折叠成“小面”的路径里隐式地寻找对齐关系,而不是不需要标签。

为何常见:“无需对齐”四个字太有迷惑性,加上端到端宣传铺天盖地,容易让人误以为连文本都可以不要。

误区看到空白(blank)符号的名称,想当然地认为它只在静音段出现,代表“这里没声音”。

正解CTC 的空白是一个“不确定占位符”,它可以出现在任意位置,主要作用有两个:一是吸收那些听不准的对齐帧,二是隔开相邻的重复字符。比如“谢谢”写成“谢 空白 谢”才能避免两个“谢”被折叠成一个。它跟物理意义上的静音没有必然对应关系。

为何常见:名字叫“blank“,英文直译是”空白”,很容易与静音(silence)混为一谈,初学者几乎都会踩这个坑。

误区看到 DNN 深度神经网络,就觉得 DNN-HMM 和 CTC、RNN-T 一样是端到端模型,输入音频就能直接输出文本。

正解DNN-HMM 是“混合模型”:训练前必须用外部工具或 GMM 先做帧级强制对齐,再把对齐好的音素状态当标签喂给 DNN 训练;解码时还要 HMM 做时间维度的转移约束。它训练的是“帧分类器”而不是“序列模型”。真正意义上的端到端(音频进、文本出、单目标函数)是 CTC 和 RNN-T 这类序列模型。

为何常见:DNN-HMM 里既有深度网络又有完整 ASR 功能,表面看起来“一步到位”,容易忽略它背后藏着一条复杂的对齐流水线。

误区既然 RNN-T 能流式、精度又高,那所有语音识别任务都该用 RNN-T,CTC 已过时。

正解RNN-T 的训练数据需求、显存占用和部署成本都比 CTC 高;而 CTC 训练简单、离线配合语言模型性价比极高,长音频批量转写场景依然大量使用。选型要看场景:实时交互优先 RNN-T,离线批量看预算选 CTC,老系统稳定运行继续用 DNN-HMM。没有绝对最优,只有最合适。

为何常见:技术文章总爱宣传“新模型超越旧模型”,容易让人忽略工程里成本、延迟、稳定性的综合权衡。

误区以为 RNN-T 因为设计成流式,就永远只能一个字一个字往外蹦,做不了离线整句识别。

正解RNN-T 的“流式”来自它逐帧决策的输出机制,但同样可以等整句音频读完再解码,得到整句结果;许多系统还会用双向编码器让 RNN-T 变成高精度离线模型。流式与否更多是工程配置(编码器是否因果)的选择,而非模型的硬性限制。

为何常见:把“天然支持流式”误解成“只能流式”,忽略了因果编码与上下文窗口这些工程细节。

面试题

Q1. 在 DNN-HMM 混合模型中,DNN 输出的后验概率为什么要除以状态先验 P(s)?

单选题 · easy

  • A.能加快神经网络训练收敛速度
  • B.转换成 HMM 需要的发射概率← 正确答案
  • C.减少词典外词汇带来的影响
  • D.提升语音增强模块的鲁棒性

答案:B。DNN 直接输出的是后验概率(这帧像哪个状态),而 HMM 内部需要的是发射概率(这个状态产生这帧的可能性)。除以先验可以剔除状态自身出现频率带来的偏差,把它转换成 HMM 熟悉的“生成概率”,训练好的 HMM 才能正常做时间维度的动态规划。其他选项与后验转发射这一数学操作无关。

Q2. CTC 训练与传统帧级对齐训练相比,最大的区别是什么?

单选题 · easy

  • A.CTC 完全不需要任何文本标签
  • B.CTC 只能用循环神经网络来计算
  • C.传统方法需要逐帧强制对齐训练← 正确答案
  • D.CTC 无法使用卷积神经网络结构

答案:C。传统 DNN-HMM 训练前必须由外部工具对每一帧标注“属于哪个音素状态”,这就是强制对齐;而 CTC 只需要整句文本标签,通过路径折叠加前向-后向算法在训练中隐式学对齐。A 选项错误,CTC 依然需要整句文本;B、D 选项错误,CTC 对网络结构没有这种限制。

Q3. 对路径 [a, a, _ , b, b, _] 应用 CTC 折叠规则,最终得到什么?

单选题 · easy

  • A.结果字串为 aa_bb_ 原样保留
  • B.删除空白并合并重复得到 "ab"← 正确答案
  • C.只删除空白字符得到 "aab"
  • D.只合并重复字符得到 "a_b"

答案:B。CTC 路径折叠分两步:先合并相邻重复字符(两个 a 合并成一个 a,两个 b 合并成一个 b),再删除所有空白符号,因此结果是 "ab"。A 完全没折叠;C 只删空白没合并重复;D 只合并重复没删空白,都不完整。

Q4. RNN-T 中的预测网络(Prediction Network)主要作用是什么?

单选题 · mid

  • A.对输入音频做降噪增强处理
  • B.合并相邻重复的空白符号
  • C.切分语音的起止端点位置
  • D.根据已输出文本建模语言规律← 正确答案

答案:D。预测网络逐个读入已经输出的文本符号,把它们编码成一个表示“接下来大概会写什么”的向量,相当于内置了一个小型语言模型。它与编码器输出的声学表示在联合网络中融合,共同决定当前是输出字符还是输出空白继续听。A、C 是信号处理任务,B 是 CTC 的路径折叠操作,都不属于预测网络的职责。

Q5. 直播字幕要求“边说边显示”,下列哪种声学模型最合适?

单选题 · mid

  • A.离线整句 CTC 模型
  • B.流式 RNN-T 模型← 正确答案
  • C.整句注意力编码器
  • D.批处理 DNN-HMM 模型

答案:B。RNN-T 在每个时间步都做“输出还是等待”的决策,编码器采用因果结构时就能实现边听边出字,首字延迟低,是实时字幕的主流方案。离线整句 CTC 和整句注意力模型必须等整句结束才开始解码,批处理 DNN-HMM 同样不适合逐字流式输出。

Q6. CTC 前向算法中,α_t(s) 表示什么?

单选题 · hard

  • A.第 t 帧输出第 s 个符号的概率
  • B.到 t 帧第 s 节点所有合法路径概率和← 正确答案
  • C.第 t 帧属于第 s 个说话人的概率
  • D.词 s 在整句中出现的次数统计

答案:B。α_t(s) 是在扩展序列(真实标签与空白交错排列)上做动态规划的状态值:到第 t 帧为止、恰好处于第 s 个扩展节点的所有合法路径的概率之和。它把指数级多的路径用递推方式累加,是 CTC 损失可训练的关键。A 是单帧单符号的概率,C、D 与 CTC 前向算法无关。

Q7. 关于 CTC 解码,下列说法正确的有哪些?

多选题 · mid

  • A.贪婪解码每帧取最大概率符号再折叠← 正确答案
  • B.束搜索会同时保留多个候选路径← 正确答案
  • C.可以融合语言模型提升文本流畅度← 正确答案
  • D.解码结果一定与人工标注完全一致

答案:ABC。贪婪解码是所有解码方式里最朴素的:逐帧取最大概率符号,最后做一次路径折叠。束搜索则同时维护 K 份候选草稿,每帧扩展后只保留总分最高的 K 份。语言模型融合通过加权相加提升流畅度,比如区分“小面”和“下面”。D 错误,任何解码器都无法保证与人工标注完全一致。

Q8. 相比传统 GMM-HMM,DNN-HMM 混合模型的优势有哪些?

多选题 · mid

  • A.能建模更复杂的特征深层次关联← 正确答案
  • B.支持拼接相邻多帧上下文特征← 正确答案
  • C.完全不需要任何逐帧对齐信息
  • D.对音素状态的判别能力显著更强← 正确答案

答案:ABD。DNN 可以输入连续多帧的拼接特征,自动学习特征之间的深层非线性关系,对音素状态的判别能力远强于 GMM 的单点音色建模。但 DNN-HMM 训练前依然需要帧级强制对齐,C 选项错误,这也是它不同于 CTC/RNN-T 的根本之处。

Q9. 关于 RNN-T 与 CTC 的区别,说法正确的有哪些?

多选题 · hard

  • A.RNN-T 通过预测网络建模文本上下文← 正确答案
  • B.CTC 用空白符号处理重复与对齐← 正确答案
  • C.RNN-T 的联合网络决定何时输出← 正确答案
  • D.RNN-T 完全无法融合语言模型

答案:ABC。预测网络是 RNN-T 的“内置语言模型”,它把已输出文本编码成语言趋势向量;CTC 的空白符号负责吸收对齐不确定性并隔开重复字符;联合网络把声学表示和文本表示融合后做 Softmax 决策,决定吐字还是等待。D 错误,RNN-T 同样可以通过浅层融合或重打分方式引入外部语言模型。

Q10. 某批量转写系统音频长、对延迟不敏感,但标注预算紧张,最合适的方案是?

单选题 · hard

  • A.离线 CTC 并配语言模型束搜索← 正确答案
  • B.流式 RNN-T 端到端方案
  • C.传统 GMM-HMM 手工调参方案
  • D.大规模人工帧级标注方案

答案:A。CTC 不需要帧级对齐标注,训练成本低,配合语言模型束搜索在离线长音频上性价比极高,符合“延迟不敏感 + 标注预算紧张”的约束。RNN-T 虽好但训练数据门槛高;GMM-HMM 和人工帧级标注都依赖昂贵的人工对齐,与预算紧张矛盾。