真实面经题目 · 原创解析

RNN-T 和 CTC 在 ASR 建模、对齐假设、流式解码和语言依赖上有什么区别?

这道题考察 ASR 中 CTC 与 RNN-T 的建模假设和流式解码差异。回答要讲清 CTC 条件独立、blank 折叠、RNN-T prediction network、联合网络和语言依赖。

出现于:虎牙 · 算法

60 秒回答模板

CTC 和 RNN-T 都解决语音帧和文本 token 长度不一致的对齐问题,但假设不同。CTC 在每个声学帧上预测 token 或 blank,训练时把所有能折叠成目标文本的路径概率相加,推理时去掉 blank 和重复 token。它结构简单、训练稳定、并行性好,但有较强的条件独立假设:当前输出主要依赖声学帧,标签间依赖弱,通常需要外部语言模型或后处理增强语言约束。 RNN-T 则由 encoder、prediction network 和 joint network 组成。encoder 处理声学特征,prediction network 基于已经输出的 token 建模历史文本上下文,joint network 决定下一个输出或 blank。它天然适合流式 ASR,因为可以边接收音频边扩展输出,并且内部建模了一定语言依赖,对端到端流式识别更友好。但 RNN-T 训练和解码更复杂,搜索空间是时间步和输出步的二维格,beam search、延迟、blank 控制和内存计算成本都更高。面试回答可以总结:CTC 简单高效但语言依赖弱,RNN-T 更适合流式端到端和上下文建模但工程复杂。

考点 CTC 和 RNN-T 都用 blank 处理帧到 token 的隐式对齐
难度 真实面经题
回答目标 让候选人能从对齐假设、结构、流式解码、语言依赖和工程成本上清楚比较 CTC 与 RNN-T。

深入解析

01

对齐问题

ASR 输入是连续帧,输出是较短文本序列,二者没有逐帧标注。CTC 和 RNN-T 都通过 blank 和路径求和学习隐式对齐。

02

CTC 假设

CTC 每帧独立预测 token/blank,最终折叠重复并移除 blank。它训练简单、可并行,但输出 token 之间的语言依赖建模较弱。

03

RNN-T 结构

RNN-T 有 encoder、prediction network 和 joint network。prediction network 读取已生成 token,joint network 融合声学和文本历史决定输出。

04

流式解码

CTC 可以做流式,但常需要前缀搜索和外部 LM;RNN-T 设计上更自然支持流式增量输出,能在低延迟场景中边听边生成。

05

语言依赖

CTC 的标签间依赖弱,通常依赖 n-gram/神经 LM shallow fusion。RNN-T 内部 prediction network 能建模部分语言上下文,但仍可结合外部 LM 提升效果。

06

工程成本

RNN-T 的训练 loss、beam search、状态缓存和调参更复杂,计算成本也高。CTC 更轻量,适合作为 baseline、辅助 loss 或低资源场景。

易错点

  • 说 CTC 必须有逐帧标注,正好相反。
  • 忽略 blank 和折叠规则。
  • 把 RNN-T 只理解成 RNN 版本的 CTC,漏掉 prediction/joint network。
  • 只比较准确率,不比较流式延迟和解码复杂度。
  • 认为 CTC 完全不能流式。
  • 忽略外部语言模型和 shallow fusion 对 CTC/RNN-T 的影响。

面试官追问

CTC 为什么需要 blank?

blank 允许模型在多数语音帧上不输出字符,也帮助区分重复字符。例如连续两个相同字符需要中间 blank 才能折叠成两个输出。

RNN-T 的 prediction network 是语言模型吗?

它类似内部语言上下文建模组件,输入历史 token,但它和声学 encoder 通过 joint network 一起训练,不等同于独立外部 LM。

CTC 能做流式吗?

可以,尤其配合流式 encoder 和前缀 beam search。但 CTC 的输出稳定性和语言依赖通常不如专门为流式设计的 RNN-T。

为什么有系统同时用 CTC 和 RNN-T?

CTC 可作为辅助 loss 加速对齐和稳定训练,也可做第一阶段候选;RNN-T 负责更强的流式端到端建模。两者组合常用于提升收敛和效果。