Cue:逐字高亮的强制对齐模型,准不准只能由厂商自己说

ElevenLabs 在 2026 年 10 月 28 日把 Cue 单独发布成一个可调用的接口。它是强制对齐模型,官方定位是语音转写流水线的最后一步,为每一个字符给出起止时间。它确实把标签做到了比词更细的一级,也给出了比开源工具小一到两个数量级的误差数字。但这些数字全部来自厂商自建基准,字符级本身没有金标准,本次也没有找到任何第三方复现。所以下面要回答的不是「谁更强」,而是「更细」究竟买到了什么,以及读到任何一个毫秒数时该先问哪几件事。

一、内容已知不等于变简单:难点从猜出词换成了把边界放到时间轴上

对齐值得单独评估,因为它的误差来源和 ASR 完全不同:内容已经给定,它只负责决定边界落点。在字幕软件里点转写中的某个字、播放器却跳到别处,这个错位通常不是字认错了,而是那个字的边界没有落在正确的时刻。识别对了,位置错了,两件事互不替代。

官方博客用一个场景来定义这件事:有人递给你一段视频和一份转写,请你把每个词对上它被说出口的那一刻,这就是强制对齐。同一段话还顺手澄清了它与 AI alignment 只是同名,后者讨论的是让模型行为符合人的价值取向,前者只做文本与声音的对齐。官方给的一句更工程化的说法是:强制对齐是把转写变成时间戳的那一步Cue。

对齐在时间轴上放边界,粒度可以一级级往下切:

Cue 在产品里的位置说明了这一层不是可选后处理。官方写明它是语音转文字流水线的最后一步:Scribe 负责转写,对齐器负责定时,每一个 Scribe 请求都要经过它;同一个模型还支撑字幕、配音和音乐歌词的时间对齐,并通过 Forced Alignment API 单独开放Cue。把这句话和 2026-10-28 这个日期放在一起看,才有了「对齐被抬成独立一层」这个判断:它不再是某个识别结果里的附属字段,而是一个能被单独调用、单独计价、单独演进的能力。

和 ASR 的分工也因此清楚了。ASR 的误差来自「把内容解错」,一个词听错,它两侧的边界跟着全错;强制对齐的文本已经给定,模型不必猜词,只需在一串已知单元上决定边界落在哪一帧。内容不再是变量,误差来源完全不同,评测也就必须单独做。这正是「比任何对齐器都准」不能被顺带接受的原因。

二、字符级先是一层接口:词级时间戳是从字符派生出来的视图,不是反过来

字符级买到的不是精度,而是一整层可寻址的接口,词级时间戳是从字符派生出来的视图,不是反过来。这一点在字段上就能验证。POST /v1/forced-alignment 的请求体只有两个必填项:file 与 text,响应体是两级结构加一个汇总量。characters[] 里每个字符一个 start 与一个 end,单位是秒,官方示例是 H 从 0.0 到 0.02;words[] 里每个词一套 start/end,外加一个 loss;顶层再给一个 loss。

关键在于官方对这两个 loss 的措辞。词级那个写的是「由该词的字符聚合而来的平均对齐 loss/置信度」,顶层那个写的是「由全部字符算出的平均值」。这三句话把层级关系写死了:字符才是最小对齐单元,词级是从字符派生出来的视图。官方示例也自洽,词 Hello 是 0.0 到 1.02 秒、loss 0.12,而它的首字符 H 只占 0.0 到 0.02 秒Forced Alignment API。

这层接口给出的就是「一整层可寻址的输出单元」:词级给你「词到时间」,字符级给你「字符到时间」,逐字高亮、点字跳转、逐字校对因此一次调用就能拿到。代价写在同一次响应里,输出项多了一个数量级。

边界在哪,同样由接口定义。它没有音素级输出,响应 schema 里只有字符与词两层,所以字符级是这套 API 的最细粒度,不是「更接近声学」的中间层;它没有 model_id 参数,调用方无法在接口层选择对齐模型版本;它不支持 diarization,官方明确写了给带说话人分离的文本会产生意外结果Forced Alignment API。三个「没有」合起来说明一件事:字符级是接口形态的选择,不是精度承诺。

