真实面经题目 · 原创解析
RNN-T 和 CTC 在 ASR 建模、对齐假设、流式解码和语言依赖上有什么区别?
这道题考察 ASR 中 CTC 与 RNN-T 的建模假设和流式解码差异。回答要讲清 CTC 条件独立、blank 折叠、RNN-T prediction network、联合网络和语言依赖。
真实面经题目 · 原创解析
这道题考察 ASR 中 CTC 与 RNN-T 的建模假设和流式解码差异。回答要讲清 CTC 条件独立、blank 折叠、RNN-T prediction network、联合网络和语言依赖。
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 更适合流式端到端和上下文建模但工程复杂。
ASR 输入是连续帧,输出是较短文本序列,二者没有逐帧标注。CTC 和 RNN-T 都通过 blank 和路径求和学习隐式对齐。
CTC 每帧独立预测 token/blank,最终折叠重复并移除 blank。它训练简单、可并行,但输出 token 之间的语言依赖建模较弱。
RNN-T 有 encoder、prediction network 和 joint network。prediction network 读取已生成 token,joint network 融合声学和文本历史决定输出。
CTC 可以做流式,但常需要前缀搜索和外部 LM;RNN-T 设计上更自然支持流式增量输出,能在低延迟场景中边听边生成。
CTC 的标签间依赖弱,通常依赖 n-gram/神经 LM shallow fusion。RNN-T 内部 prediction network 能建模部分语言上下文,但仍可结合外部 LM 提升效果。
RNN-T 的训练 loss、beam search、状态缓存和调参更复杂,计算成本也高。CTC 更轻量,适合作为 baseline、辅助 loss 或低资源场景。
blank 允许模型在多数语音帧上不输出字符,也帮助区分重复字符。例如连续两个相同字符需要中间 blank 才能折叠成两个输出。
它类似内部语言上下文建模组件,输入历史 token,但它和声学 encoder 通过 joint network 一起训练,不等同于独立外部 LM。
可以,尤其配合流式 encoder 和前缀 beam search。但 CTC 的输出稳定性和语言依赖通常不如专门为流式设计的 RNN-T。
CTC 可作为辅助 loss 加速对齐和稳定训练,也可做第一阶段候选;RNN-T 负责更强的流式端到端建模。两者组合常用于提升收敛和效果。