强制对齐
Qwen3-ForcedAligner 为音频提供词级时间戳对齐。它通过非自回归的单次前向传播,将转写文本中的每个词对齐到其在音频波形中的精确位置。
工作原理
对齐器采用 CTC(Connectionist Temporal Classification)对齐,并引入 LIS(Longest Increasing Subsequence)单调性修正步骤。即使原始 CTC 输出中存在轻微的不一致,这也能确保时间戳始终保持有序。
| 属性 | 值 |
|---|---|
| 对齐方法 | 带 LIS 单调性修正的 CTC |
| 时间戳分辨率 | 80 ms |
| 输出类别 | 5000 |
| 推理模式 | 非自回归(单次前向传播) |
CLI 使用
对齐一个音频文件。如果没有提供转写文本,会先用 Qwen3-ASR 自动转写音频:
.build/release/speech align recording.wav
提供已知的转写文本,跳过自动转写:
.build/release/speech align recording.wav --text "The quick brown fox jumps over the lazy dog"
选项
# 直接指定转写文本
.build/release/speech align recording.wav --text "known transcript"
# 为自动转写步骤选择 ASR 模型
.build/release/speech align recording.wav --model 1.7b
# 指定对齐器模型变体
.build/release/speech align recording.wav --aligner-model default
# 设置语言
.build/release/speech align recording.wav --language en
语言支持
传入与音频语言匹配的 --language。模型官方训练了 11 种语言(en、zh、ja、ko、es、fr、de、ru、it、pt、ar);预处理器还会通过 Apple 的 NLTokenizer 原生切分日文形态素、韩文词、中文逐字,以及泰文 / 老挝文 / 高棉文 / 缅甸文 / 藏文。组合符号(天城文元音附标、泰文元音等)会被保留,因此 नमस्ते、สวัสดี 这类词不会被破坏。
模型变体
可选择多种模型变体,在大小和精度之间权衡:
| 变体 | 模型 ID | 大小 |
|---|---|---|
| MLX 4-bit(默认) | aufklarer/Qwen3-ForcedAligner-0.6B-4bit | ~979 MB |
| MLX 8-bit | aufklarer/Qwen3-ForcedAligner-0.6B-8bit | ~1.3 GB |
| MLX bf16 | aufklarer/Qwen3-ForcedAligner-0.6B-bf16 | ~1.8 GB |
| CoreML INT4 | aufklarer/Qwen3-ForcedAligner-0.6B-CoreML-INT4 | ~662 MB |
| CoreML INT8 | aufklarer/Qwen3-ForcedAligner-0.6B-CoreML-INT8 | ~1.1 GB |
使用 --aligner-model 选择变体:
.build/release/speech align recording.wav --aligner-model aufklarer/Qwen3-ForcedAligner-0.6B-8bit
输出格式
对齐器为每个词输出一行,包含以秒为单位的起止时间戳:
[0.24 - 0.48] The
[0.48 - 0.72] quick
[0.72 - 1.04] brown
[1.04 - 1.36] fox
[1.36 - 1.68] jumps
[1.68 - 1.92] over
[1.92 - 2.08] the
[2.08 - 2.40] lazy
[2.40 - 2.80] dog
每对时间戳表示该词在音频中的起止时间,分辨率为 80 ms。
长音频处理
分类头理论上最多可处理 400 秒(5000 个类别 × 80 ms),但当前发布的 Qwen3-ForcedAligner-0.6B 模型实际可靠训练范围约为 270 秒。超出该范围后,模型会输出带噪声的时间戳索引,LIS 后处理会将所有尾部词折叠到同一个时间戳上。
CLI 会自动处理这种情况:长音频会在饱和点处分块并重新对齐。当分块启动时,您会看到如下消息:
Audio 306.2s saturated after word 690 (272.6s); chunking remaining 33.6s (pass 2)
排查时间戳错位时,可设置 ALIGN_DEBUG=1 来输出原始与修正后的时间戳索引。
已知限制:前导非语音
当音频以非语音内容(音乐前奏、长时间静音)开头时,模型通常会将第一个词的时间戳标记在接近 0 秒的位置,因为分类器没有"语音尚未开始"的概念。变通方法:在对齐前修剪前导非语音内容,或使用 Silero 做 VAD 预处理以找到实际语音起点。
当没有提供 --text 时,对齐器会先运行一次完整的 Qwen3-ASR 转写,然后再对生成的文本进行对齐。这意味着首次运行会同时加载 ASR 模型和对齐器模型。提供 --text 可跳过 ASR 步骤,只加载对齐器。