粒度这套接口里的载体下游能拿它做什么
字符characters[].start/end逐字高亮、逐字跳转与编辑
词words[].start/end字幕整句对齐、词级检索
音素不存在需要音素边界只能另找工具

那个 loss 值得单独说一句,因为它最容易被当成精度指标。官方措辞是「average alignment loss/confidence score」,既没定义量纲也没说方向,更没有和任何可测量的时间误差挂钩。它是厂商自报的置信度,不是边界误差,第四节会回收这一点。

更需要记住的是厂商自己承认的困境。受访研究者说得很直白:精度到了人类水平之后,检查「你究竟对不对」变得很难,因为字符级没有金标准,他们不得不用词级基准来评一个字符级系统,而这未必展示了全部潜力Cue。要谈精度,得先解决用什么来评它。

三、精度卡在三处:字素到音素的一对多、按帧输出的时间网格、长音频被切块

对齐精度的上限不在参数量,而在三个具体的结构:字素到音素不是一对一、声学后验按帧输出、长音频必须切块。这三个瓶颈各自有独立的机制证据,认清自己卡在哪一处,比换一个更大的模型更有用。

第一个瓶颈是「时间网格」,它最反直觉。CTC 对齐器读边界的办法是取强制路径上第一个和最后一个字符帧,而 CTC 训练只要求字符按顺序出现,从不要求位置准确,于是模型学会把每个字符压在个别几帧上,其余帧全部给空白符。在干净 TIMIT 测试集(11,025 个词)上量出来的中位数是:词内被空白符占据的帧达到 67%,第一个字符帧落在人标起点之后中位 33 毫秒,最后一个字符帧比人标终点提前中位 26 毫秒。

图注:图为其中一个干净 TIMIT 测试句,深灰粗条是人标给出的词跨度,橙色粗条是解码器沿强制路径读出的词跨度,密集的灰线是空白符后验,蓝色细尖刺是分给字符的帧。橙色条明显短于深灰条,两者之间的空白出现在语音连续的地方,不是真实停顿。这张图说明的是边界读法的偏差,不是模型听不出词。

这张图解释了一个容易被误判的现象:解码器读出的词比人标短、起点比人标晚,模型并没有漏掉这个词,每个词的字符尖刺都在,问题在于它把词内大多数帧判给了空白符。这个偏差换信道也消不掉,G.711 编码下首个字符帧仍偏晚 33 毫秒Where Words Begin。

真正的反直觉结论在绕法一侧。把时间戳词表从 20 毫秒一格换到 10 毫秒一格、再加 1500 个 token,七个测试集上是 12.99 毫秒对 13.02 毫秒,等于没作用。原因有一个很干净的实验:把音频整体平移半帧,如果模型只知道边界落在哪一帧,它最多挪 0 或 20 毫秒,实测却有 72% 的边界跟着平移量走。帧内位置本来就在模型的分布里,被期望解码用掉了Where Words Begin。瓶颈不是网格不够细,而是表示选错了。

第二个瓶颈是「字素到音素的一对多」。经典路线的做法是把发音词典编译成加权有限状态转换器,音素是输入符号、词是输出符号,发音概率与词间静音概率直接写进边权,代价取负对数,于是越常见的发音变体代价越低。

图注:一个词的加权有限状态转换器,双圈节点是终止状态,边标签形如「输入音素 : 输出符号 / 权重」,其中包含静音符号与多个可选的发音路径。这张图只承担一件事:说明「内容已知」为什么变成一个受约束的图搜索问题,边权是负对数代价而不是概率百分比,图上读不出任何帧率或时长。

这条路线的代表是 Montreal Forced Aligner,由声学模型加发音词典两件套构成,在词典图上做受约束的路径搜索。它自身论文不讲帧移,10 毫秒帧移与 30 毫秒最短音素出自它复现的 Rousso et al. 2024,也解释了「15 毫秒左右」这个水位为什么正好落在一到两帧附近MFA 3.0。音素级平均边界误差的四套基准水位是 10.82 到 14.78 毫秒,只当开源刻度用,其协议与厂商自建基准不可并列。

