FA-Bench,评估强制对齐器音素级和词级时间戳准确度的基准

Research

FA-Bench,评估强制对齐器音素级和词级时间戳准确度的基准

大多数强制对齐器的结果很难复现。FA-Bench 是一个开放、标准化的基线。我们以语言学家人工标注的边界为参照,为 30 个系统的音素级和词级时间戳准确度评分,测试涵盖干净音频和四种降质情形。

FA-Bench: A Benchmark for Evaluating Phone- and Word-Level Timestamp Accuracy in Forced Aligners

github.com/olewave/fa-bench · arXiv 论文

我们发布了 FA-Bench,一个衡量音素级和词级时间戳准确度的开放基准。

大多数强制对齐器的结果很难复现。各篇论文使用不同的音素集、自己的测试集划分和自己的评估指标。所以一篇论文里的数字,很少与下一篇里的数字衡量同一件事。这让语音研究人员无法做干净的消融实验,也让语音 AI 工程师无法判断该部署哪个系统。

FA-Bench 以代码形式公开整个评估流程,从标签如何归并,到每个边界如何评分。每个系统都经过同一条流水线,所以它的数字可以与其他任何系统的数字直接比较。

我们测试了什么

我们为 30 个系统评分,其中有 21 个开源模型和 9 个商用 API。每个系统都在干净音频和它的四个降质版本上运行,降质版本分别加入了混响、噪声、音乐或多人交谈声。每张结果表都把干净音频的得分和四种降质得分放在同一行,所以你可以看出,随着音频变难,系统还能保持多少准确度。

评分使用 TIMIT 的朗读语音和 Buckeye 的自发语音。两个语料库都自带音素和词的边界,由语言学家手工校正,这些边界就是参考标准。FA-Bench 不添加任何自己的标注。它原样保留语料库给出的边界时间,并把音素标签归并到共用的 TIMIT-39 标签集。

结果分为两个赛道报告。在标准转写赛道中,每个系统都拿到参考词,所以得分只衡量时间准确度。在 ASR 赛道中,每个系统自己识别词,所以识别错误会叠加到时间误差上。两个赛道分别排名。

我们的发现

在所有拿到参考转写文本的系统里,Olign 1.0 的词边界 F1 最高。这一结论在两个语料库上都成立,干净音频和加噪音频下也都成立。

20 ms 词边界 F1,标准转写赛道。数值越高越好。

系统 TIMIT 核心测试集 Buckeye 测试集
干净 / 加噪 干净 / 加噪
Olign 1.0 0.782 / 0.669 0.744 / 0.659
MFA 3.4 0.644 / 0.624 0.682 / 0.583
Qwen3-ForcedAligner-0.6B 0.399 / 0.377 0.432 / 0.391
WhisperX 0.180 / 0.170 0.165 / 0.165

加噪得分是四种降质条件的平均值。加入噪声后,Olign 领先 Montreal Forced Aligner 3.4 的幅度在 TIMIT 上从 0.138 缩小到 0.045。在 Buckeye 上,这一幅度从 0.062 扩大到 0.076。

评测的系统

强制对齐器,给定参考转写文本。 BFA · Charsiu · CrisperWhisper · FALCON · MAPS · Montreal Forced Aligner 2.0 和 3.4 · MMS-FA · NeMo Forced Aligner · NeuFA · Qwen3-ForcedAligner · stable-ts · TorchAudio-FA · UnitY2 · WhisperX

带时间戳的开源 ASR,自行识别词。 Parakeet-TDT · Qwen3-ASR · TorchAudio wav2vec2 · Whisper large-v3 · Whisper-timestamped

商用 API。 Olign · Amazon Transcribe · AssemblyAI Universal 3.5 · Azure AI Speech · Deepgram Nova-3 · ElevenLabs Scribe v2 · Google Chirp 2 · IBM Watson · Speechmatics

我们还评测了 19 种两步级联方案,由其中一个对齐器为 ASR 输出的词重新标注时间。

我们如何评分

在测量任何指标之前,必须先把系统产出的每个单元与参考标准中的一个单元配对。FA-Bench 用两种方式配对,因为每种方式各有盲区,另一种方式可以弥补。

边界 MAE、中位误差和带符号误差先按标签配对。在标签序列上运行 Levenshtein 对齐,随后比较所得配对的时间。每个数值都附带 bootstrap 95% 置信区间,旁边列出 10、50 和 100 ms 的阈值准确率。未配对的音素不会进入这个平均值,所以在这里,跳过难处理的音素不会让系统付出任何代价。

S、D、I 和 PER 说明参考音素为何没有配对。S 统计被系统改标为其他标签的音素,D 统计系统从未输出的音素,I 统计系统凭空生成的音素。为压低 MAE 而跳过难处理音素的系统,会在 D 中显现出来,所以 MAE 低、删除率高的系统不一定更好。

20 ms 边界 F1 同时按标签和时间配对。只有当边界两侧的单元都与参考标准一致,并且落在 20 ms 以内时,这个边界才算数。话语的起点和终点这两个边界也计入其中。这是主指标。被跳过的音素会让它两侧的边界失分,时刻正确但标签被替换的边界不得分。

只看时间的精确率、召回率、过分割率和 R-value见详情页。它们忽略标签,所以词错误、时刻正确的边界在这里算作找到。主指标 F1 不给这样的边界任何分数。

词层报告 MAE,以及同样校验标签的 20 ms F1。它不依赖音素,所以对只输出词的系统来说,这是唯一可以评分的层。

自己动手运行

FA-Bench 附带清单文件和运行配方。音频需要你自己获取,TIMIT 从 LDC 获取,Buckeye 通过 OSU 注册获取,并遵守各自的许可条款。运行 fabench init,它会询问每个语料库的位置。

在接触任何受许可限制的音频之前,你就可以检查评测链路。自检会构建一个合成语料库,并在上面运行整条链路。每个门禁都把结果与预先确定的答案对比。链路一旦出问题,就过不了这个门禁。

git clone https://github.com/olewave/fa-bench && cd fa-bench
uv venv --python 3.12 .venv && . .venv/bin/activate
uv pip install -e ".[test]"
fabench selftest
fabench gates

完整结果发布在 GitHub 上,包括 TIMIT 词级结果和 Buckeye 词级结果,并附有评测方法。

FA-Bench 采用 PolyForm Noncommercial 1.0.0 许可发布。它可免费用于研究、教学、个人学习,以及慈善、教育、公共安全、环保和政府类组织的工作。商业使用需要另行向 Olewave 取得许可。