由于數據資源有限,為代表性不足的語言構建有效的自動語音識別(automatic speech recognition,ASR)模型面臨獨特的挑戰。
在本文中,我將討論準備數據集、配置模型和有效訓練模型的最佳實踐。我還將討論評估指標和遇到的挑戰。通過遵循這些實踐,您可以在數據資源有限的情況下,以機密方式為 Georgian 語或任何其他語言開發自己的高質量 ASR 模型。
查找和豐富喬治亞語言數據資源
Mozilla Common Voice (MCV) 是一項旨在實現更具包容性語音技術的開源計劃,可提供各種 Georgian 語音數據。
喬治亞語的 MCV 數據集大約包括:
- 76.38 小時的經驗證訓練數據
- 19.82 小時的經驗證的開發 (開發) 數據
- 20.46 小時的驗證測試數據。
這些經過驗證的數據總計約為 116.6 小時,對于訓練穩健的自動語音識別(ASR)模型而言,這些數據仍然很小。適合此類模型的數據集從 250 小時開始算起。有關更多信息,請參閱示例:使用 Mozilla Common Voice Dataset 訓練世界語自動語音識別(ASR)模型。
為了克服這一限制,我加入了 MCV 數據集中的未經驗證的數據,該數據集包含 63.47 小時的數據。這些未經驗證的數據可能需要更加準確或清潔,因此在將其用于訓練之前,需要進行額外的處理以確保其質量。我在本文中詳細解釋了這種額外的數據處理。所有提到的數據都在預處理后的幾個小時內完成。
喬治亞語言的一個有趣的方面是其單院性,因為它沒有明顯的大寫字母和小寫字母。這使得文本標準化變得更加簡單,有可能會提高自動語音識別(ASR)性能。
選擇 FastConformer 混合傳感器 CTC BPE
- 提高速度性能:FastConformer 是 Conformer 模型的優化版本,具有 8 倍深度可分離卷積下采樣,降低計算復雜性。
- 提高準確性:該模型在多任務設置中進行訓練,其中包含聯合傳感器和CTC解碼器損失函數,可提高語音識別和轉錄準確性。
- 穩健性:多任務設置可增強對輸入數據中變化和噪聲的彈性。
- 通用性:此解決方案將結合捕獲遠程依賴項的 Conformer 模塊與適用于實時應用的高效操作,從而能夠處理更廣泛的自動語音識別任務以及不同程度的復雜性和難度。
微調模型參數可確保準確的轉錄和更好的用戶體驗,即使在處理小型數據集時也是如此。
為 ASR 模型構建喬治亞語言數據
為喬治亞語言構建穩健的 ASR 模型需要仔細的數據準備和訓練。本節將介紹如何準備和清理高質量數據,其中包括集成其他數據源和為喬治亞語言創建自定義分詞器。同時,本節還將介紹訓練模型以獲得最佳結果的不同方法。在整個過程中,我們專注于檢查和改進模型。所有步驟將在下文中詳細介紹。
- 處理數據
- 添加數據
- 創建分詞器
- 訓練模型
- 合并數據
- 評估性能
- 平均檢查點數
- 評估模型
處理數據
要創建清單文件,請使用/NVIDIA/NeMo-speech-data-processor 儲存庫。在dataset-configs
→Georgian
→MCV
文件夾,你可以找到config.yaml處理數據處理的文件。
將數據轉換為 NeMo 格式
提取所有數據并將其轉換為未來處理所需的 NeMo 格式。在 SDP 中,每個處理器按順序工作,因此后續處理器需要使用 NeMo 格式進行處理。
替換不受支持的角色
某些不受支持的字符和標點符號將替換為同等的受支持版本(表 1)。
不受支持的角色 | 替換 |
! | . |
… | . |
; | , |
“:\“”;?“-/ | 空格 |
大量空格 | 空格 |
丟棄非喬治亞數據
刪除不包含任何格魯吉亞字母的數據。這一點至關重要,因為未經驗證的數據通常包含僅帶有標點符號或空文本的文本。
按支持的字母表過濾數據
刪除任何包含不在支持的字母表中的符號的數據,僅保留帶有喬治亞字母和支持的標點符號的數據[?.,]
.
按字符和出現的單詞進行篩選
完成 SDE 分析后,字符率異常(超過 18)和字率異常(0.3 < word_rate < 2.67)的數據將被丟棄。
按持續時間篩選
丟棄持續時間超過 18 秒的任何數據,因為 MCV 中的典型音頻持續時間不到此值。
如需詳細了解如何使用NeMo-speech-data-processor
請參閱/NVIDIA/NeMo-speech-data-processorGitHub 庫和喬治亞數據集文檔。以下命令運行config.yaml
SDP 中的文件:
python main.py - - config - path = dataset_configs / georgian / mcv / - - config - name = config.yaml |
添加數據
我還從 FLEURS 數據集中整合了以下數據:
- 3.20 小時的訓練數據
- 0.84 小時的開發數據
- 1.89 小時的測試數據
我們應用了相同的預處理步驟,以確保一致性和質量。對于 FLEURS Georgian 數據,請使用相同的配置文件,但請自行下載。
創建分詞器
數據處理完成后,創建包含詞匯表的分詞器。我測試了兩種不同的分詞器:
- Google 的字節對編碼 (BPE) 分詞器
- 適用于 Transformer 的詞塊編碼分詞器
BPE 分詞器產生了更好的結果。分詞器已集成到使用以下命令創建的 NeMo 架構中:
python <NEMO_ROOT>/scripts/tokenizers/process_asr_text_tokenizer.py \ --manifest=<path to train manifest files, seperated by commas> OR --data_file=<path to text data, seperated by commas> \ --data_root="<output directory>" \ --vocab_size=1024 \ --tokenizer=spe \ --no_lower_case \ --spe_type=unigram\ --spe_character_coverage=1.0 \ --log |
運行此命令會在輸出目錄中生成兩個文件夾:
text_corpus
tokenizer_spe_unigram_1024
在訓練期間,必須輸入第二個文件夾的路徑。
訓練模型
下一步是模型訓練。我訓練了FastConformer混合傳感器CTC BPE模型。配置文件位于以下文件夾中:
<NEMO_ROOT> / examples / asr / conf / fastconformer / hybrid_transducer_ctc / fastconformer_hybrid_transducer_ctc_bpe.yaml |
從因其大型數據集和出色性能而選擇的英語模型checkpoint stt_en_fastconformer_hybrid_large_pc.nemo 開始訓練。將該checkpoint添加到配置文件中:
name: "FastConformer-Hybrid-Transducer-CTC-BPE" init_from_nemo_model: model0: path: '<path_to_the_checkpoint>/stt_en_fastconformer_hybrid_large_pc.nemo' exclude: [ 'decoder' , 'joint' ] |
通過調用以下命令訓練模型,找到性能最佳的命令,然后設置最終參數:
python <NEMO_ROOT> / examples / asr / asr_hybrid_transducer_ctc / speech_to_text_hybrid_rnnt_ctc_bpe.py\ - - config - path = <path to dir of configs> - - config - name = <name of config without .yaml>) \ model.train_ds.manifest_filepath = <path to train manifest> \ model.validation_ds.manifest_filepath = <path to val / test manifest> \ model.tokenizer. dir = <path to directory of tokenizer> ( not full path to the vocab file !)>\ model.tokenizer. type = bpe \ |
合并數據
該模型使用各種數據組合進行訓練:
- MCV-Train:訓練數據長達 76.28 小時
- MCV-Development:19.5 小時
- MCV-Test:20.4 小時
- MCV-Other: (未經驗證的數據)
- Fleur-Train:3.20 小時
- Fleur- Development:0.84 小時
- Fleur-Test:1.89 小時
由于訓練、開發、測試之間的百分比比率較小,因此在某些訓練中,我將開發數據添加到訓練數據中。
訓練期間的數據組合包括以下內容:
- MCV-Train
- MCV-Train/Dev
- MCV-Train/Dev/Other
- MCV-Train/Other
- MCV-Train/Dev-Fleur-Train/Dev
- MCV-Train/Dev/Other-Fleur-Train/Dev
評估性能
在各種 MCV 子集上訓練的 CTC 和 RNN-T 模型表明,加入其他數據 (MCV-Train/Dev/Other) 可以改善 WER,值越低表示性能越好。這突出了使用擴展數據集時模型的可靠性。
在各種 Mozilla Common Voice (MCV) 子集上訓練的 CTC 和 RNN-T 模型表明,當納入其他數據(MCV-Train/Dev/Other)時,Google FLEURS 數據集上的 WER 得到改善。較低的 WER 值表示性能更好,這突出了模型在擴展數據集方面的可靠性和穩定性。
該模型使用了大約 3.20 小時的 FLEURS 訓練數據、0.84 小時的開發數據和 1.89 小時的測試數據進行訓練,但仍然取得了值得稱道的結果。
求均檢查點
借助 NeMo 架構,您可以使用以下命令對訓練期間保存的檢查點求取平均值,以提高模型的性能:
find . - name '/checkpoints/*.nemo' | grep - v - - "-averaged.nemo" | xargs scripts / checkpoint_averaging / checkpoint_averaging.py <Path to the folder with checkpoints and nemo file > / file .nemo |
最佳參數
表 2 列出了具有最佳性能數據集 MCV-Train/Dev/Other FLEUR-Train/Dev 模型的最佳參數。
參數 | 價值 |
訓練次數 | 150 |
精度 | 32 |
分詞器 | Spe-unigram-bpe |
詞匯量 | 1024 |
標點符號 | ?,. |
最小學習率 | 2e-4 |
最高學習率 | 6e-3 |
優化器 | Adam |
批量大小 | 32 |
累積 Grad 批量 | 4 |
GPU 數量 | 8 |
評估模型
在 8 個 GPU 和 1 個節點上訓練模型需要大約 163 個小時的訓練數據 18 個小時。
評估會考慮帶有和不帶有標點符號的場景,以全面評估模型的性能。
取得令人印象深刻的結果后,我訓練了一個 FastConformer 混合傳感器 CTC BPE 流模型,以進行實時轉錄。該模型具有 5.6 秒的延遲和 1.04 秒的延遲。我使用與前面描述的模型相同的參數從英語流模型檢查點啟動訓練。表 2 比較了兩個不同的 FastConformer 與 Seamless 和 Whisper 的結果。
與 MetaAI 無縫對比
在 Mozilla Common Voice 和 Google FLEURS 數據集上,使用 CTC 的 FastConformer 和 FastConformer 串流在幾乎所有指標(word error rate(WER)、character error rate(CER)和 punctuation error rates)上的表現優于 Seamless 和 Whisper Large V3。Seamless 和 Whisper 不支持 CTC-WER。
結束語
FastConformer 作為喬治亞語言的高級 ASR 模型脫穎而出,與 MetaAI 在 MCV 數據集上的 Seamless 和在所有數據集上的 Whisper large V3 相比,實現了更低的 WER 和 CER。該模型的穩健架構和有效的數據預處理驅動了其驚人的性能,使其成為在喬治亞語等代表性不足的語言中進行實時語音識別的可靠選擇。
FastConformer 能夠適應各種數據集并針對資源受限的環境進行優化,這凸顯了其在各種 ASR 場景中的實際應用。盡管使用相對少量的 FLEURS 數據進行訓練,但 FastConformer 的效率和魯棒性值得稱道。
對于從事低資源語言ASR項目的人員來說,FastConformer是一個值得考慮的強大工具。它在Georgian ASR中的出色性能表明它在其他語言中也具有卓越的潛力。
通過將 FastConformer 前沿模型集成到您的項目中,探索其功能并提升您的自動語音識別解決方案。在評論中分享您的經驗和結果,為自動語音識別技術的進步做出貢獻。
?