第三个瓶颈是「长音频被切块」。今天最常见的长音频流水线是三段式:先用语音活动检测切分,把边界落在最小激活的非语音区,再合并成约 30 秒的块并批量转写,最后用外挂的音素模型做强制对齐拿到词级时间戳。

图注:从左到右是输入音频、语音活动检测、切分与合并、批量与补齐到 30 秒、Whisper 转写与音素模型并行、强制对齐、最后输出带时间戳的逐词转写。画面说明了三件事:块边界落在非语音区、最后一步是独立于识别的对齐模块、长音频天然要被切。图中没有精度数字,框里的时间戳是示意值。

切块是吞吐的代价。2023 年那套系统在不做切分预处理、批量开到 32 时,TED-LIUM 上的词错误率崩到 78.78%,原因是边界效应把词切了一半;缓冲式长音频转写还有更隐蔽的一层,一个窗口的时间戳误差会累积到后续所有窗口WhisperX。这条流水线至今仍是标准基线,所以第三个瓶颈对多数团队不是理论问题。

换表示的路不止一条。Qwen3-ForcedAligner 把对齐重写成槽位填充,时间戳按 80 毫秒一格离散成索引,非自回归一次解码出全部槽位Qwen3-FA;FuseAlign 不用词典也不用路径搜索,用 16 毫秒音频 patch 与字符 token 联合上下文化,再把边界卷积精修到 1 毫秒FuseAlign。三条路线的共同点只有「换表示」,机制互不相同。

瓶颈机制你看到的现象收紧的办法
字素到音素一对多一个字符可对应多个音,需在词典图上搜路径多音字、缩写、数字处边界整段错位补词典覆盖,或改用不依赖词典的路线
按帧输出的时间网格后验逐帧给出,边界落在格点上起点系统性偏晚,细容差下命中率上不去换表示(时间戳 token、槽位、卷积精修),不是提帧率
长音频切块切成约 30 秒并行处理块接缝处误差累积、漂移切点落在静音处,或逐块独立不条件于前文

四、「更准」要先固定口径:同一批数字换个指标就会翻盘

任何对齐器的毫秒数都不能直接比大小,先要问三件事:容差多大、标签是什么粒度、没定位到的词怎么算。这三件事只要有一件不同,两套数字就不在同一把尺子上。

平均绝对误差看不见系统性偏移,这是最实用的第一条。TIMIT 上有符号词边界误差的散点显示,Whisper 落在对角线上,起点和终点一样早,所以它的词时长误差在 16 毫秒以内,可整体却早了约 150 毫秒。

图注:横轴是词起点的有符号误差,纵轴是词终点的有符号误差,每个点一个系统,虚线是起点等于终点。落在虚线上意味着词时长是对的,离原点越远意味着整体偏移越大。左上聚集着一批起点偏早的系统,右上聚集着商用接口,Whisper 被单独用箭头标出,标注值是起点负 150 毫秒、终点负 135 毫秒。两轴都做过压缩,不能按线性刻度读毫秒,这张图是偏差图不是排名图。

后果很具体:如果验收方式是「检查每个词的时长对不对」,整体提前 150 毫秒的时间戳会顺利通过。同一批数据里,8 家商业 ASR 接口有 7 家词起点偏晚,其中 3 家超过 50 毫秒,而绝对误差指标对此毫无反应FA-Bench。

换指标就能换结论。只在识别器读对的词上打分等于给识别器减负,同一系统在 Buckeye 第二赛道上的平均绝对误差凭空下降 9% 到 14%;干净语音上的排名在加入噪声、音乐、混响后直接不成立,有系统从 14 个对齐器里的第三名掉到末位,而容差 F1 的排名几乎不动FA-Bench。

