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列在詳細資料(Details)頁面中。它們忽略標籤,所以落在正確時間點、標在錯誤詞上的邊界,在這裡算作找到。主要指標 F1 不會給它任何分數。

詞層會報告 MAE,以及在 20 ms 下同樣核對標籤的 F1。它不依賴音素,因此只輸出字詞的系統,只能在這一層被評分。

自己動手執行

FA-Bench 隨附 manifest 檔案和 recipe 腳本。音訊要由你自己取得,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 取得授權。