READING NOTES · CTC

不决定边界,先把所有合法对齐加起来

把未分段输入到短标签序列的单调对齐,变成可微的路径边缘化问题。
返回中文全文 →

一句话心智模型

FRAME每帧预测标签或 blank
PATH折叠重复并删除 blank
LOSS同一转写的路径概率求和

训练样本只给声学帧序列和最终音素序列,不给每个音素的起止帧。CTC 让网络在每帧输出“标签 + blank”的分布,再把所有能折叠成目标转写的路径都算作正确答案。

blank 真正解决了什么

blank 不是静音类别,也不要求对应真实声学静音。它是路径字母表里的结构符号:允许网络在尚不输出新标签的时间步停留,并把相邻相同标签分开。例如要输出连续两个 a,路径必须在两次 a 之间插入 blank;否则重复折叠后只剩一个 a。

折叠次序是“先合并连续重复,再删除 blank”。因此 -aa--abb 会得到 aab,而不是 ab

forward-backward 在算什么

把目标标签首尾及标签之间插入 blank,得到一条扩展标签链。Forward 变量累计“到当前时刻、走到链上某位置”的总概率;backward 变量累计余下部分。动态规划避免显式枚举指数数量的对齐路径。

最终 loss 是目标标签序列总概率的负对数。梯度不是只奖励一条 Viterbi 对齐,而是按当前模型下各合法路径的后验贡献分配到不同时间步。

训练与解码必须分开看

  • 训练:对所有能折叠为目标序列的路径求和,是精确的动态规划边缘化。
  • best path:逐帧取最大类再折叠,计算便宜,但不保证得到概率最高的标签序列。
  • prefix search:在标签前缀空间搜索,通常更好;原论文还利用高 blank 概率切段控制计算量。

三个常见误解

  • “CTC 学不到对齐。” 它不使用人工帧级边界,但会在路径边缘化中形成单调的隐式对齐。
  • “CTC 完全不建模上下文。” 输出路径按时间条件独立,但 RNN 隐状态本身可以编码过去与未来上下文;它不显式建模的是标签序列之间的语言依赖。
  • “blank 就是 silence。” blank 是“不发出新标签”的建模符号;静音若是任务标签,可以另外进入标签集合。
批判性判断

这篇 2006 年论文真正持久的贡献,是把“未知分段”转成神经网络可端到端优化的可微边缘化目标。TIMIT 上 30.51% LER 的数值早已不是现代性能基准,而且原始 CTC 受单调对齐、输出条件独立与弱语言建模限制;但它定义的目标函数至今仍是 ASR、OCR 和多种跨模态单调对齐任务的基础部件。

LLM WIKI · CONTEXT READER

AI 论文解读

DeepSeek V4 Flash

Enter 发送 · Shift + Enter 换行 · Esc 关闭