起点偏晚也不是某一家实现的 bug。把九个对齐器配置放在同一张图上,MFA 的两套配置与 Qwen3-ForcedAligner 的中位数几乎落在零线上,MMS 的三个配置起点明显偏在一侧,WhisperX 的起点更靠右。反过来的读法也要小心:终点偏早最明显的那个配置整体误差恰恰最大,某一侧偏早就被读成「更准」是这类图最常见的误用。

图注:横轴是预测边界减人标的毫秒数,零点为参考线,每个配置两行,蓝色是词起点、橙色是词终点,圆点是中位数,粗条是四分位区间,细线是 10% 到 90% 的范围。多个基于 CTC 的配置起点整齐地偏在一侧,说明这是按帧输出的结构性偏差而不是个别实现的失误。中位数不等于平均误差,图上也读不出各系统的容差 F1。

有了这套判据,回头看厂商那张表就能读出别的东西。Cue 的官方对照表是厂商自建基准,7 个工具对 7 项基准,脚注里的四条口径说明比表内数字更值得读。

图注:一张厂商自建的横向对照表,列是七个对齐工具,行是七项基准,从真实录音、完整录音、低资源语言、荷兰语、干净英语朗读、歌曲到测速,每行下方用小字标注数据集与口径。Cue 在多数行领先,但干净英语朗读那一行不是它:Cue 83.7%,MFA 3.4 是 92.5%。表内全是词级标签,读不出字符级边界精度。

逐条审这几处:脚注写明除歌曲外的准确率按每个工具各自的标注惯例校准了一个时间偏移,在留出的 TIMIT 数据上测得;每个工具只在其支持的语言上计分;加粗的含义是「在覆盖整个基准的工具中最优」,不是全项第一;歌曲那一行用的是 0.3 秒容差,是其它行的五倍;测速那一行把单张 GPU 与 40 核 CPU 并排在一张表里Cue。

再加上两处表内事实:干净英语朗读那一行 Cue 是 83.7%,低于 MFA 3.4 的 92.5%、Qwen3-FA 的 86.1% 与 MMS-FA 的 86.0%;歌曲那一行 92.7% 是全场最高,但厂商上一代自研对齐器在这一行是 91.5%,常被引用的「次优 82.0%」指的是 MMS-FA。这两条不影响「完整录音平均误差 179 毫秒、上一代自研对齐器 238 毫秒、开源工具中最好的 MMS-FA 283 毫秒」的方向,但说明这张表是自证材料,不是排名。

还有一层更硬的问题:这张表评的是词级标签,而 Cue 是字符级系统。厂商自己也承认这层错配,并认为这些分数可能低估了 Cue 的精度,但这是厂商的说法,不是独立验证。179 毫秒这组数字的协议公开程度同样有限,另有一组「带背景干扰的英文录音 57 毫秒」在表里没有对应行,样本构成与对照工具都未说明,引用时只能写成「厂商称」。

五、客户录音里没有干净朗读:差别全在尾部,没有标注的语言只能自举

把精度从评测台搬到客户录音,决定成败的不再是平均毫秒数,而是尾部错误和词典覆盖。口语录音里填充词、笑声、犹豫会直接污染词边界,而这些成分没有拼写,标准对齐器只能把它们算作静音或者抹到邻近词上。

一篇针对自发语音的工作把这件事拆成三层归因:转写假设崩了,因为对齐器必须用转写里的单元解释每一帧;声学模型崩了,因为噪声下特征簇互相重叠,正确的路径被窄束剪掉;训练标注脏了,因为用非逐字转写训练时,每个没转写的迟疑都是一段错标音频Noise-Robust FA。

平均值的骗人之处在这里看得最清楚。逐词边界误差的累积分布显示,典型词上各系统几乎重合,差别全在 100 毫秒之后。

图注:横轴是逐词边界误差的阈值,纵轴是误差超过该阈值的词占比,双对数坐标,共五条曲线。只有一条曲线在 100 毫秒之前落到百分之一以下;其余曲线虽然都还在这条百分之一参考线之上,但在典型词区间与它贴得很近,明显的分离出现在 100 毫秒之后的尾部。这说明各系统在典型词上差别很小,真正的差别在尾部的灾难性错位。图中只有五个系统,不能当全部基线的对比,其阈值口径也不能与容差 F1 换算。

