強制整列

Qwen3-ForcedAlignerは音声の単語レベルのタイムスタンプ整列を提供します。非自己回帰のシングルフォワードパスを実行して、トランスクリプト内の各単語を音声波形内の正確な位置に整列させます。

仕組み

Alignerは、LIS(最長増加部分列)による単調性補正ステップを備えたCTC(Connectionist Temporal Classification)整列を使用します。これにより、生の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

# Alignerモデルバリアントを指定
.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ビット(デフォルト)aufklarer/Qwen3-ForcedAligner-0.6B-4bit約979 MB
MLX 8ビットaufklarer/Qwen3-ForcedAligner-0.6B-8bit約1.3 GB
MLX bf16aufklarer/Qwen3-ForcedAligner-0.6B-bf16約1.8 GB
CoreML INT4aufklarer/Qwen3-ForcedAligner-0.6B-CoreML-INT4約662 MB
CoreML INT8aufklarer/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

出力形式

Alignerは、秒単位の開始および終了タイムスタンプを含む単語ごとに1行を出力します:

[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はこれを自動的に処理します。長時間音声は飽和点で分割され、再整列されます。分割が発動すると、次のような1行メッセージが表示されます:

Audio 306.2s saturated after word 690 (272.6s); chunking remaining 33.6s (pass 2)

タイムスタンプのずれを調査する際は、ALIGN_DEBUG=1 を設定すると、生データと補正後のタイムスタンプインデックスがダンプされます。

既知の制限:先頭の非音声

音声が非音声コンテンツ(音楽イントロ、長い無音)で始まる場合、モデルは多くの場合、最初の単語のタイムスタンプを0秒付近に付けます。これは、分類器に「音声がまだ始まっていない」という概念がないためです。回避策:整列前に先頭の非音声をトリミングするか、Silero VADで前処理して実際の音声開始位置を見つけてください。

重要

--textが提供されない場合、Alignerはまず完全なQwen3-ASR文字起こしパスを実行し、次に結果のテキストを整列します。つまり、最初の実行ではASRモデルとAlignerモデルの両方がロードされます。--textを提供することで、ASRステップがスキップされ、Alignerのみがロードされます。