CTC(连接时序分类)
一种对所有合法单调对齐路径求和、无需帧级边界即可训练序列标注模型的最大似然方法。
CTC(Connectionist Temporal Classification)解决这类监督不匹配:
- 输入是长序列 ;
- 目标是较短标签序列 ;
- 通常 ,但不知道每个 对应哪些输入时刻。
它在标签表中增加 blank,把模型的逐帧输出解释为路径分布,再把所有能折叠成目标序列的路径概率相加。训练最小化目标序列概率的负对数。
Shape 与语义账本
Section titled “Shape 与语义账本”| 符号 | 典型 shape | 语义 | ||
|---|---|---|---|---|
| 输入特征序列, 是 encoder 输出步数 | ||||
| 目标标签序列,不含 blank | ||||
| / logits | $(T, | L | +1)$ | 每个时间步对标签与 blank 的未归一化分数 |
| $(T, | L | +1)$ | softmax 后逐帧概率 | |
| 一条标签/blank 对齐路径 | ||||
| 在目标首尾及相邻标签间插入 blank 的扩展序列 | ||||
| forward / backward 动态规划状态 | ||||
| 标量 | 单样本或 batch 聚合后的负对数似然 |
这里的 不是 waveform sample 数,而是声学 encoder 或 CTC head 的输出时间步数。
- 省去帧级标注:只需完整输入和目标转写,不要求人工给出字符、音素或动作边界。
- 端到端可微:路径求和与最大似然目标可以直接对 encoder / RNN 反向传播。
- 单调对齐先验:适合语音、手写等输出顺序与输入时间顺序一致的任务。
- 计算可行:forward-backward 把指数级路径求和化为约 的动态规划。
- 接口简洁:训练只需 logits、目标标签、输入长度和目标长度,现代框架已有稳定算子。
第 1 层:逐帧概率
Section titled “第 1 层:逐帧概率”令标签字母表为 ,加入 blank 后得到 。模型在每个时间步输出:
给定 encoder 表示后,CTC 把一条完整路径的概率分解为逐时间步概率之积:
“相乘”发生在一条固定路径内部;RNN、BLSTM 或 Transformer encoder 仍可让每个时间步的分布利用上下文。
第 2 层:路径折叠
Section titled “第 2 层:路径折叠”折叠映射 执行两步:
- 合并原路径中连续相同的非 blank 标签;
- 删除全部 blank。
例如:
| 路径 | 折叠结果 |
|---|---|
A A - B |
AB |
A - A B |
AAB |
- C - A - T - |
CAT |
相邻重复标签必须由 blank 隔开,否则会先被合并。因此 blank 既提供“不发射标签”的时刻,也使 AA 这类目标可表示。
第 3 层:标签序列概率
Section titled “第 3 层:标签序列概率”同一目标序列通常对应许多不同路径。CTC 对这些互斥路径边缘化:
“求和”发生在不同合法路径之间。它表达的是:模型不必先决定唯一边界,只要所有与正确文本一致的对齐总概率足够高即可。
第 4 层:负对数似然
Section titled “第 4 层:负对数似然”单样本损失为:
负号把最大化正确序列概率改写为最小化目标;对数把极小概率变到稳定的加法尺度,并放大“正确序列总概率接近零”的惩罚。
Forward-backward 动态规划
Section titled “Forward-backward 动态规划”先构造:
长度为 。Forward 状态 汇总所有在时刻 到达 的合法路径概率。常见紧凑递推写法是:
其中只有当 不是 blank,且它不等于 时,。这条限制防止跨过 blank 后把相邻相同标签错误合并。
最终概率可由末尾两个状态得到:
Backward 变量从右向左作对称递推。 可用于计算合法路径在时刻 占用扩展标签位置 的后验质量。
训练与解码分开看
Section titled “训练与解码分开看”训练阶段:
- 已知目标 ;
- 对所有满足 的路径求和;
- 不选择唯一对齐。
推理阶段:
- 目标文本未知;
- greedy / best path 每帧取最大符号再折叠;
- prefix beam search 累计标签前缀的多条路径概率;
- 可再融合语言模型、词典或上下文约束。
因此,“CTC 训练时考虑全部路径”与“推理时取 Viterbi 路径”并不矛盾,它们属于不同阶段。
- 2006:Graves 等提出 CTC,用 RNN / BLSTM 在 TIMIT 上直接训练未分段音素序列。
- 端到端 ASR:CTC 逐渐成为声学 encoder 的主损失、辅助损失或对齐头。
- 自监督语音模型:预训练 encoder 可在少量标注下接 CTC head 微调转写。
- 混合解码与对齐:CTC posterior、Viterbi path 或 spike 可供字幕时间戳、forced alignment、TTS 数据组织使用。
- 现代多任务系统:CTC 常与 attention decoder、Transducer 或 flow / diffusion 中间层联合训练,承担单调对齐与内容约束。
- “blank 就是静音”:错。blank 表示当前 CTC 步不发射标签;静音可以被 encoder 表示,但两者没有一一对应关系。
- “CTC 会找出真实边界”:不保证。训练边缘化对齐,输出 spike 只是模型形成的概率结构;Viterbi 路径也不是人工边界真值。
- “连续两个相同标签就会输出两个字”:错。连续重复会被折叠;目标
AA需要A- A等中间有 blank 的路径。 - “训练就是 greedy 解码后算交叉熵”:错。训练对所有合法路径求和,greedy 只用于推理近似。
- “逐时刻概率相乘意味着 encoder 看不到上下文”:错。条件独立分解约束输出概率形式,encoder 隐状态仍可利用全局或局部上下文。
- “CTC 天生流式”:不一定。若 encoder 是 BLSTM 或全局 attention,仍依赖未来帧;流式性取决于 encoder、chunk、缓存和提交策略。
- “CTC 能输出比输入时间步更多的标签”:不能。标签序列长度受 约束,重复标签还需要额外 blank 步。
与相邻概念的区别
Section titled “与相邻概念的区别”| 方法 | 对齐处理 | 输出依赖 | 典型特点 |
|---|---|---|---|
| 逐帧交叉熵 | 需要帧级标签 | 每帧分类 | 简单,但依赖已分段监督 |
| CTC | 边缘化全部单调路径 | 不显式自回归建模标签历史 | 训练稳定、解码可并行或 beam search |
| RNN-T / Transducer | 在时间轴与输出轴二维路径上边缘化 | prediction network 显式依赖标签历史 | 更适合流式,但训练/解码更复杂 |
| Attention encoder-decoder | 学习软注意力对齐 | 自回归依赖输出历史 | 表达力强,但单调性与长序列稳定性需额外约束 |
| Forced alignment | 文本已知,求单条或后验边界 | 不负责识别未知文本 | 用于时间戳、数据切分与监督构造 |
CTC 与 CTC-TTS 的关系也要分清:CTC-TTS 使用训练好的 CTC-ASR 对齐器取 Viterbi 路径,构造音素—语音 token 的局部块;TTS 生成器自身优化的是语音 token 交叉熵,并非 CTC loss。
- 资料摘要:Connectionist Temporal Classification — ICML 2006 原始论文摘要、实验与全文译稿
- 自动语音识别(ASR) — CTC 的核心应用场景与现代 ASR 坐标系
- 资料摘要:CTC-TTS — CTC 路径在双流式 TTS 数据组织中的复用
- Wiki 目录