具体数字是:超过 200 毫秒的灾难性错位,该工作占 0.37%,MFA 最好的配置占 0.98%,少 2.7 倍。但同一个工作也承认 MFA 在典型词上的中位数更锐,13.2 毫秒对它自己的 14.0 毫秒,所以这条证据讲的是「少灾难」,不是「普遍更准」Noise-Robust FA。

这里有一个明天就能做的排查动作。MFA 默认的 Viterbi 束宽是 10,在自发语音上会静默剪掉最优路径,放到 400 之后同一份 Buckeye 数据上的平均误差从 48.0 毫秒降到 25.3 毫秒,朗读语音几乎不受影响。这是算法行为不是调参失误:窄束只有在发射似然让最优路径始终贴近顶端时才安全Noise-Robust FA。

没有标注的语言变体走的是另一条路,它可以自举。

成都话那篇工作是这条配方最完整的公开样本:15 段录音约 17.7 小时,配一份覆盖全部 2876 个汉字的词典,条目形式是「汉字到音节单元」,把韵核与声调合并成一个单元,词典先由拼音库与大模型自动标注、再由两位母语者审校。理由是普通话模型的音素集在成都话上并不适用Chengdu Mandarin。

结果是:文本相关路线在专家标注的 50 分钟金标准上,音素级平均边界差 22.3 毫秒,比普通话基线低 31.8%;同一组文本相关评测里,FC 模型最好的一档(Chengdu-FC-xlsr)音素级平均边界差 30.2 毫秒,比 Charsiu-Mandarin-FC 基线低 61.2%,82.2% 的音素边界落在 50 毫秒内,基线是 52.8%;真正的文本无关任务没法做边界匹配,改用 τ 下的 p/r/F1/R 口径报告Chengdu Mandarin。

这条配方的边界要说清:它省掉的是音素级人工边界标注,不是句级转写,也不是词典,文本相关那一环两样都要;换来的是文本无关模型推理时完全不需要转写。这篇工作只做到汉字层与音素层,没有字符级结论,也不能用来回答「中文字符级是不是更难」,它的评测还包含那些其它录音已经进了训练集的说话人。

六、对齐正在被收进底座:三家补的是三块不同的地基,不能合并成同一张表

2026 年 10 月这一周发生的三件事不在同一层:一家把对齐做成可以单独买的接口,一家把词级时间戳塞进合成输出,一家补的是口音与电话信道的数据供给。混着比只会得出「谁更强」的错误结论。

合成侧的动作有具体的接口证据。AssemblyAI 在 10 月 27 日发布第一个 TTS 模型,官方路线图上早在 2026-07-23 就上线了「词级 TTS 时间戳」,流式语音事件里按词返回边界,载荷是音频起始毫秒加每个词的起点、终点与置信度。最能说明「位置决定形态」的是那条限制:这个路由只接受未压缩的 PCM,mp3 与 wav 会被拒,官方给的理由就是词时间戳坐落在音频的时间轴上AssemblyAI TTS-1。

这条线到达的是词级,和 Cue 不是同一件事,但它把「对齐要不要单独一层」换了个答案:可以不要,直接让合成输出自带。同一个模型在自家博客的中位首字节、第三方榜单的流式延迟、含网络往返的首段音频时间上分别是 47 毫秒、159 毫秒、332 毫秒,三个数字衡量的是三件不同的事,这本身就是第四节那套判据的样本。

另一家补的是完全另一块。Hurston-1 是一个基于 Maya1 的 LoRA 微调模型,主打「大多数 TTS 处理不好的英语口音」,标签枚举里是九个英语口音:美式、美式南方、尼日利亚、尼日利亚(约鲁巴)、尼日利亚(伊博)、西非、东非、东非(斯瓦希里)、南部非洲。所谓 NB-TTS 指合成之后施加 300 到 3400 赫兹带通、重采样到 8 kHz、再用 G.711 编码,训练里还含约 10 小时真实 AI 语音智能体通话录音Hurston-1。

这里最容易踩的坑是把「口音覆盖」读成「支持更多语言」。模型卡自己写着仅英语,元数据里只有一个 en 标签;仓库是 gated,需要申请授权才能取文件;它没有任何时间戳能力Hurston-1。所以它不能与任何对齐精度放进同一张表,它补的是数据供给这一侧的缺口。

谁补的是哪块地基到达的粒度没补什么
ElevenLabs Cue对齐原语化:单独开放的字符级接口字符不公开参数与权重,无第三方复现
AssemblyAI TTS-1合成侧自带时间戳词只到词级,且只在 raw PCM 上提供
Hurston-1英语口音与电话窄带的数据供给无时间戳无对齐能力,仅英语,仓库 gated

三件事放在同一条轴上才看得出版图:合成侧 7 月就自带时间戳,对齐在 10 月被单独拆成一层,口音数据由社区补齐。应用层的位置因此在变,过去要自己拼识别、对齐、合成三块能力,现在更多是选一个底座,判断依据是你要的粒度与语言覆盖它给不给得起。

收尾也就不该落在排行榜上。Cue 的字符级没有金标准,第三方复现为零,参数与权重未披露;几乎没有任何对齐器在 8 kHz 或经编解码的电话音频上对着人工标注评测过;主流对齐基准仍以英语为主(TIMIT、Buckeye、FA-Bench、AlignBench 只覆盖英语),非英语的公开基线仍稀少;成都话那篇只到汉字层与音素层。这几处都还开着。

遇到下一个「更准」的说法,按这张清单读,比记住任何一个数字都有用:

要问的为什么怎么查
容差多大20 毫秒与 50 毫秒下的命中率可以差出几十个点看脚注有没有写 within 50 ms 这类定义
标签是什么粒度词级基准评不了字符级系统看表格评的是词还是字符
没定位到的词怎么算记作错误与跳过计分是两个结论看是否写明「未定位一律算错」
测试集怎么构造干净朗读与真实录音的排名会翻转看数据来源与退化条件
是不是厂商自建基准自证材料的对照组由厂商选择看有没有第三方复现
两侧标签都要匹配吗只看一侧会漏掉系统性偏移看指标是否要求边界两侧同时正确

参考文献

本专题引用的核心资料如下,建议深入学习时阅读原文:

  1. How your transcript knows where each word is spoken — Introducing Cue, ElevenLabs' forced alignment model — https://elevenlabs.io/blog/cue-aligner
  2. Create Forced Alignment — ElevenLabs API reference — https://elevenlabs.io/docs/api-reference/forced-alignment/create
  3. FA-Bench: A Benchmark for Phone- and Word-Level Timestamp Accuracy in Forced Alignment and ASR — arXiv:2609.32396
  4. Montreal Forced Aligner and the state of speech-to-text alignment in 2026 — arXiv:2606.18466
  5. WhisperX: Time-Accurate Speech Transcription of Long-Form Audio — arXiv:2303.00747
  6. Qwen3-ASR Technical Report(含 Qwen3-ForcedAligner-0.6B) — arXiv:2601.21337
  7. Where Words Begin and End — arXiv:2610.17782
  8. FuseAlign: Forced Alignment in the Wild — arXiv:2609.33650
  9. Noise-Robust Forced Alignment for Spontaneous Speech — arXiv:2610.22583
  10. Introducing AssemblyAI-TTS-1: text-to-speech built for voice agents — https://www.assemblyai.com/blog/text-to-speech-api
  11. Hurston-1: Accented English Narrowband TTS for the Phone — https://huggingface.co/destined/hurston-1
  12. Phonetic forced alignment for low-resource language varieties: Model training and evaluation on Chengdu Mandarin — arXiv:2607.21332
Cue:逐字高亮的强制对齐模型,准不准只能由厂商自己说